您好,登錄后才能下訂單哦!
/*單鏈表的練習-頭插法*/ /*單鏈表由頭結點就可以唯一確定*/ #include?<malloc.h> #include?<stdio.h> #include?<stdlib.h> //定義單鏈表結構 typedef?struct?Node{ int?data;??//數據域 Node?*?pNext;??//指針域 }NODE,*?PNODE; PNODE?create_list(void);??//創建鏈表 void?show_list(PNODE?pHead);??//顯示鏈表 void?insert(PNODE?pHead,int?pos,int?inval);?//向鏈表中某個位置插入元素 int?deleteList(PNODE?pHead,int?pos);?//刪除鏈表某個位置上的值 void?find(PNODE?pHead,int?fval);??//在鏈表中查找某個元素 void?main(){ PNODE?pHead?=?NULL;??//定義一個頭結點,初始值為空 pHead?=?create_list(); show_list(pHead); insert(pHead,2,100); show_list(pHead); find(pHead,3); printf("你所刪除的值是%d\n",deleteList(pHead,2)); show_list(pHead); } PNODE?create_list(void){ int?length,val; PNODE?pHead?=?(PNODE)malloc(sizeof(NODE));??//向內存申請頭節點空間 pHead->pNext=NULL;???//開始的時候只有頭結點自身,沒有其它結點 if(NULL?==?pHead){ printf("分配失敗,程序終止"); exit(-1); } printf("請輸入需要生成的單鏈表的長度:"); scanf("%d",&length); for(int?i=0;i<length;i++){????//for循環生成指定個數的結點 printf("請輸入第%d個節點的值:?",i+1); scanf("%d",&val); PNODE?pNew?=?(PNODE)malloc(sizeof(NODE)); if(NULL?==?pNew){ printf("分配失敗,程序終止"); exit(-1); } pNew->data=val;???//給新申請的結點數據域賦值 pNew->pNext=pHead->pNext;??//頭指針指向的下一個結點的地址賦給了新結點的指針域,也就是在當前頭結點后面直接插入一個新結點 pHead->pNext=pNew;?//頭結點指向了新的結點 } return?pHead;???//函數返回頭結點的地址 } void?show_list(PNODE?pHead){ printf("單鏈表的值如下:\n"); PNODE?P?=?pHead->pNext; while(P?!=?NULL){??????//while巡檢打印出所以結點,直到下個結點不存在 printf("%d?",P->data); P=P->pNext; } printf("\n"); } void?insert(PNODE?pHead,int?pos,int?inval){ PNODE?P?=?pHead; int?j=0; while(P?!=?NULL?&&?j<pos-1){???//如果結點不為空,把P指針移動到插入位置的前一個結點位置 P?=?P->pNext; j++; } if(P?==?NULL){ printf("插入失敗\n"); exit(-1); }else{ PNODE?pNew?=?(PNODE)malloc(sizeof(NODE));??//申請新的結點 pNew->data=inval;???//將要插入的值賦值給新結點的數據域 pNew->pNext=P->pNext;??//新結點指向P指針指向的下一個結點 P->pNext=pNew;?//P指針所在的結點指向新結點 printf("你已經成功的插入了元素%d到鏈表中.\n",inval); } } int?deleteList(PNODE?pHead,int?pos){ PNODE?P?=?pHead,S; int?j=0,x; if(P?!=?NULL?&&?j<pos-1){ P?=?P->pNext; j++; } if(P?==?NULL){ printf("刪除失敗,數組是空的"); exit(-1); }else{ S?=?P->pNext; P->pNext?=?S->pNext; x?=?S->data; free(S); return?x; } } void?find(PNODE?pHead,int?fval){ PNODE?P?=?pHead; int?cnt=0; if(P?==?NULL){ printf("不用找了,鏈表是空的\n"); exit(-1); } while(P?!=?NULL){ P?=?P->pNext; ++cnt; if(P->data==fval){ printf("你要找的數%d在鏈表中,它在鏈表的第%d個位置\n",fval,cnt); break; } } }
結果截圖
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。