![程序設(shè)計(jì)實(shí)習(xí)講義9_第1頁(yè)](http://file4.renrendoc.com/view/19db75e68fd7b8610c916f0e426ee90b/19db75e68fd7b8610c916f0e426ee90b1.gif)
![程序設(shè)計(jì)實(shí)習(xí)講義9_第2頁(yè)](http://file4.renrendoc.com/view/19db75e68fd7b8610c916f0e426ee90b/19db75e68fd7b8610c916f0e426ee90b2.gif)
![程序設(shè)計(jì)實(shí)習(xí)講義9_第3頁(yè)](http://file4.renrendoc.com/view/19db75e68fd7b8610c916f0e426ee90b/19db75e68fd7b8610c916f0e426ee90b3.gif)
![程序設(shè)計(jì)實(shí)習(xí)講義9_第4頁(yè)](http://file4.renrendoc.com/view/19db75e68fd7b8610c916f0e426ee90b/19db75e68fd7b8610c916f0e426ee90b4.gif)
![程序設(shè)計(jì)實(shí)習(xí)講義9_第5頁(yè)](http://file4.renrendoc.com/view/19db75e68fd7b8610c916f0e426ee90b/19db75e68fd7b8610c916f0e426ee90b5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、程序設(shè)計(jì)實(shí)習(xí)第九講鏈表和二叉樹(shù)http:/cpp2010鏈 表1) 鏈表的結(jié)構(gòu)和特點(diǎn)2) 單鏈表的操作:插入、刪除算法 單鏈表單鏈表的概念: 單鏈表(singly linked list)是一種簡(jiǎn)單的鏈表表示,也稱為線性鏈表。是由結(jié)點(diǎn)組成。 一個(gè)結(jié)點(diǎn)由兩個(gè)域組成: 數(shù)據(jù)域 指向下一結(jié)點(diǎn)的指針域特點(diǎn) 每個(gè)元素(表項(xiàng))由結(jié)點(diǎn)(Node)構(gòu)成。線性結(jié)構(gòu)結(jié)點(diǎn)可以不連續(xù)存儲(chǔ) 表可擴(kuò)充單鏈表中的插入與刪除 在一個(gè)線性單鏈表中插入結(jié)點(diǎn)的情況有三種帶表頭結(jié)點(diǎn)的單鏈表 表頭結(jié)點(diǎn)位于表的最前端,本身不帶數(shù)據(jù),僅標(biāo)志表頭。 設(shè)置表頭結(jié)點(diǎn)的目的是統(tǒng)一空表與非空表的操作,簡(jiǎn)化鏈表操作的實(shí)現(xiàn)。從帶表頭結(jié)點(diǎn)的單鏈表中刪除第
2、一個(gè)結(jié)點(diǎn)q = plink; plink = qlink; delete q; if ( plink = NULL ) last = p;帶表頭結(jié)點(diǎn)的單鏈表的實(shí)現(xiàn)/節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)struct LNode int data;struct LNode * next;/鏈表數(shù)據(jù)結(jié)構(gòu)struct LinkList LNode * pHead; /表頭指針LNode * pCurrent; /當(dāng)前節(jié)點(diǎn)指針int nLength; /表中節(jié)點(diǎn)數(shù)目(不含頭節(jié)點(diǎn)); /每個(gè)該結(jié)構(gòu)的變量代表一張鏈表用來(lái)對(duì)鏈表進(jìn)行操作的函數(shù):初始化(創(chuàng)建頭節(jié)點(diǎn)):bool InitList ( LinkList * pThis )
3、;銷毀整個(gè)鏈表,包括銷毀頭節(jié)點(diǎn):bool DestroyList (LinkList * pThis);刪除全部節(jié)點(diǎn),但頭節(jié)點(diǎn)保留:bool ClearList(LinkList * pThis);判斷鏈表是否為空:bool IsEmpty (LinkList * pThis);取鏈表長(zhǎng)度:int GetLength (LinkList * pThis);獲取指向第position個(gè)節(jié)點(diǎn)的指針(position從1開(kāi)始算)LNode * GetNode(LinkList * pThis, int position);取值為elem的第一個(gè)元素的位置(返回0則沒(méi)找到)int LocateElem
4、(LinkList * pThis,int elem);用來(lái)對(duì)鏈表進(jìn)行操作的函數(shù):將第 position 個(gè)節(jié)點(diǎn)的值設(shè)為 newData bool SetNodeData(LinkList * pThis,int position, int newData);獲取第 position 個(gè)節(jié)點(diǎn)的值 bool GetNodeData(LinkList * pThis,int position, int &data);將一個(gè)值為data的節(jié)點(diǎn)插入到第beforeWhich個(gè)節(jié)點(diǎn)前面(beforeWhich的取值是 1 到 pThis-nLength + 1) bool InsertNode(Link
5、List * pThis,int beforeWhich, int data);刪除第position 個(gè)節(jié)點(diǎn)bool DeleteNode(LinkList * pThis,int position);使第一個(gè)節(jié)點(diǎn)成為當(dāng)前節(jié)點(diǎn)void Rewind(LinkList * pThis);取當(dāng)前節(jié)點(diǎn)的值,并移動(dòng)到下一個(gè)節(jié)點(diǎn)bool GetNextNodeData( LinkList * pThis, int * pData)/初始化,分配一個(gè)頭節(jié)點(diǎn)。bool InitList( LinkList * pThis ) if (!( pThis-pHead = new LNode) return f
6、alse;pThis-pHead-next = NULL;pThis-nLength = 0;pThis-pCurrent = pThis-pHead-next ;return true;/銷毀鏈表。bool DestroyList(LinkList * pThis) if (!ClearList( pThis) return false;delete pThis-pHead;return true;/使第個(gè)節(jié)點(diǎn)成為當(dāng)前節(jié)點(diǎn)void Rewind(LinkList * pThis)pThis-pCurrent = pThis-pHead-next ;/取當(dāng)前節(jié)點(diǎn)數(shù)據(jù),并移動(dòng)到下一個(gè)節(jié)點(diǎn)bool
7、 GetNextNodeData( LinkList * pThis, int * pData)if( pThis-pCurrent = NULL )return false;* pData = pThis-pCurrent-data;pThis-pCurrent= pThis-pCurrent-next ;return true;/判斷鏈表是否為空。若為空,返回true,否則返回false。bool IsEmpty(LinkList * pThis) if ( pThis-pHead-next = NULL) return true;return false;/返回鏈表中 的 當(dāng)前節(jié)點(diǎn)數(shù)。i
8、nt GetLength(LinkList * pThis) return pThis-nLength;/將鏈表清空,釋放當(dāng)前所有節(jié)點(diǎn)(不包括頭節(jié)點(diǎn))。bool ClearList(LinkList * pThis) if (pThis-pHead = NULL) return false;LNode *pTemp = NULL;while (pThis-pHead-next != NULL) pTemp = pThis-pHead-next; pThis-pHead-next = pTemp-next; delete pTemp;pThis-nLength = 0;return true;/
9、得到指定位置節(jié)點(diǎn)的數(shù)據(jù)。/節(jié)點(diǎn)索引從1到listLength。bool GetNodeData(LinkList * pThis,int position, int &data) LNode *pTemp = GetNode(pThis,position);if (!pTemp) return false;data = pTemp-data;return true;/將position指定的節(jié)點(diǎn)內(nèi)的數(shù)據(jù)設(shè)置為newData。/第一個(gè)有效節(jié)點(diǎn)的position為1。bool SetNodeData(LinkList * pThis,int position, int newData) LNode
10、 *pTemp = GetNode(pThis,position);if (! pTemp) return false;pTemp-data = newData;return true;/在鏈表中插入一個(gè)節(jié)點(diǎn)。/插入的位置由beforeWhich指定,新節(jié)點(diǎn)插入在beforeWhich之前/beforeWhich的取值在1到ListLength+1之間。bool InsertNode(LinkList * pThis,int beforeWhich, int data) if (beforeWhich (pThis-nLength + 1) return false;LNode *pTemp
11、= GetNode(pThis, beforeWhich - 1);if (!pTemp) return false;LNode *newNode = new LNode;newNode-data = data;newNode-next = pTemp-next;pTemp-next = newNode;pThis-nLength+;return true;/刪除一個(gè)指定的節(jié)點(diǎn) , 節(jié)點(diǎn)位置由position指定。/positon的值從1到listLength。/若鏈表為空或指定的節(jié)點(diǎn)不存在則返回false。bool DeleteNode(LinkList * pThis,int positi
12、on) if (position pThis-nLength) return false;LNode *pTemp = GetNode(pThis,position - 1);if (!pTemp) return false;LNode *pDel = NULL;pDel = pTemp-next;pTemp-next = pDel-next;delete pDel;pThis-nLength-;return true;/得到指定位置節(jié)點(diǎn)的指針。LNode * GetNode( LinkList * pThis,int position) LNode *pTemp = NULL;int cur
13、Pos = -1;pTemp = pThis-pHead;while (pTemp != NULL) curPos+; if (curPos = position) break; pTemp = pTemp-next;if (curPos != position) return 0;return pTemp;/定位與指定數(shù)據(jù)相等的數(shù)據(jù)節(jié)點(diǎn)。/如果在當(dāng)前鏈表中已經(jīng)存在該數(shù)據(jù)則返回該數(shù)據(jù)節(jié)點(diǎn)的位置。/若不存在這樣的節(jié)點(diǎn)則返回0。int LocateElem(LinkList * pThis,int elem) LNode *pTemp = NULL;int curIndex = 1;pTemp =
14、 pThis-pHead-next;while (pTemp != NULL) & (pTemp-data != elem) pTemp = pTemp-next; curIndex+;if (pTemp = NULL) return 0;return curIndex;int main()LinkList MyList; /要再使用一張鏈表,則可以定義 LinkList MyList2;InitList ( & MyList);InsertNode(& MyList, 1, 10); InsertNode( & MyList, 2, 20);InsertNode(& MyList, 3, 3
15、0); InsertNode(& MyList, 4, 40);cout GetLength(& MyList) endl;int dataTemp = 0;for (int i = 1; i = GetLength(& MyList); i+) GetNodeData(& MyList,i, &dataTemp); cout dataTemp endl;if (SetNodeData(& MyList,3, 50) cout DONEn; else cout Failedn;Rewind( & MyList);while (GetNextNodeData( & MyList,&dataTem
16、p)cout dataTemp endl;if (DeleteNode(& MyList,4) cout DONEn; else cout Failedn;for (i = 1; i = GetLength(& MyList); i+) GetNodeData(& MyList,i, &dataTemp);cout dataTemp endl;cout LocateElem(&MyList,40) endl;DeleteNode(&MyList,LocateElem( & MyList,50);DeleteNode(&MyList,LocateElem( & MyList,20);Rewind
17、( & MyList);while (GetNextNodeData( & MyList,&dataTemp)cout dataTemp data); / visit the node PreOrder (root-left, visit); / descend left PreOrder (root-right, visit); / descend right ABCDE FG IH則 Preorder(pa,PrintChar);輸出:ABDEGCFHIvoid PrintChar(char & c) coutleft, visit); visit(root-data); MiddleOr
18、der (root-right, visit); ABCDE FG IHDBGEACHFI后序遍歷void PostOrder (CharNode * root, void (*visit)( char & item) ) if (root) PostOrder (root-left, visit); PostOrder (root-right, visit); visit(root-data); ABCDE FG IHDGEBHIFCA二叉樹(shù)的刪除void DestroyTree( CharNode * root)if( root-left = NULL & root-right = NULL) delete root;return;if( root-left ) DestroyTree(root-left);if( root-right)Destr
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025巴西白糖購(gòu)銷合同
- 2025除草農(nóng)藥買賣合同
- 光纖入戶合同范例
- 2024-2025學(xué)年高中歷史 第一單元 中國(guó)古代的農(nóng)耕經(jīng)濟(jì) 第2課 中國(guó)古代的土地制度(1)教學(xué)說(shuō)課稿 岳麓版必修2
- 入股合伙合同范例
- 中央凈水合同范本
- etc改造監(jiān)理合同范例
- 住房抵押合同范例
- ktv合作營(yíng)銷合同范本
- 制作膏藥售賣合同范本
- 2025版林木砍伐與生態(tài)修復(fù)工程承包合同2篇
- 2025年南京信息職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025-2030年中國(guó)硫酸鉀行業(yè)深度調(diào)研及投資戰(zhàn)略研究報(bào)告
- 課題申報(bào)參考:社會(huì)網(wǎng)絡(luò)視角下村改居社區(qū)公共空間優(yōu)化與“土客關(guān)系”重構(gòu)研究
- 鄉(xiāng)鎮(zhèn)衛(wèi)生院2025年工作計(jì)劃
- 2024年山東省泰安市初中學(xué)業(yè)水平生物試題含答案
- 住建局條文解讀新規(guī)JGJT46-2024《施工現(xiàn)場(chǎng)臨時(shí)用電安全技術(shù)標(biāo)準(zhǔn)》
- 物流公司軟件售后服務(wù)流程方案
- 微生物組與膽汁性肝硬化
- 最完善的高速公路機(jī)電監(jiān)理細(xì)則
- 建筑工程技術(shù)資料管理.ppt
評(píng)論
0/150
提交評(píng)論