數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告—鏈表_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告—鏈表_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告—鏈表_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告—鏈表_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告—鏈表_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、算法與數(shù)據(jù)結(jié)構(gòu)課程實(shí) 驗(yàn) 報(bào) 告教師評(píng)閱意見:簽名:年 月曰實(shí)驗(yàn)成績(jī):一、實(shí)驗(yàn)?zāi)康?、實(shí)現(xiàn)線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)(鏈表)。2、熟悉C+程序的基本結(jié)構(gòu),掌握程序中的頭文件、實(shí)現(xiàn) 文件和主 文件之間的相互關(guān)系及各自的作用。3、熟悉鏈表的基本操作方式,掌握鏈表相關(guān)操作的具體實(shí)現(xiàn)。二、實(shí)驗(yàn)內(nèi)容及要求對(duì)鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的線性表進(jìn)行一些基本操作。主要包括:(1)插入:操作方式為在指定元素前插入、在指定元素之后插入、在 指定位置完成插入(2)刪除:操作方式可分為刪除指定元素、刪除指定位置的元素等, 嘗試實(shí)現(xiàn)邏輯刪除操作。(3)顯示數(shù)據(jù)。(4)查找:查詢指定的元素(可根據(jù)某個(gè)數(shù)據(jù)成員完成查詢操作)。(5)定位操作:

2、定位指定元素的序號(hào)。(6)更新:修改指定元素的數(shù)據(jù)。(7)數(shù)據(jù)文件的讀寫操作等。其它操作可根據(jù)具體需要自行補(bǔ)充。三、系統(tǒng)分析(1)數(shù)據(jù)方面:該鏈表數(shù)據(jù)元素類型采用整型,并且約定該鏈表不能存儲(chǔ) 0元 素,在此基礎(chǔ)上進(jìn)行鏈表相關(guān)操作,鏈表上的數(shù)據(jù)采用文件保存,并且可在之前 文件數(shù)據(jù)基礎(chǔ)上進(jìn)行鏈表操作。(2)功能方面:能夠?qū)崿F(xiàn)鏈表的一些基本操作,主要包括:1 .可以通過(guò)前插法、后插法兩種方式進(jìn)行鏈表的創(chuàng)建,并將數(shù)據(jù)保存至文本 文檔中。2 .可以在原有文本文檔數(shù)據(jù)的基礎(chǔ)上進(jìn)行相關(guān)操作3 .計(jì)算鏈表中存儲(chǔ)元素個(gè)數(shù)即當(dāng)前長(zhǎng)度。4 .能夠進(jìn)行搜索操作,可返回搜索項(xiàng)所在地址,也可通過(guò)搜索數(shù)據(jù)項(xiàng)返回該元素地址。

3、5 .能夠進(jìn)行取值操作,根據(jù)用戶需求取出表中某項(xiàng)的值。6 .能夠進(jìn)行修改操作,在用戶選擇修改項(xiàng)后將輸入內(nèi)容修改到對(duì)應(yīng)位置。7 .能夠進(jìn)行插入操作,在用戶選擇合理位置后輸入插入元素值。8 .能夠進(jìn)行刪除操作,用戶根據(jù)選擇表中項(xiàng)數(shù)刪除對(duì)應(yīng)數(shù)據(jù)。9 .能夠進(jìn)行判斷表空或表滿。10 .能夠進(jìn)行排序操作,能夠?qū)㈡湵碇写嬖诘脑剡M(jìn)行從小到大排序。11 .采用文本文檔保存數(shù)據(jù)。四、系統(tǒng)設(shè)計(jì)( 1)設(shè)計(jì)的主要思路鏈表結(jié)構(gòu)是一種使用對(duì)象引用變量來(lái)創(chuàng)建對(duì)象間聯(lián)系的數(shù)據(jù)結(jié)構(gòu)。 根據(jù)實(shí)驗(yàn)要求, 以及課上老師對(duì)于鏈表各個(gè)操作的講解, 在了解鏈表操作原理后將鏈表的模板類完成, 并將各個(gè)功能代碼的實(shí)現(xiàn)編寫完成, 基本代碼完

4、成后, 在實(shí)現(xiàn)編寫菜單界面進(jìn)行調(diào)試。 由于要求用文件操作處理鏈表數(shù)據(jù), 故決定使用兩個(gè)菜單進(jìn)行關(guān)聯(lián)。 第一個(gè)菜單用于用戶通過(guò)文件操作創(chuàng)建鏈表, 第二菜單用于實(shí)現(xiàn)鏈表各個(gè)功能的調(diào)試操作。( 2)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)鏈?zhǔn)浇Y(jié)構(gòu)是一種使用對(duì)象引用變量來(lái)創(chuàng)建對(duì)象間的鏈的數(shù)據(jù)結(jié)構(gòu), 對(duì)象引用變量可用于創(chuàng)建鏈?zhǔn)浇Y(jié)構(gòu)對(duì)象引用變量所存儲(chǔ)的特定地址一般無(wú)關(guān)緊要。 換句話說(shuō), 重要的是能夠使用引用變量來(lái)訪問(wèn)對(duì)象, 而對(duì)象在內(nèi)存中的特定存儲(chǔ)位置并不重要。 在了解鏈?zhǔn)浇Y(jié)構(gòu)的基本原理后, 故通過(guò)構(gòu)建一個(gè)類屬性為每一個(gè)鏈表結(jié)點(diǎn)數(shù)據(jù)域與指針域,在此基礎(chǔ)上實(shí)現(xiàn)鏈表的各項(xiàng)操作。( 3)基本操作的設(shè)計(jì)鏈表中關(guān)鍵的算法就是搜索、插入、刪除

5、以及排序操作。在單鏈表中進(jìn)行搜索操作, 只能從鏈表的首結(jié)點(diǎn)開始, 通過(guò)每個(gè)結(jié)點(diǎn)的指針域來(lái)依次訪問(wèn)鏈表中的每個(gè)結(jié)點(diǎn)以完成相應(yīng)的搜索操作。在搜索操作中通過(guò)用戶輸入需要搜索的數(shù)據(jù)x ,搜索成功返回該結(jié)點(diǎn)的地址,否則返回NULL 值,也可通過(guò)用戶輸入結(jié)點(diǎn)位置返回結(jié)點(diǎn)所處地址。 單鏈表的插入操作需要用戶輸入兩個(gè)數(shù)據(jù)分別是插入點(diǎn)的位置以及插入值。 在單鏈表中插入算法不需要移動(dòng)元素, 只需要修改元素的指針即可。 具體操作則是通過(guò)指針操作指明新結(jié)點(diǎn)的后繼與前驅(qū)。 在單鏈表中的刪除算法則是類似于插入算法。 值得注意的是, 在設(shè)計(jì)該單鏈表為了使程序更加簡(jiǎn)潔,在單鏈表的最前面添加了頭結(jié)點(diǎn)。 在頭結(jié)點(diǎn)中不存儲(chǔ)任何實(shí)質(zhì)

6、的數(shù)據(jù)對(duì)象, 其指針域指向第一個(gè)數(shù)據(jù)所在的結(jié)點(diǎn)。 這樣就可以在執(zhí)行插入、 刪除算法時(shí)代碼更為 簡(jiǎn)潔。五、編程環(huán)境與實(shí)驗(yàn)步驟( 1)編程環(huán)境操作系統(tǒng): Windows 操作系統(tǒng);編程工具軟件: Visual Studio 2017( 2)實(shí)驗(yàn)步驟只說(shuō)明程序相關(guān)的各種文件創(chuàng)建步驟及文件的作用,不需說(shuō)明文件的具體內(nèi)容。程序相關(guān)文件為 LinkNode.h 頭文件、 List.h 頭文件以及主函數(shù)調(diào)試文件 main.cpp。( 3)編譯參數(shù)無(wú)編譯參數(shù),在Vs2017或其他版本中新建項(xiàng)目然后將三個(gè)文件 LinkNode.h、List.h、main.cpp添加到解決方案中的頭文件中調(diào)試即可。六、實(shí)現(xiàn)代碼#

7、include <iostream> #include <fstream> #include "LinkNode.h" using namespacestd;template <class T> class List protected :LinkNode<T> *first; public :List() first =new LinkNode<T>List( constfirst =T& x) new LinkNode <T >( x);/ 復(fù)制構(gòu)造函數(shù)/ 析構(gòu)函數(shù)/ 將鏈表置為空表/ 計(jì)算

8、鏈表的長(zhǎng)度List( List <T>& L);List() makeEmpty(); void makeEmpty();int Length();LinkNode<T> *getHead() return first;/ 返回附加頭結(jié)點(diǎn)地址搜索含數(shù)據(jù)x的元素/ 搜索第 i 個(gè)元素的地址取出第 i 個(gè)元素的值用x修改第i個(gè)元素的值在第 i 個(gè)元素后插入 x刪除第 i 個(gè)元素,x 返回該元素的值true : false ;/ 判表空否?空則返回 trueLinkNode<T> *Search( T x);/LinkNode<T> *Loca

9、te( int i );boolgetData( inti, T& x);/voidsetData( inti, T& x);/boolInsert( inti,T& x);/boolRemove(inti,T& x);/bool IsEmpty() return first->link = NULL?bool IsFull() return false ;voidSort();/voidinputFront(TendTag);/voidinputRear(TendTag);/voidpreviousData(T endTag);voidoutput();

10、voidoutputFile();/List <T>& operator= ( List <T>& L);/ 判表滿否?不滿則返回 false排序前插法輸入后插法插入/ 打開原有鏈表數(shù)據(jù)文件數(shù)據(jù)文件/ 輸出輸出到文件/ 重載函數(shù):賦值;/* * 復(fù)制構(gòu)造函數(shù)*/ template <class T>List <T>:List( List <T>& L) T value;LinkNode<T> *srcptr = L.getHead();LinkNode<T> *destptr = fir

11、st = new LinkNode < T >while (srcptr->link != NULL) value = srcptr->link->data;destptr->link = new LinkNode<T>(value);destptr = destptr->link;srcptr = srcptr->link;destptr->link = NULL;/* * 將鏈表置為空表*/template <class T>void List <T>:makeEmpty() LinkNode<

12、T> *q;while (first->link != NULL) q = first->link;first->link = q->link; delete q;/* * 計(jì)算帶附加結(jié)點(diǎn)的單鏈表的長(zhǎng)度*/ template <class T>intint count = 0;List <T>:Length() LinkNode<T> *p = first->link; while (p != NULL) p = p->link; count+;return count;/*在表中搜索含數(shù)據(jù)x的結(jié)點(diǎn),搜索成功時(shí)函數(shù)返

13、回該結(jié)點(diǎn)地址,否則返回NULL!*/ template <class T>LinkNode<T> * List <T>:Search( T x) LinkNode<T> *current = first->link;while (current != NULL) if (current->data = x)break ;elsecurrent = current->link;/* 定位函數(shù):返回表中第*/ returncurrent;i 個(gè)元素的地址。若i<0 或 i 超出表中的結(jié)點(diǎn)個(gè)數(shù),則返回 NULLtemplate

14、<class T>LinkNode<T> * List <T>:Locate( int if ( i < 0)i) return NULL;LinkNode<T> *current = first;int k = 0;while (current != NULL&& k < current = current->link; k+;i) return current; /* 取出鏈表中第i 個(gè)元素的值*/template <class T>boolList <T>:getData( int

15、i , T& x) if ( i <= 0) return NULL;LinkNode<T> *current = Locate( i );if (current = NULL) return false ;else x = current->data; return true ;/* 給鏈表中第i 個(gè)元素賦值x* /template <class T>voidList <T>:setData( int i , T& x) if ( i <= 0) return ;LinkNode<T> *current = L

16、ocate( i );if (current = NULL) return ;else current->data = x;/* 將新元素x插入在鏈表中第i個(gè)結(jié)點(diǎn)之后* /template <class T>bool List <T>:Insert( int i , T& x) LinkNode<T> *current = Locate( i );if (current = NULL) return false ;LinkNode<T> *newNode = new LinkNode<T>(x);if (newNode

17、= NULL) cerr << " 存儲(chǔ)分配錯(cuò)誤! " << endl; exit(1);newNode->link = current->link;current->link = newNode;return true ;* 將鏈表中的第i 個(gè)元素刪去,通過(guò)引用型參數(shù)x 返回該元素的值*/template <class T>boolList < T >:Remove( int i , T& x) LinkNode<T> *current = Locate( i - 1);if (curr

18、ent = NULL| current->link = NULL)return false ;LinkNode<T> *del = current->link; current->link = del->link;x = del->data; delete del;return true ;/* 單鏈表的輸出函數(shù):將單鏈表中所有數(shù)據(jù)按邏輯順序輸出到屏幕上*/template <class T>voidList <T>:output() LinkNode<T> *current = first->link; wh

19、ile (current != NULL) cout << current->data <<current = current->link;cout << endl;/*重載函數(shù):賦值操作,形式如 A=B其中娓調(diào)用此操作的List對(duì)象,B是與參數(shù)表中的引用型參數(shù)L結(jié)合的實(shí)參*/template <class T>List<T>& List <T>: operator= ( List <T>& L) T value;LinkNode<T> *srcptr = L.getHe

20、ad();LinkNode<T> *destptr = first =new LinkNode<T>while (srcptr->link !=NULL) value = srcptr->link->data;destptr->link = new LinkNode<T>(value);destptr = destptr->link; srcptr = srcptr->link;destptr->link = NULL;return * this ;/* * 后插法實(shí)現(xiàn)輸入函數(shù):鏈表中各結(jié)點(diǎn)中數(shù)據(jù)的邏輯順序與輸入數(shù)據(jù)

21、順序一致*endTag是約定的輸入序列結(jié)束的標(biāo)志*/template <class T>void List <T>:inputRear( T endTag) LinkNode<T> *newNode, *last;T val;makeEmpty();fstream file( "List.txt" , ios :out);if ( ! file) cout << " 文件不能打開! " << endl;else cin >> val;file << val <<

22、;" " ;last = first;while (val != endTag) newNode = new LinkNode <T>(val);if (newNode = NULL) cerr << "存儲(chǔ)分配錯(cuò)誤! " << endl; exit(1);last->link = newNode; last = newNode;cin >> val;file << val <<" " ;last->link = NULL;file.close();/

23、* 前插法實(shí)現(xiàn)輸入函數(shù):鏈表中各結(jié)點(diǎn)中數(shù)據(jù)的邏輯順序與輸入數(shù)據(jù)順序相反*endTag是約定的輸入序列結(jié)束的標(biāo)志*/template <class T>void List <T>:inputFront( T endTag) LinkNode<T> *newNode; T val;makeEmpty();fstream file( "List.txt" , ios :out);if ( ! file) cout << " 文件不能打開! " << endl;else cin >> val

24、;file << val <<" " ;while (val != endTag) newNode = new LinkNode <T>(val);if (newNode = NULL) cerr << " 存儲(chǔ)分配錯(cuò)誤! " << endl; exit(1);newNode->link = first->link;first->link = newNode;cin >> val;file << val <<file.close();/* 將

25、之前數(shù)據(jù)文件中數(shù)據(jù)放入鏈表中在進(jìn)行后續(xù)操作*/template <class T>voidList <T>:previousData( T endTag) LinkNode<T> *newNode, *last;T val;makeEmpty();ifstream file( "List.txt" );if (! file) cout << " 文件不能打開! " << endl;elsefile >> val;last = first;while (val != endTag) n

26、ewNode = new LinkNode <T>(val);if (newNode = NULL) cerr << " 存儲(chǔ)分配錯(cuò)誤! " << endl; exit(1);last->link = newNode; last = newNode;file >> val;last->link = NULL;file.close();/* * 將之前數(shù)據(jù)文件中數(shù)據(jù)放入鏈表中在進(jìn)行后續(xù)操作*/ template <class T>void List <T>:outputFile() LinkN

27、ode<T> *current = first->link;fstream file( "List.txt" , ios :out);while (current != NULL file << current->data <<""current = current->link;file<< 0;file<< endl;file.close();template <class T>void List <T>:Sort() LinkNode<T>

28、; *p = new LinkNode<T>LinkNode<T> *q = new LinkNode<T>int temp;for (p = first->link; p->link !=NULL p=p->link) for (q = p->link; q != NULL q=q->link) if (q->data < p->data) temp = q->data; q->data = p->data; p->data = temp;七、測(cè)試結(jié)果與說(shuō)明鏈表操作:鏈表的創(chuàng)建:4m

29、* 4* 法& 探 件I* L 率卜一k斑凝的白粒之列率帚i8£莉的埴址 I塵衰辦:斑據(jù)工的,匚木曹*4jHHi-p #f t 1:國(guó)”建上新熔乘2曲軸靖工勘留表-3二在原行融龍上推粗4;:中修¥尊*¥*相曰*事¥*=口=*¥¥*4*才*料*4W卷入%的通推1-4】:,崎人世七以。川土砧:- 3 5 9 10 6 4 0!-4 ;取出第十元聯(lián)的值一5/卜修由第1個(gè)元案的依& :件第i外衣癡行植A jig L刪除靠i個(gè)岳坨 R :判斷表是否為空 9 :判斷K淌?IQ:做據(jù)無(wú)點(diǎn)棒印11 JLiitorl式二文件操作傀存取疊

30、13 :退 H h 百輸入你的揖射匚lT3i鏈表長(zhǎng)度:第皿塞掾 II:心*«4"«川啤4I 2:匾索第i著元青I的地址 - 3擬出 看數(shù)據(jù)?南北案T :聯(lián)曲搪上+此KH _ -5:川工桂改吊i甭冗翼的ffi 9 :和端iT/項(xiàng)舊抽入后代工 H-7:刪除第i個(gè) 在匈(- 9 :MK兼母否為生一- Iio :數(shù)抻元求棒字;11:粒確無(wú)點(diǎn)始山I12:支仲捅便愜存簟箱福薪的選擇1一1琉' "1宿梗的長(zhǎng)度7” 盤京食世地址3二檔*土峨也x的兒聯(lián)T二相吃小個(gè)無(wú)索加巾M :網(wǎng)能性灰常j個(gè)鵬露的帆10 :板 笫1年電/& 播 入-疝 卡K -7:H

31、87;mj 十衣埔s:利新表是否為空1g;網(wǎng)斷麥森西-疝:&翩山*排序-代程無(wú)水抬離12一 £百掛作冰存數(shù)據(jù)L3:iHdji 中餐上酒的第并nrsili植人兒累檢: 3041DFD6CI搜索含數(shù)據(jù)x元素位置:取出第i個(gè)元素位置:1 -畸收而良速2.:乳點(diǎn)東i拜無(wú)業(yè) 內(nèi)士慟巾卜5川囊含蒯據(jù)H的無(wú)泉I4:取出第1,無(wú)泰的曲-F5 -用工峰或 55iTjt4iffJ tfl6 -在弟1飛衣見! h j插入JL.裝XI上副除第i年輪唄T刷新衣用種為空-T:到場(chǎng)者漏苦-lOilfcffijiAdlPrT1停黜無(wú)制H一1也文件抵作保并的掘一*軌比操作卓申峰*事申事事|1: 岳的氏度一二丁

32、:一 k一.2 :舞亞 * i鐘/上盤的她址-1一-7:按量峨«U的元青一_-7 .取用第i個(gè)元標(biāo)的值一5: JHk攤段第i個(gè)無(wú)蠡前像6:在第二牛去項(xiàng)L島入虻塞工 -7 :刪除第 j 小衣壩=一 “ -“ -3 '9 :用斷表胸白14 基枇屋房排序-門.段撒無(wú)吐乂產(chǎn)提柞保存歐據(jù)W鹿其體晌電擇口7瓦搜索第i個(gè)元素地址:喻強(qiáng)案的他;Lo用x修改第i個(gè)元素的值:在第i個(gè)表項(xiàng)后插入x比MM此修,$ 3一?;蛟ǖ膄fh 99描步虛動(dòng)E 翠*濟(jì)& 操 H *,LU1 :畤蓑機(jī) KISN般 塞第i不疝帶的地址3精直管1H(如用匠長(zhǎng)一-4 :如出余i力X卡翁/I5: Olslfe及

33、彘4個(gè)北安加也一TW:曲十點(diǎn)期后捅入元胤(7如蹄軍i怕缸&史判嘲袤些書臉9:刊的拓浦ft10:效外工素排呼11: W位不脩出13: £件海作保存散戲-濡雁A牌的見t+n-lXh11J 3 gglJ 10 6 4般人拙人%金位.五工2腦入久足充訥fth 9S插凡味如1-1:的 &的 玄處-3推維旗i善無(wú)4t的地址3.捶* A數(shù)據(jù)干曲北班T:lttll| 捻:l + 無(wú)' 的傭5 :用M*用時(shí)i個(gè)冗裝的值6:在第i不耐誦hit®入兀盤工T:.Nt察1個(gè)箴弧-8:判斷妻*;點(diǎn)為書,T:為曲 息淌 苔 101股胤嬉泉建于-11 ;魚麻兀衣lb曲-1立文件城作

34、保在 昨13: jHht 話輸入怫他運(yùn)界I卜1$:11 23輔,35尋$刪除第i個(gè)表項(xiàng):判斷表滿否:5扎曲的mtu-uL請(qǐng)輸入你的運(yùn)抨I7W:曲人副除無(wú)去粒 G 酬除加元新也9卜年*軍*0*¥*k*本第#:餅表刃(力1:1X虺他|2例菱嫡1杵元上代地址把屈米才就席硼兀*=4.喻K藏洋國(guó)章京5-用工生盤第if兀宸的也-也正事不去噢析推耳n.索工”7:制降解i 4展用 亂時(shí)隔點(diǎn)學(xué)量為生1M板期北蠹排層11.也第五K*tb!? £件斥櫛牌春酉餌liiJHdji - 京地人儲(chǔ)常氐情【;-"工1.:他.的任Jjf一2二接索笫:郭元的地址,3:搜索*0)(的邦索4.聯(lián);1第:

35、+ 疝青的俏秋Uh悻&第i個(gè)疳泰的旗-6:把第,小農(nóng)項(xiàng)后插入疝泉式7.則康笫£十表二 肌判斷出及笆為空9:軻斷衣涵杏10敷知耳盍彈序'11:數(shù)窗元素輸出T2:X好常保春雪舞一,忠出工請(qǐng)輸入你的選擇1-13L文件保存:清翰夫用的工異11色而故判4:Uuh-1J , 9>>£ a * * 雄情人*. r應(yīng)T*L14h數(shù)據(jù)元素排序:不蛆入你 j:J ills 1-1$ =,10幃序成功Ig* 耕事布N 粕1呼連 役操祚味口 和口落善*1:被表的卷衣 2:拙童第i片支卡的出址3也求才毅帆捎元案4 :取:h蟾i不元晶的屈i "川T"工力

36、、無(wú)長(zhǎng)白S 6:在痂+段理*慟*無(wú)米工 7z制除第j中甚出8 ;到場(chǎng)點(diǎn)整轉(zhuǎn)為七 卜a:可新如同用一1。:歌胡,居制1L1:.放押 元最希H ;12 :史件卷憚保存敷察U;亞由* 請(qǐng)人你的選打Il-LR:112 3 4 10 99 S9八、實(shí)驗(yàn)分析(1)算法的性能分析為了實(shí)現(xiàn)的方便,為鏈表加上一個(gè)“附加頭結(jié)點(diǎn)”。它位于鏈表第一個(gè)結(jié)點(diǎn) 之前。附加頭結(jié)點(diǎn)的data域可以不存儲(chǔ)任何信息,也可以存放一個(gè)特殊標(biāo)志或 表長(zhǎng)。由于在鏈表的第一個(gè)結(jié)點(diǎn)之前還有一個(gè)附加頭結(jié)點(diǎn)。因此,只要把附加頭結(jié)點(diǎn)當(dāng)作含數(shù)據(jù)a0的結(jié)點(diǎn),在算法中查找第ai-1個(gè)結(jié)點(diǎn)時(shí)從k=0開始,如果i 不超過(guò)表的長(zhǎng)度加1,總能找到含ai-1的結(jié)點(diǎn)

37、并讓指針指向它。這樣,在空表或 非空表第一個(gè)結(jié)點(diǎn)之前的插入可以不作為特殊情況專門處理,與一般情況一樣統(tǒng)一進(jìn)行處理。因而在附加頭結(jié)點(diǎn)的單鏈表中插入時(shí), 不必區(qū)分在何處插入,可以 統(tǒng)一處理,具體插入算法圖解如下:node在p結(jié)點(diǎn)后插入一個(gè)新結(jié)點(diǎn)node,首先要讓node的next指針指向p的next結(jié) 點(diǎn),再讓p的next指向node結(jié)點(diǎn)即可。對(duì)于刪除算法,在附加頭結(jié)點(diǎn)的單鏈表中與插入算法一致,在鏈表的第一個(gè) 結(jié)點(diǎn)處刪除與在鏈表中間或尾部刪除均可以用一種方式處理,圖解如下:刪除curr位置的結(jié)點(diǎn),如果這個(gè)位置不存在則返回 false,如果找到對(duì)應(yīng)結(jié)點(diǎn), 則通過(guò)重新拉鏈的方式,將被刪結(jié)點(diǎn)從鏈中摘下,并將刪除值保存在一個(gè)引用型 實(shí)參中。對(duì)于單鏈表的搜索算法,其主要思想是:根據(jù)需要查找元素結(jié)點(diǎn)的位置來(lái)查找結(jié)點(diǎn),從鏈表的首結(jié)點(diǎn)開始不斷遞增移動(dòng) next指針,當(dāng)計(jì)數(shù)位置等于查找位 置時(shí),即找到待查找結(jié)點(diǎn)并返回該結(jié)點(diǎn)地址。對(duì)于單鏈表的排序算法,該程序使用的時(shí)冒泡排序法實(shí)現(xiàn)。每次循環(huán)都是從 頭結(jié)點(diǎn)開始,但是第一次結(jié)尾是最后一個(gè)元素,第二次結(jié)尾時(shí)倒數(shù)第二個(gè)元素, 利用兩個(gè)for循環(huán)即可。具體圖解如下:2)數(shù)據(jù)結(jié)構(gòu)的分析由單鏈表的存儲(chǔ)結(jié)構(gòu)可得出以下優(yōu)缺點(diǎn):1. 優(yōu)點(diǎn): 通過(guò)結(jié)點(diǎn)的 next 指針作為線索來(lái)訪問(wèn)元素

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論