




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、7.2 鏈表與鏈表的基本操作 線性表是最簡單,最常用的一種數(shù)據(jù)結(jié)構(gòu)。線性表的邏輯結(jié)構(gòu)是n個數(shù)據(jù)元素的有限序列(a1,a2,an)。而線性表的物理結(jié)構(gòu)包括:順序表(數(shù)組),鏈表 。7.2.1 單鏈表基本算法 7.2.3 雙向鏈表(選讀)7.2.1 單鏈表基本算法單鏈表(Singly Linked list): 有若干結(jié)點(Node)組成。一個結(jié)點包含info和link兩個域,info域存放數(shù)據(jù),類型由應(yīng)用決定;link存放指向該鏈表中下一個結(jié)點的地址。結(jié)點定義如下: typedef int DataType; /數(shù)據(jù)為整型struct Node DataType info; Node *link
2、;在C/C+中允許一個類型(結(jié)構(gòu)體或類)的數(shù)據(jù)成員是自身的指針類型,但決不能是自身類型,這會導(dǎo)致一個無窮遞歸的定義。 7.2.1 單鏈表基本算法通常使用表頭指針head指向單鏈表的第一個結(jié)點,head在使用中千萬不可丟失,否則鏈表整個丟失,內(nèi)存也發(fā)生泄漏。infon-1 info2 info1 info0 head圖7.3 單鏈表結(jié)構(gòu) 單鏈表的插入與刪除: 只要改變鏈中結(jié)點指針的值,無需移動表中的結(jié)點,就能實現(xiàn)插入和刪除操作。若考慮在鏈表中包含數(shù)據(jù)info的結(jié)點之前插入一個新元素,則有三種情況:info位于第一個結(jié)點;位于中間某個結(jié)點;沒找到info。 7.2.1 單鏈表基本算法infoxin
3、fo0info1headhead插在鏈?zhǔn)祝?首先新結(jié)點的link指針指向info0所在結(jié)點,然后,head指向新結(jié)點。即:newnode-link=head;head=newnode; /注意:鏈表操作次序非常重要newnodehead注意:訪問符“.”與“-”的區(qū)別。p-link: p為結(jié)點指針;n.link: n為結(jié)點;p-link等價于(*p).link。7.2.1 單鏈表基本算法infoxinfoi-1infoinewnode插在中間: 結(jié)點型指針q為指向infoi-1的工作指針,則:newnode-link=q-link;q-link=newnode;7.2.1 單鏈表基本算法inf
4、ox newnodepinfon-1 插在隊尾:只要工作指針p找到隊尾,即可鏈在其后:p-link=newnode;newnode-link=NULL;7.2.1 單鏈表基本算法帶表頭結(jié)構(gòu)的鏈表:通過給每一個鏈表加上一個表頭結(jié)點,可以提高結(jié)點插入操作的通用性??毡砣缦拢篽eadinfo0Infon-1info1head 下面將介紹帶表頭結(jié)構(gòu)的鏈表的各種基本算法。 tailhead7.2.1 單鏈表基本算法tailpinfo1tailptail1.建立鏈表頭節(jié)點Node* CreatHead() Node *head,*tail; head=new Node; /建立鏈表頭 tail=head;
5、 head-link=NULL; return head;2.鏈表向后生長一個結(jié)點Node*GrowDN(Node*tail,DataType data) Node* p=new Node; /建立結(jié)點 p-info=data; tail-link=p; tail=p; tail-link=NULL; return tail;headtailinfo0head7.2.1 單鏈表基本算法headinfo0 PPinfo13.鏈表向前生長一結(jié)點void GrowUP(Node*head,DataType data) Node* p=new node; p-info=data; p-link= he
6、ad-link ; /新結(jié)點放在原鏈表前方 head-link=p; /頭結(jié)點放新結(jié)點之前 7.2.1 單鏈表基本算法4. 鏈表遍歷查找(按關(guān)鍵字)Node*TravFind(Node*head, DataType key)Node *p=head-link;while(p!=NULL&p-info!=key)p=p-link; /移動preturn p; /返回指針p,指向找到的結(jié)點,或者未找到,返回NULL5. 鏈表節(jié)點p后插入新節(jié)點:注意與向前向后生長算法的區(qū)別!void InsertAfter(Node*p, DataType x)Node *q=new Node;q-info=x;q
7、-link=p-link;p-link=q;7.2.1 單鏈表基本算法6. 刪除結(jié)點p后的結(jié)點void RemoveAfter(Node*p) Node*q; q=p-link; if(q!=NULL) p-link=q-link; delete q; q=NULL;/如果該結(jié)點還要用,則不要釋放,將q返回7. 刪除指定結(jié)點pvoid RemoveCur(Node*head, Node*p) Node*q=head; while(q-link!=NULL & q-link!=p) q=q-link; /遍歷查找 RemoveAfter(q);/刪除q后面的結(jié)點p7.2.1 單鏈表基本算法8.清
8、空單鏈表,保留表頭結(jié)點void MakeEmpty(Node* head)Node*p;while(head-link!=NULL)/未到尾節(jié)點p=head-link;head-link=p-link; /頭結(jié)點后第一個結(jié)點從鏈中脫落delete p; p=NULL;/刪除脫離下來的結(jié)點7.2.2 單鏈表類設(shè)計不同于【例7.5_h】的單鏈表類定義結(jié)點類:typedef int DataType;class Node DataType info; /數(shù)據(jù)域 Node *link; /指針域public: Node(); /生成空結(jié)點的構(gòu)造函數(shù) Node(const Datatype &); /生
9、成一般結(jié)點的構(gòu)造函數(shù) void PrintNode(); /打印當(dāng)前結(jié)點的信息域 friend class SLList; /以SLList為Node友元類,SLList可直接訪問Node私有數(shù)據(jù),比結(jié)構(gòu)安全;例7.5_h 結(jié)點類Node:Node()link=NULL;Node:Node(const DataType & data)info=data;link=NULL; void Node:PrintNode()coutinfolink!=NULL) /把頭結(jié)點后的第一個結(jié)點從鏈中脫離 p=head-link; head-link=p-link; delete p; p=NULL; /刪除
10、(釋放)脫離下來的結(jié)點 tail=head; /表頭指針與表尾指針均指向表頭結(jié)點,表示空鏈例7.5_h 單鏈表類鏈表類成員函數(shù):Node* SLList:TravFind(DataType key) Node*p=head-link; while(p!=NULL&p-info!=key)p=p-link; return p;/搜索成功返回該結(jié)點地址,不成功返回NULL void SLList:PrintSLL() /顯示鏈表 Node* p=head-link; while(p!=NULL) coutinfolink; coutlink=head-link;head-link=p; /新結(jié)點始
11、終在頭結(jié)點之后void SLList:GrowDN(const DataType& data)Node* p=new Node(data);tail-link=p;tail=p;tail-link=NULL;鏈表類成員函數(shù):void SLList:RemoveAfter(Node*p)Node*q;q=p-link; if(q!=NULL) p-link=q-link; delete q; q=NULL;例7.5_h 單鏈表類void SLList:RemoveCur(Node*p)Node*q=head;while(q-link!=NULL & q-link!=p) q=q-link;/遍歷
12、查找if(q-link=tail) tail=q;/已經(jīng)找到末尾RemoveAfter(q);/刪除q后面的結(jié)點p例7.5_h 主函數(shù)void int main()SLList L1; Node n, *tmp;for(int j=0;j10;j+) L1.GrowDN(j); /向后生成鏈表cout初始鏈表:; L1.PrintSLL(); /打印表L1.GrowUP(20);/向前插入到頭結(jié)點后cout插入結(jié)點后的鏈表:; L1.PrintSLL(); /打印tmp=L1.TravFind(20); /查找插入的結(jié)點n=*tmp;cout找到結(jié)點的信息域:; n.PrintNode();L1.RemoveCur(tmp);/刪除插入的結(jié)點coutlink;head=tail=new Node();while(p!=NULL)GrowDN(p-info);/向后生長一個結(jié)點p=p-link;7.2.2 單鏈表類討論復(fù)制構(gòu)造函數(shù):/拷貝賦值運算符SLList& SLList:operator=(SLList & ls)Node* p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45214-2025人全基因組高通量測序數(shù)據(jù)質(zhì)量評價方法
- 人民幣借款合同:外匯質(zhì)押版
- 商業(yè)地產(chǎn)買賣合同樣本參考
- 版勞動合同范本簡易版
- 全新百貨購銷合同案例分析
- 醫(yī)療器械代加工合同
- 散貨及快件出口運輸代理合同條款
- 天然氣領(lǐng)域內(nèi)部合同承包合作框架
- 8《從猜想到驗證》表格式教學(xué)設(shè)計-2024-2025學(xué)年一年級科學(xué)上冊蘇教版
- 貸款抵押合同擔(dān)保協(xié)議
- 5.3應(yīng)用二元一次方程組-雞兔同籠教學(xué)設(shè)計-北師大版八年級數(shù)學(xué)上冊
- 2024年中國解剖臺市場調(diào)查研究報告
- 第四單元平行與相交(單元測試)-2024-2025學(xué)年四年級上冊數(shù)學(xué)青島版
- 2024年密碼行業(yè)職業(yè)技能競賽參考試題庫500題(含答案)
- 2024中智集團招聘重要崗位高頻難、易錯點500題模擬試題附帶答案詳解
- 《2024版 CSCO非小細(xì)胞肺癌診療指南》解讀
- 2024年工業(yè)和信息化部應(yīng)急通信保障中心招聘高頻500題難、易錯點模擬試題附帶答案詳解
- 《祝?!饭_課一等獎創(chuàng)新教學(xué)設(shè)計 統(tǒng)編版高中語文必修下冊-1
- 20兆瓦光伏漁光互補電站項目可行性研究報告
- 新疆維吾爾自治區(qū)2024年中考英語真題【附真題答案】
- 繼續(xù)醫(yī)學(xué)教育項目申報表
評論
0/150
提交評論