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); } }
讀書和健身總有一個在路上