已閱讀5頁(yè),還剩9頁(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)介
6.4.1二叉排序樹(shù)基本操作的實(shí)現(xiàn) 專(zhuān)業(yè):*姓名:*學(xué)號(hào):*日期:2011-9-17一, 問(wèn)題描述二, 需求分析三, 概要設(shè)計(jì)四, 詳細(xì)設(shè)計(jì)五, 測(cè)試分析六, 源程序清單七, 用戶使用手冊(cè)八, 心得體會(huì)一、 問(wèn)題描述從鍵盤(pán)讀入一組數(shù)據(jù),建立二叉排序樹(shù)并對(duì)其進(jìn)行查找、遍歷、格式化輸出操作。二、 需求分析1. 讀入給定的數(shù)據(jù),構(gòu)造二叉排序樹(shù),實(shí)現(xiàn)初始化。2. 給定數(shù)據(jù)的格式為,第一行為元素個(gè)數(shù),遇0退出程序。3. 提供菜單功能,選項(xiàng)包括查找、插入、刪除和打印等。三、 概要設(shè)計(jì)1.數(shù)據(jù)結(jié)構(gòu):struct nodeint num;node *chl,*chr;分別定義了指向左右子樹(shù)的指針。2.函數(shù)介紹void Insert(const int &temp,node *root);void Delete(const int &key,node *p);bool Find(const int &key,node *p,node *net,int &depth);void Print(const node *p);bool Menu(node *root);函數(shù)如其名,功能也亦如其名。另外為了防止邊界情況,如空樹(shù)或者沒(méi)有指定元素的非法刪除以及查找,所以會(huì)在函數(shù)內(nèi)部直接進(jìn)行判斷,以及狀態(tài)返回判斷等。3. 函數(shù)形參部分形參使用引用的方式進(jìn)行傳遞,還有些使用的是指針的指針,這樣保傳入的指針指向的內(nèi)容可以被修改,并且函數(shù)返回之后可以繼續(xù)指向原有內(nèi)容。四、 詳細(xì)設(shè)計(jì)void Insert(const int &temp,node *root)if( *root=NULL )*root = new node;(*root)-chl = (*root)-chr = NULL;(*root)-num = temp;else if( (*root)-numchr);elseInsert(temp,&(*root)-chl);/ 插入函數(shù),使用遞歸的方式進(jìn)行插入,并動(dòng)態(tài)創(chuàng)建對(duì)象。void Delete(const int &key,node *p)if( *p=NULL )cout刪除錯(cuò)誤,不存在該元素!num=key )if( (*p)-chl=NULL )temp = *p;*p = (*p)-chr;delete temp;else if( (*p)-chr=NULL )temp = *p;*p = (*p)-chl;delete temp;elsetemp = (*p)-chl;node *front=NULL;while( temp-chr )front = temp;temp = temp-chr;front-num = temp-num;if( front!=temp )front-chr = temp-chl;elsefront-chl = temp-chl;delete temp;else if( (*p)-numkey )Delete(key,&(*p)-chl);elseDelete(key,&(*p)-chr);/ 刪除函數(shù)。按照規(guī)則,分三種情況進(jìn)行刪除,最后還會(huì)銷(xiāo)毀指針指向的對(duì)象。如果某個(gè)元素不在其中,那么最后指向的指針必然為空。另外之前沒(méi)考慮到刪除失敗的狀態(tài)返回情況,所以后面使用了一個(gè)全局變量來(lái)作為補(bǔ)救標(biāo)記。bool Find(const int &key,node *p,node *net,int &depth)if( p=NULL )return false;depth+;net = p;if( p-num=key )return true;else if( p-numkey )return Find(key,p-chl,net,depth);elsereturn Find(key,p-chr,net,depth);/ 查找函數(shù),參數(shù) *net用以指向當(dāng)前比較的指針,但卻沒(méi)有具體實(shí)現(xiàn)輸出其指向的信息,覺(jué)得即便輸出對(duì)本程序意義不大,所以沒(méi)有具體關(guān)注。depth為查找需要的次數(shù)。void Print(const node *p)if( p=NULL )return;coutnumchl);Print(p-chr);/ 只提供了中序遍歷輸出的情況,其他情況沒(méi)考慮。五、 測(cè)試分析1. 測(cè)試環(huán)境:Code:Blocks 10.05.2. 輸入過(guò)程:課本提供數(shù)據(jù):711 33 44 55 58 79 88兩種查找情況 刪除操作 插入操作 六、 源程序清單#include #include #include #include #include using namespace std;struct nodeint num;node *chl,*chr;bool flagdel;ifstream in(sort.txt);void Insert(const int &temp,node *root)if( *root=NULL )*root = new node;(*root)-chl = (*root)-chr = NULL;(*root)-num = temp;else if( (*root)-numchr);elseInsert(temp,&(*root)-chl);void Delete(const int &key,node *p)if( *p=NULL )cout刪除錯(cuò)誤,不存在該元素!num=key )if( (*p)-chl=NULL )temp = *p;*p = (*p)-chr;delete temp;else if( (*p)-chr=NULL )temp = *p;*p = (*p)-chl;delete temp;elsetemp = (*p)-chl;node *front=NULL;while( temp-chr )front = temp;temp = temp-chr;front-num = temp-num;if( front!=temp )front-chr = temp-chl;elsefront-chl = temp-chl;delete temp;else if( (*p)-numkey )Delete(key,&(*p)-chl);elseDelete(key,&(*p)-chr);bool Find(const int &key,node *p,node *net,int &depth)if( p=NULL )return false;depth+;net = p;if( p-num=key )return true;else if( p-numkey )return Find(key,p-chl,net,depth);elsereturn Find(key,p-chr,net,depth);void Print(const node *p)if( p=NULL )return;coutnumchl);Print(p-chr);bool Menu(node *root)int choice,num,depth;node *net;bool suc;coutendltt-二叉排序樹(shù)演示-endl;coutendlendltttt菜單endlendl;coutt 1.插入 t2.查找endlendl;coutt 3.遍歷 t4.刪除endlendl;coutt 5.退出菜單endlendlendl;coutchoice;if( choice=5 )return false; coutendlendl;switch( choice )case 1:cout輸入要插入的數(shù)字:num;Insert(num,&(*root);cout插入成功!endl;break;case 2:cout輸入查找元素:num;if( *root=NULL )cout二叉樹(shù)為空,查找失??!endl;elsedepth = 0;net = NULL;suc = Find(num,*root,net,depth);if( suc )cout查找成功。endl;elsecout查找失敗,沒(méi)有該元素。endl;cout查找深度 : depthendl;break;case 3:cout中序遍歷二叉排序樹(shù)endl;if( *root=NULL )cout二叉樹(shù)為空!endl;elsePrint(*root);break;case 4:cout輸入要?jiǎng)h除的數(shù)字:num;flagdel = true;Delete(num,&(*root);if( flagdel ) cout刪除成功!endlendl;break; case 5: return false;default:cout錯(cuò)誤選擇。endl;coutendlendl;return true;int main()int i;int num,depth;bool first=true;couttttt*初始化*endlnum,num )first = false;node *root= NULL;depth=0;vector ve(num+1);coutendl依
溫馨提示
- 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年物聯(lián)網(wǎng)設(shè)備管理系統(tǒng)開(kāi)發(fā)合同2篇
- 二零二四年墻體廣告租賃合同涵蓋廣告位更新維護(hù)責(zé)任3篇
- 2025年房地產(chǎn)項(xiàng)目委托產(chǎn)權(quán)登記及過(guò)戶服務(wù)合同3篇
- 二零二五年度衛(wèi)生間清潔保養(yǎng)服務(wù)合同3篇
- 二零二五年房地產(chǎn)物業(yè)管理服務(wù)委托合同模板3篇
- 2025年度生態(tài)環(huán)保型建筑材料采購(gòu)合同3篇
- 二零二五年服裝店庫(kù)存管理師聘用合同樣本3篇
- 2025年度網(wǎng)絡(luò)安全防護(hù)技術(shù)解決方案定制合同3篇
- 二零二五年度河堤施工環(huán)境保護(hù)與污染防治合同3篇
- 二零二五年度環(huán)保材料買(mǎi)賣(mài)合同規(guī)范文本2篇
- 急診與災(zāi)難醫(yī)學(xué)課件 03 呼吸困難大課何琳zhenshi
- 急性腹瀉與慢性腹瀉修改版
- 先天性肌性斜頸的康復(fù)
- 《國(guó)際市場(chǎng)營(yíng)銷(xiāo)》案例
- GB/T 37518-2019代理報(bào)關(guān)服務(wù)規(guī)范
- GB/T 156-2017標(biāo)準(zhǔn)電壓
- PPT溝通的藝術(shù)課件
- 內(nèi)科學(xué):巨幼細(xì)胞性貧血課件
- 暑假家校聯(lián)系情況記錄表
- 周計(jì)劃工作安排日程表Excel模板
- Q∕GDW 12155-2021 國(guó)家電網(wǎng)有限公司應(yīng)急指揮信息系統(tǒng)技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論