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