版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C++深入分析講解鏈表目錄鏈表的概述1、數(shù)組特點(diǎn)2、鏈表的概述3、鏈表的特點(diǎn)靜態(tài)鏈表鏈表的操作1、鏈表插入節(jié)點(diǎn)頭部之前插入節(jié)點(diǎn)尾部之后插入節(jié)點(diǎn)有序插入節(jié)點(diǎn)2、遍歷鏈表節(jié)點(diǎn)3、查詢指定節(jié)點(diǎn)4、刪除指定節(jié)點(diǎn)5、釋放鏈表6、鏈表的翻轉(zhuǎn)7、鏈表的排序
鏈表的概述
1、數(shù)組特點(diǎn)
1、空間連續(xù)、元素類型相同、通過下標(biāo)快速訪問
2、靜態(tài)數(shù)組:空間一旦確定不能更改(動(dòng)態(tài)數(shù)組除外)
3、靜態(tài)、動(dòng)態(tài)數(shù)組插入刪除元素需要移動(dòng)大量數(shù)據(jù)
2、鏈表的概述
鏈表是一種物理存儲(chǔ)上非連續(xù),數(shù)據(jù)元素的邏輯連續(xù)通過鏈表節(jié)點(diǎn)中的指針變量保存下個(gè)節(jié)點(diǎn)的地址,實(shí)現(xiàn)的一種線性存儲(chǔ)結(jié)構(gòu)。
3、鏈表的特點(diǎn)
鏈表由一系列節(jié)點(diǎn)(鏈表中每一個(gè)元素稱為節(jié)點(diǎn))組成,節(jié)點(diǎn)在運(yùn)行時(shí)動(dòng)態(tài)生成(malloc,calloc),每個(gè)節(jié)點(diǎn)包括兩個(gè)部分:
數(shù)據(jù)域:存放節(jié)點(diǎn)數(shù)據(jù)(核心)
指針域:結(jié)構(gòu)體指針變量保存下一個(gè)節(jié)點(diǎn)的地址
靜態(tài)鏈表
#includestdio.h
//設(shè)計(jì)節(jié)點(diǎn)類型
typedefstructstu
//數(shù)據(jù)域
intnum;
charname[32];
floatscore;
//指針域
structstu*next;
}STU;
intmain(intargc,charconst*argv[])
//靜態(tài)鏈表的節(jié)點(diǎn)不是從堆區(qū)申請(qǐng)
STUnode1={100,"lucy",77.7f};
STUnode2={101,"bob",66.7f};
STUnode3={102,"tom",55.7f};
STUnode4={103,"hehe",74.7f};
STUnode5={104,"xixi",73.7f};
//構(gòu)建成鏈表
STU*head=NULL;
head=node1;
node1.next=node2;
node2.next=node3;
node3.next=node4;
node4.next=node5;
node5.next=NULL;
//遍歷鏈表(從頭節(jié)點(diǎn)逐個(gè)節(jié)點(diǎn)遍歷)
STU*pb=head;
while(pb!=NULL)
printf("%d%s%f\n",pb-num,pb-name,pb-score);
//移動(dòng)到下一個(gè)節(jié)點(diǎn)
pb=pb-next;
return0;
}
鏈表的操作
增、刪、改、查
學(xué)生管理系統(tǒng)講解鏈表
1、鏈表插入節(jié)點(diǎn)
幫助信息函數(shù):
voidhelp(void)
printf("******************************\n");
printf("*insert:插入鏈表節(jié)點(diǎn)*\n");
printf("*printf:遍歷鏈表節(jié)點(diǎn)*\n");
printf("*search:查詢鏈表節(jié)點(diǎn)*\n");
printf("*delete:刪除鏈表節(jié)點(diǎn)*\n");
printf("*free:釋放鏈表節(jié)點(diǎn)*\n");
printf("*quit:遍歷鏈表節(jié)點(diǎn)*\n");
printf("******************************\n");
return;
}
頭部之前插入節(jié)點(diǎn)
STU*insert_link(STU*head,STUtmp)
//為插入的節(jié)點(diǎn)申請(qǐng)空間
STU*pi=(STU*)calloc(1,sizeof(STU));
//給空間賦值
*pi=tmp;
pi-next=NULL;
//判斷鏈表是否存在
if(NULL==head)//空
head=pi;
//returnhead;
else//非空
pi-next=head;
head=pi;
//returnhead;
returnhead;
}
尾部之后插入節(jié)點(diǎn)
//尾部插入節(jié)點(diǎn)
STU*insert_link(STU*head,STUtmp)
//為插入的節(jié)點(diǎn)申請(qǐng)空間
STU*pi=(STU*)calloc(1,sizeof(STU));
//給空間賦值
*pi=tmp;
pi-next=NULL;
//判斷鏈表是否存在
if(NULL==head)
head=pi;
returnhead;
else
//尋找尾部節(jié)點(diǎn)
STU*pb=head;
while(pb-next!=NULL)
pb=pb-next;
//將pi插入到尾節(jié)點(diǎn)后
pb-next=pi;
returnhead;
returnhead;
}
有序插入節(jié)點(diǎn)
//有序插入節(jié)點(diǎn)
STU*insert_link(STU*head,STUtmp)
//為插入的節(jié)點(diǎn)申請(qǐng)空間
STU*pi=(STU*)calloc(1,sizeof(STU));
//給空間賦值
*pi=tmp;
pi-next=NULL;
//判斷鏈表是否存在
if(NULL==head)
head=pi;
returnhead;
else
//尋找插入點(diǎn)
STU*pf=NULL,*pb=NULL;
pf=pb=head;
//從小---大排序
while((pb-numpi-num)(pb-next!=NULL))
pf=pb;
pb=pb-next;
if(pb-num=pi-num)//頭部插入、中部插入
if(pb==head)//頭部插入
pi-next=head;
head=pi;
else//中部插入
pf-next=pi;
pi-next=pb;
elseif(pb-next==NULL)//尾部插入
pb-next=pi;
returnhead;
}
2、遍歷鏈表節(jié)點(diǎn)
voidprintf_link(STU*head)
//1、判斷鏈表是否存在
if(NULL==head)
printf("鏈表不存在\n");
return;
else//2、鏈表存在,逐個(gè)節(jié)點(diǎn)遍歷鏈表
STU*pb=head;
while(pb!=NULL)
printf("%d%s%f\n",pb-num,pb-name,pb-score);
//pb指向下一個(gè)節(jié)點(diǎn)
pb=pb-next;
return;
}
3、查詢指定節(jié)點(diǎn)
STU*search_link(STU*head,char*name)
//判斷鏈表是否存在
if(NULL==head)
printf("鏈表不存在\n");
returnNULL;
else//鏈表存在
//逐個(gè)節(jié)點(diǎn)查詢
STU*pb=head;
while((strcmp(pb-name,name)!=0)(pb-next!=NULL))
pb=pb-next;
if(strcmp(pb-name,name)==0)//找到
returnpb;
else
printf("未找到相關(guān)節(jié)點(diǎn)信息\n");
returnNULL;
returnNULL;
}
4、刪除指定節(jié)點(diǎn)
STU*delete_link(STU*head,char*name)
//判斷鏈表是否存在
if(NULL==head)
printf("鏈表不存在\n");
returnhead;
else
STU*pf=NULL,*pb=NULL;
pf=pb=head;
//尋找刪除點(diǎn)
while((strcmp(pb-name,name)!=0)(pb-next!=NULL))
pf=pb;
pb=pb-next;
//找到刪除點(diǎn)
if(strcmp(pb-name,name)==0)
if(head==pb)//頭部刪除
head=head-next;
else//中尾部刪除
pf-next=pb-next;
//釋放pb
if(pb!=NULL)
free(pb);
pb=NULL;
else//未找到刪除點(diǎn)
printf("未找到刪除的相關(guān)節(jié)點(diǎn)信息\n");
returnhead;
}
5、釋放鏈表
STU*free_link(STU*head)
//判斷鏈表是否存在
if(NULL==head)
printf("鏈表不存在\n");
returnhead;
else//鏈表存在
STU*pb=head;
while(pb!=NULL)
//head紀(jì)錄下一個(gè)節(jié)點(diǎn)的位置
head=head-next;
//釋放pb指向的節(jié)點(diǎn)
if(pb!=NULL)
free(pb);
pb=NULL;
//pb指向下一個(gè)節(jié)點(diǎn)
pb=head;
printf("鏈表節(jié)點(diǎn)已經(jīng)完全釋放\n");
returnhead;
}
6、鏈表的翻轉(zhuǎn)
STU*reverse_link(STU*head)
//判斷鏈表是否存在
if(NULL==head)
printf("鏈表不存在\n");
returnhead;
else
STU*pb=head-next;
STU*pn=NULL;
//將頭結(jié)點(diǎn)指針域指向NULL
head-next=NULL;
//逐個(gè)節(jié)點(diǎn)翻轉(zhuǎn)
while(pb!=NULL)
//pn紀(jì)錄pb-next的節(jié)點(diǎn)
pn=pb-next;
//進(jìn)行反向連接
pb-next=head;
//移動(dòng)head到pb上
head=pb;
//pb指向pb的節(jié)點(diǎn)
pb=pn;
returnhead;
}
7、鏈表的排序
//選擇法對(duì)鏈表排序
voidsort_link(STU*head)
//判斷鏈表是否存在
if(NULL==head)
printf("鏈表不存在\n");
return;
else
STU*p_i=head,*p_j=head;//inti=0,j=0;
while(p_i-next!=NULL)//for(i=0;ii++)
STU*p_min=p_i;//intmin=i;
p_j=p_min-next;//j=min+1
while(p_j!=NULL)//jn
if(p_min-nump_j-num)//if(arr[min]arr[j])
p_min=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外勤機(jī)械工復(fù)試考核試卷含答案
- 刨插工安全培訓(xùn)效果評(píng)優(yōu)考核試卷含答案
- 玻璃制品手工成型工安全宣傳強(qiáng)化考核試卷含答案
- 海鹽采收工班組建設(shè)競賽考核試卷含答案
- 絞車操作工安全素養(yǎng)競賽考核試卷含答案
- 磚瓦生產(chǎn)工安全素養(yǎng)測試考核試卷含答案
- 海南房產(chǎn)中介培訓(xùn)課程
- 酒店員工培訓(xùn)計(jì)劃實(shí)施與跟蹤制度
- 酒店客房用品更換與補(bǔ)給制度
- 超市員工培訓(xùn)及業(yè)務(wù)知識(shí)制度
- 音樂場所衛(wèi)生管理制度
- 2026云南昭通市搬遷安置局招聘公益性崗位人員3人備考題庫及答案詳解(考點(diǎn)梳理)
- 標(biāo)書財(cái)務(wù)制度
- 四川發(fā)展控股有限責(zé)任公司會(huì)計(jì)崗筆試題
- 2026中國電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘備考題庫及一套答案詳解
- 2025-2030心理健康行業(yè)市場發(fā)展分析及趨勢前景與投資戰(zhàn)略研究報(bào)告
- 技術(shù)副總年終總結(jié)
- 《馬年馬上有錢》少兒美術(shù)教育繪畫課件創(chuàng)意教程教案
- 天津市專升本高等數(shù)學(xué)歷年真題(2016-2025)
- 2025山西焦煤集團(tuán)所屬華晉焦煤井下操作技能崗?fù)艘圮娙苏衅?0人筆試參考題庫帶答案解析
- 兒童骨科主任論兒童骨科
評(píng)論
0/150
提交評(píng)論