對單鏈表進(jìn)行遍歷、查找、插入、刪除等操作,最終效果如下:
創(chuàng)新互聯(lián)建站網(wǎng)絡(luò)公司擁有10多年的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗(yàn),上千家客戶的共同信賴。提供成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站開發(fā)、網(wǎng)站定制、友情鏈接、建網(wǎng)站、網(wǎng)站搭建、響應(yīng)式網(wǎng)站、網(wǎng)頁設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢和貼心的售后服務(wù)
相關(guān)C代碼如下:
/*線性表的鏈?zhǔn)酱鎯?chǔ)之單鏈表的尾插法*/ #include?<stdio.h> #include?<stdlib.h> #include?<malloc.h> /*定義變量*/ typedef?int?DataType; typedef?struct?node{?????//定義鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu) DataType?data; struct?node?*?pNext; }NODE; typedef?NODE?*?pNODE;???//定義鏈表結(jié)點(diǎn)類型指針 /*函數(shù)聲明*/ pNODE?createLinkList(void);???//尾插法建立單鏈表 void?TraverseLinkList(pNODE?pHead);?//遍歷單鏈表各個(gè)結(jié)點(diǎn) pNODE?LocateNode(pNODE?pHead,int?k);?//查找鏈表中是否存在某個(gè)結(jié)點(diǎn) void?InsertLinkList(pNODE?pHead,int?i,DataType?x);??//向鏈表中插入結(jié)點(diǎn) DataType?DeleteLinkList(pNODE?pHead,int?i); /*程序正文*/ int?main(void){????????????//主函數(shù) pNODE?pHead=NULL;??????// pHead?=?createLinkList();??//創(chuàng)建鏈表,并將頭結(jié)點(diǎn)地址返回 TraverseLinkList(pHead);??//將頭結(jié)點(diǎn)地址傳入遍歷函數(shù),遍歷鏈表各個(gè)結(jié)點(diǎn) pNODE?lNode?=?LocateNode(pHead,7);?//在鏈表中查找指定的值 if(lNode?==?NULL){ printf("鏈表中不存在你要查找的值\n"); }else{ printf("鏈表中存在你要查找的值\n"); } printf("向鏈表中第三個(gè)位置插入100\n"); InsertLinkList(pHead,3,100); TraverseLinkList(pHead);? printf("刪除鏈表中第四個(gè)結(jié)點(diǎn),刪除的結(jié)點(diǎn)值是%d\n",DeleteLinkList(pHead,4)); TraverseLinkList(pHead);? return?0; } pNODE?createLinkList(void){ pNODE?pHead,pTail;????//定義頭結(jié)點(diǎn)指針和尾結(jié)點(diǎn)指針 int?length,i,val; pHead=(pNODE)malloc(sizeof(NODE));??//給頭結(jié)點(diǎn)在內(nèi)存中申請地址空間 pTail=pHead;???//初始狀態(tài)頭指針和尾指針相同 if(pHead?==?NULL){??????//如果頭結(jié)點(diǎn)申請失敗就退出程序 printf("內(nèi)存分配頭結(jié)點(diǎn)失敗."); exit(-1); } printf("請輸入鏈表的結(jié)點(diǎn)個(gè)數(shù):"); scanf("%d",&length); for(i=0;i<length;i++){???//手動(dòng)依次輸入新建鏈表需要的結(jié)點(diǎn)值 printf("請輸入結(jié)點(diǎn)%d的值:",i+1);? scanf("%d",&val); pNODE?pNew=(pNODE)malloc(sizeof(NODE));??//給新結(jié)點(diǎn)在內(nèi)存中申請地址空間 if(pNew?==?NULL){???//如果新結(jié)點(diǎn)地址分配地址空間失敗,就退出程序 printf("坑爹啊,沒有足夠的內(nèi)存分配了"); exit(-1); } pNew->data=val;???//給新結(jié)點(diǎn)賦值 pTail->pNext=pNew;??//新結(jié)點(diǎn)連接到尾結(jié)點(diǎn)之后 pTail=pNew;??//尾指針指向新結(jié)點(diǎn) } pTail->pNext=NULL; //終端結(jié)點(diǎn)指針域置為空,單鏈表生成 return?pHead; //返回鏈表頭結(jié)點(diǎn) } void?TraverseLinkList(pNODE?pHead){ printf("當(dāng)前鏈表各個(gè)結(jié)點(diǎn)的值是:"); pNODE?pNew?=?pHead->pNext;??//獲取首結(jié)點(diǎn),然后從首結(jié)點(diǎn)開始進(jìn)行遍歷 while(pNew?!=?NULL){??????//判斷下一個(gè)結(jié)點(diǎn)是否為空,如果不為空,那么就輸出結(jié)點(diǎn)數(shù)據(jù)域里的值 printf("%d?",pNew->data); pNew?=?pNew->pNext; } printf("\n"); } pNODE?LocateNode(pNODE?pHead,int?k){??//查看鏈表中是否存在某個(gè)值的結(jié)點(diǎn) pNODE?pNew?=?pHead->pNext; while(pNew?&&?pNew->data!=k){ pNew=pNew->pNext; } return?pNew; } void?InsertLinkList(pNODE?pHead,int?i,DataType?x){???//向鏈表第i個(gè)位置插入結(jié)點(diǎn)x pNODE?p,s;int?j; p=pHead;j=0; while(p?!=?NULL?&&?j<i-1){ p?=?p->pNext;???//是p指向第i-1個(gè)結(jié)點(diǎn),即是指向要插入位置的前一個(gè)結(jié)點(diǎn) j++; } if(p?==?NULL){??????? printf("插入位置錯(cuò)誤"); exit(-1); } s?=?(pNODE)malloc(sizeof(NODE));??//給新結(jié)點(diǎn)申請內(nèi)存空間 s->data=x; //給新結(jié)點(diǎn)數(shù)據(jù)域賦值 s->pNext=p->pNext;??????????????//將新結(jié)點(diǎn)指向p指針?biāo)赶虻慕Y(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn) p->pNext=s;?????????????????????//將s結(jié)點(diǎn)的地址賦值給p結(jié)點(diǎn)所指向結(jié)點(diǎn)的指針域,即讓i-1位置的結(jié)點(diǎn)指向s結(jié)點(diǎn) } DataType?DeleteLinkList(pNODE?pHead,int?i){ pNODE?p,s;int?j; DataType?x; p=pHead;j=0; while(p?!=?NULL?&&?j<i-1){ p=p->pNext;????//是p指向第i-1個(gè)結(jié)點(diǎn),即是指向要插入位置的前一個(gè)結(jié)點(diǎn) j++; } if(p?==NULL){ printf("刪除位置錯(cuò)誤"); exit(-1); } s?=?p->pNext;???????????//s結(jié)點(diǎn)就是要被刪除的結(jié)點(diǎn) p->pNext=p->pNext->pNext;??//s前一個(gè)結(jié)點(diǎn)跳過s結(jié)點(diǎn)直接指向s的下一個(gè)結(jié)點(diǎn),此時(shí)s結(jié)點(diǎn)成了幽靈了 x?=?s->data;??//將s結(jié)點(diǎn)的值保存下來 free(s);??//在內(nèi)存空間中將s釋放掉 return?x;??? }
分享文章:線性表的鏈?zhǔn)酱鎯?chǔ)之單鏈表的尾插法
標(biāo)題鏈接:http://www.chinadenli.net/article46/joiihg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、建站公司、App開發(fā)、全網(wǎng)營銷推廣、商城網(wǎng)站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)