
单链表的插入和删除函数的运算
1个回答
2016-04-21
展开全部
以下是我几年前写的一个链表程序,很初级,你可以看看,#include#include#includetypedefstructNode{chardata;structNode*next;}node;voidInsert(node*);//插入voidFind(node*);//查找intCount(node*);//链表长度voidUpdate(node*);//修改voidDelete(node*);//删除voidShow(node*);//输出intmain(){inta;nodehead;head.next=NULL;printf("***********链表的操作************\n\n");while(1){a=0;printf("***********请选择您的操作***********\n\n");printf("1链表的插入\t2链表的查找\t3链表的修改\n4链表的删除\t5链表的输出\t6退出系统\n");scanf("%d",&a);switch(a){case1:Insert(&head);break;case2:Find(&head);break;case3:Update(&head);break;case4:Delete(&head);break;case5:Show(&head);break;case6:exit(-1);break;default:printf("输入错误!");break;}}return0;}intCount(node*head){node*pH=head;intcount=0;while(pH->next!=NULL){pH=pH->next;count++;}returncount;}voidInsert(node*head){intwhich=0;inti=0;intj=1;charch;node*pH=head;printf("\n1.首插入2.未插入3.插入到位置i\n");printf("请选择:");scanf("%d",&which);ch=getchar();if(which==1){printf("请输入值:");scanf("%c",&ch);node*q=(node*)malloc(sizeof(Node));q->data=ch;q->next=pH->next;pH->next=q;}elseif(2==which){while(pH->next!=NULL){pH=pH->next;}printf("请输入值:");scanf("%c",&ch);node*q=(node*)malloc(sizeof(Node));q->data=ch;q->next=pH->next;pH->next=q;}elseif(3==which){printf("请输入i的值:");scanf("%d",&i);ch=getchar();if((i>0)&&(inext;j++;}printf("请输入值:");scanf("%c",&ch);node*q=(node*)malloc(sizeof(Node));q->data=ch;q->next=pH->next;pH->next=q;}else{printf("i输入错误!\n");}}else{printf("选择错误!\n");}return;}voidShow(node*pH){printf("链表输出:\n");if(pH->next==NULL){printf("链表为空!\n");return;}else{while(pH->next!=NULL){pH=pH->next;printf("%3c",pH->data);}printf("\n输出结束!\n");}}voidFind(node*head){intwhich=0;intj=0;inti=0;charch;boolis_have=false;node*q=head->next;if(Count(head)==0){printf("链表为空!无法查找.\n");return;}printf("1.查找内容的位置2.查找位置的内容\n");scanf("%d",&which);ch=getchar();if(1==which){printf("请输入要查找的内容:");scanf("%c",&ch);while(q!=NULL){j++;if(q->data==ch){printf("%c是第%d个。\n",ch,j);is_have=true;}q=q->next;}if(is_have==false){printf("所查找的内容在链表中不存在!");}}elseif(2==which){j=0;printf("请输入要查找的位置:");scanf("%d",&i);if(i>Count(head)||inext;j++;}printf("内容为:%c",q->data);}else{printf("选择错误!\n");}return;}voidUpdate(node*head){node*q=head->next;inti=0;intj=0;charch;if(Count(head)==0){printf("链表为空!无法查找.\n");return;}printf("请输入要修改的位置:");scanf("%d",&i);ch=getchar();if(i>Count(head)||inext;j++;}q->data=ch;printf("修改成功!\n");return;}voidDelete(node*head){node*q=head->next;node*p=head;inti=0;intj=0;charch;if(Count(head)==0){printf("链表为空!无法删除.\n");return;}printf("1.全部删除2.删除单个\n");scanf("%d",&i);ch=getchar();if(1==i){while(q!=NULL){p=p->next;q=q->next;free(p);}head->next=NULL;printf("释放成功!\n");}elseif(2==i){printf("请输入要删除的位置:");scanf("%d",&i);ch=getchar();if(i>Count(head)||inext;q=q->next;j++;}p->next=q->next;free(q);printf("删除成功!\n");}else{printf("选择错误!\n");}}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询