C语言单链表简单实现(简单程序复杂化)
程序员文章站
2022-09-27 16:14:57
PS: goto还是很好玩的。 #include #include typedef struct _node{ int value; struct _node *next;} Node;typedef struct _list{ Node* head;}List;void add(List* pli... ......
ps: goto还是很好玩的。 #include <stdio.h> #include <stdlib.h> typedef struct _node{ int value; struct _node *next; } node; typedef struct _list{ node* head; }list; void add(list* plist,int number); void print(list* list); void deletel(list* list,int number); void freel(list* list); int main(int argc, char *argv[]) { node *head = null; list list; int number=0; list.head=null; for(;;){ printf("\n这是一个链表,现有如下功能 1.添加节点 2.遍历链表 3.查找并删除节点 4.释放链表 5.退出程序 \n请输入你想要进行的操作的选项:\n" ); out: scanf("%d",&number); switch(number){ case 1: printf("你选择了添加节点\n请输入添加节点的值,输入-1结束添加\n"); do{ scanf("%d",&number); if(number != -1){ //添加一个新的节点挂载。 add(&list,number); } }while(number != -1); printf("添加完毕"); break; case 2: printf("你选择了遍历链表\n"); //打印链表 print(&list); break; case 3: printf("你选择了查找并删除节点,请输入节点数据\n"); scanf("%d",&number); //删除一个节点 deletel(&list,number); break; case 4: printf("你选择了释放链表"); //释放链表 freel(&list); printf("释放完毕"); break; case 5: goto end; default : printf("输入错误,请重新输入\n"); goto out; } } end: printf("拜拜"); return 0; } void add(list* plist,int number){ node *p =(node*)malloc(sizeof(node)); p->value =number; p->next =null; node *last =plist->head; if(last){ while(last->next){ last = last->next; } last->next=p; }else{ plist->head = p; } } //遍历链表 void print(list* list){ node *p; for(p=list->head;p;p=p->next){ printf("%d\t",p->value); } printf("\n"); } //查找并删除节点 void deletel(list* list,int number){ node* p; int isfound =0; for(p=list->head;p;p=p->next){ if(p->value==number){ printf("找到了\n"); isfound = 1; break ; } } if(!isfound){ printf("没找到"); } node *q; for(q=null,p=list->head;p;q=p,p=p->next){ if(p->value==number){ if(q){ q->next = p->next; }else{ list->head=p->next; } free(p); printf("已经删除"); break ; } } } //释放链表 void freel(list* list){ node *q; node* p; for(p=list->head;p;p=q){ q=p->next; free(p); } }
读书和健身总有一个在路上