




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)報(bào)告姓名系別班級(jí)學(xué)號(hào)實(shí)驗(yàn)日期指導(dǎo)教師實(shí)驗(yàn)成績(jī)周娟信息學(xué)院電子2班102002072012-4-26王政霞實(shí)驗(yàn)三二叉樹(shù)需求分析一、實(shí)驗(yàn)?zāi)康?、掌握二叉樹(shù)的基本運(yùn)算和遍歷算法的實(shí)現(xiàn)2、掌握樹(shù)形結(jié)構(gòu)的特點(diǎn),二叉樹(shù)的存儲(chǔ)方式以及相應(yīng)操作二、實(shí)驗(yàn)內(nèi)容按先序遍歷序列建立二叉樹(shù)的二叉鏈表,已知先序序列為(F表示空格):ABCFFDEFGFFFFFF。并寫(xiě)一個(gè)函數(shù)treenodes()統(tǒng)計(jì)該二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)。如果有可能,寫(xiě)一個(gè)輸出函數(shù)treeprint()用樹(shù)形結(jié)構(gòu)打印出該二叉樹(shù)。概要設(shè)計(jì)1>抽象數(shù)據(jù)結(jié)構(gòu)類型二叉樹(shù)的定義:ADTBinaryTree{數(shù)據(jù)對(duì)象D:D是具有相同特性的數(shù)據(jù)元素的集合。數(shù)據(jù)關(guān)系R:若D=Φ,則R=Φ,稱BinaryTree為空二叉樹(shù);若D≠Φ,則R={H},H是如下二元關(guān)系:(1)在D中存在唯一的稱為根的數(shù)據(jù)元素root,它在關(guān)系H下無(wú)前驅(qū);(2)若D-{root}≠Φ,則存在D-{root}={D1,Dr},且D1∩Dr=Φ;(3)若D1≠Φ,則D1中存在唯一的元素X1,<root,X1>屬于H,且存在Dr上的關(guān)系Hr屬于H;H={<root,X1>,<root,Xr>,H1,Hr};(4)(D,{H1})是一棵符合本定義的二叉樹(shù),稱為根的左子樹(shù),(Dr,{Hr})是一棵符合本定義的二叉樹(shù),稱為根的右子數(shù)?;静僮鳎篒nitBiTree(&T)操作結(jié)果:構(gòu)造空二叉樹(shù)T。DestroyBiTree(&T)初始條件:二叉樹(shù)T已存在。操作結(jié)果:銷毀二叉樹(shù)T。GreateBiTree(&T,definition)初始條件:definition給出二叉樹(shù)T的定義。操作結(jié)果:按definition構(gòu)造二叉樹(shù)T。ClearBiTree{&T};初始條件:二叉樹(shù)T存在。操作結(jié)果:將二叉樹(shù)t清空。BiTreeEmpty(T)初始條件:二叉樹(shù)T存在。操作結(jié)果:若T為空二叉樹(shù),則返回TRUE,否則返回FALSE.BiTreeDepth(T)初始條件:二叉樹(shù)T存在。操作結(jié)果:返回T的深度。Root(T)初始條件:二叉樹(shù)T已存在。操作結(jié)果:返回T的根。LeftBiTree&(T,e)初始條件:二叉樹(shù)T存在,e是T中某個(gè)節(jié)點(diǎn)。操作結(jié)果:返回e的左孩子。若e無(wú)左孩子,則返回“空”。RightBiTree(T,e)初始條件:二叉樹(shù)T已存在,e是T中某個(gè)結(jié)點(diǎn)。操作結(jié)果:返回e的右孩子。若e無(wú)右孩子,則返回“空”。PreOrderTraverse(T,Visit())初始條件:二叉樹(shù)T存在,Visit是對(duì)結(jié)點(diǎn)操作的應(yīng)用函數(shù)。操作結(jié)果:先序遍歷t,對(duì)每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)Visit一次且一次,一旦調(diào)用失敗,則操作失敗。InOrderTraverse(T,Visit())初始條件:二叉樹(shù)T存在,Visit是對(duì)結(jié)點(diǎn)操作的應(yīng)用函數(shù)。操作結(jié)果:中序遍歷t,對(duì)每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)Visit一次且一次,一旦調(diào)用失敗,則操作失敗。PostOrderTraverse(T,Visit())初始條件:二叉樹(shù)T存在,Visit是對(duì)結(jié)點(diǎn)操作的應(yīng)用函數(shù)。操作結(jié)果:后序遍歷t,對(duì)每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)Visit一次且一次,一旦調(diào)用失敗,則操作失敗。LevelOrderTraverse(T,Visit())初始條件:二叉樹(shù)T存在,Visit是對(duì)結(jié)點(diǎn)操作的應(yīng)用函數(shù)。操作結(jié)果:層序遍歷t,對(duì)每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)Visit一次且一次,一旦調(diào)用失敗,則操作失敗。}ADTBinaryTree2>各程序模塊之間的層次關(guān)系圖:主程序模塊主程序模塊從鍵盤輸入二叉樹(shù)的先序序列從鍵盤輸入二叉樹(shù)的先序序列 調(diào)用遞歸先序遍歷調(diào)用遞歸先序遍歷函數(shù)模塊實(shí)現(xiàn)先序遍歷調(diào)用遞歸中序遍歷函數(shù)模塊實(shí)現(xiàn)中序遍歷調(diào)用遞歸中序遍歷函數(shù)模塊實(shí)現(xiàn)中序遍歷調(diào)用遞歸后序遍歷函數(shù)模塊實(shí)現(xiàn)后序遍歷調(diào)用遞歸后序遍歷函數(shù)模塊實(shí)現(xiàn)后序遍歷調(diào)用層次遍歷函數(shù)判斷結(jié)點(diǎn)數(shù)調(diào)用層次遍歷函數(shù)判斷結(jié)點(diǎn)數(shù)詳細(xì)設(shè)計(jì)#include"stdio.h"#include"stdlib.h"#include"malloc.h"1、二叉樹(shù)的定義typedefcharTElemType;typedefstructBiTNode{ TElemTypedata; structBiTNode*lchild,*rchild;}BiTNode;2、隊(duì)列的定義typedefstructQNode{ BiTNodedata; structQNode*next;}Queue;typedefstruct//隊(duì)列的頭指針和尾指針{Queue*front; Queue*rear;}LinkQueue;intJT=0;3、先序建立二叉樹(shù)BiTNode*CreateBiTree(){TElemTypech; BiTNode*T; scanf("%c",&ch); if(ch=='') T=NULL; else { if(!(T=(BiTNode*)malloc(sizeof(BiTNode)))) exit(0); T->data=ch; JT++; T->lchild=CreateBiTree();//建立左子樹(shù) T->rchild=CreateBiTree();//建立右子樹(shù) } returnT;}4、初始化隊(duì)列intInitQueue(LinkQueue*Q){ Q->front=Q->rear=(Queue*)malloc(sizeof(Queue)); if(!Q->front) exit(0); Q->front->next=NULL; return1;}intEnQueue(LinkQueue*Q,BiTNodee)//向隊(duì)列中插入元素{ Queue*p; p=(Queue*)malloc(sizeof(Queue)); if(!p) exit(0); p->data=e; p->next=NULL; Q->rear->next=p; Q->rear=p; return1;//插入成功返回1}5、出隊(duì)intDeQueue(LinkQueue*Q,BiTNode*e){ Queue*p; if(Q->front==Q->rear)//隊(duì)列為空 return0; p=Q->front->next; *e=p->data; Q->front->next=p->next; if(Q->rear==p) Q->rear=Q->front; free(p); return1;}6、判斷隊(duì)列是否為空隊(duì)列intEmptyQueue(LinkQueue*Q){ if(Q->rear==Q->front) return1; else return0;}7、隊(duì)列的層次遍歷voidLevelTraverse(BiTNode*T){ LinkQueueQ; BiTNode*p; InitQueue(&Q); EnQueue(&Q,*T); p=T; while(!EmptyQueue(&Q)) {DeQueue(&Q,p); printf("%c",p->data); if(p->lchild) EnQueue(&Q,*p->lchild); if(p->rchild) EnQueue(&Q,*p->rchild); }}8、遞歸先序遍歷voidPreOrderTraverse(BiTNode*btn){if(btn!=NULL){printf("%c",btn->data);PreOrderTraverse(btn->lchild);PreOrderTraverse(btn->rchild);}}9、遞歸中序遍歷voidInOrderTraverse(BiTNode*btn){if(btn!=NULL){InOrderTraverse(btn->lchild);printf("%c",btn->data);InOrderTraverse(btn->rchild);}} 10、遞歸后序遍歷voidPostOrderTraverse(BiTNode*btn){if(btn!=NULL){PostOrderTraverse(btn->lchild);PostOrderTraverse(btn->rchild);printf("%c",btn->data);}}11、主函數(shù)main(){ BiTNode*btn; printf("\n輸入二叉樹(shù)空節(jié)點(diǎn)輸“”:\n"); btn=CreateBiTree(); printf("\n遞歸先序遍歷二叉樹(shù)的結(jié)果:\n"); PreOrderTraverse(btn);//遞歸先序遍歷建立的二叉樹(shù)printf("\n遞歸中序遍歷二叉樹(shù)的結(jié)果:\n");InOrderTraverse(btn);printf("\n遞歸后序遍歷二叉樹(shù)的結(jié)果:\n");PostOrderTraverse(btn); printf("\n二叉樹(shù)的結(jié)點(diǎn)數(shù)為:%d\n",JT);//二叉樹(shù)結(jié)點(diǎn)的數(shù)目 printf("\n層次遍歷二叉樹(shù)的結(jié)果:\n"); LevelTraverse(btn); printf("\n");}調(diào)試分析:由于開(kāi)始對(duì)二叉樹(shù)存儲(chǔ)的知識(shí)還不熟識(shí),在建立二叉鏈表和二叉樹(shù)的遍歷出現(xiàn)了很多問(wèn)題。3、在使用二叉樹(shù)的遍歷時(shí),有時(shí)因?yàn)樽约旱拇中模阎羔樀奈恢门e(cuò)了。4、做本程序用到了指針的知識(shí),有時(shí)一有不懂的東西又只能打開(kāi)書(shū)來(lái)看。5、開(kāi)始時(shí)沒(méi)有把二叉樹(shù)的左右子樹(shù)情況考慮全面,導(dǎo)致咋遍歷的時(shí)候出現(xiàn)了一些錯(cuò)誤。用戶使用說(shuō)明本程序的運(yùn)行環(huán)境為MicrosofeV
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Pinatuzumab-vedotin-anti-CD22-vc-MMAE-生命科學(xué)試劑-MCE
- Methyl-piperazine-2-carboxylate-生命科學(xué)試劑-MCE
- Hydantocidin-生命科學(xué)試劑-MCE
- 科技發(fā)展與環(huán)境保護(hù)的協(xié)同作用
- 樹(shù)木砍伐居間合同合同范本
- 2025湖北鄂州華容區(qū)城市建設(shè)投資有限公司招聘綜合筆試參考題庫(kù)附帶答案詳解
- 社區(qū)中醫(yī)健康教育從理論到實(shí)踐的探索
- 社區(qū)資源在老年健康管理中的應(yīng)用
- 藥劑科工作制度
- 二零二五年度主題餐廳品牌及店鋪轉(zhuǎn)讓合同
- 寵物運(yùn)輸合同樣本
- 在優(yōu)化營(yíng)商環(huán)境工作座談會(huì)上的講話
- 2024-2025學(xué)年七年級(jí)數(shù)學(xué)下冊(cè)第7章《冪的運(yùn)算》檢測(cè)卷(蘇科版2024 含答案解析)
- 家具公司、店鋪管理運(yùn)營(yíng)手冊(cè)
- 2025年餐飲股權(quán)分配協(xié)議書(shū)模板
- 2025春季開(kāi)學(xué)前學(xué)校安全隱患排查工作實(shí)施方案:5大安全排查一個(gè)都不能少
- 浙江省寧波市奉化區(qū)2024-2025學(xué)年高二上學(xué)期期末聯(lián)考語(yǔ)文試題及答案
- 2025-2030年中國(guó)鉛酸蓄電池行業(yè)市場(chǎng)需求分析與十三五規(guī)劃研究報(bào)告
- 2024年蘇州職業(yè)大學(xué)高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫(kù)含答案解析
- 2025年江蘇蘇州市常熟市交通公有資產(chǎn)經(jīng)營(yíng)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 中國(guó)民用航空飛行學(xué)院《大學(xué)數(shù)學(xué)(二)》2023-2024學(xué)年第一學(xué)期期末試卷
評(píng)論
0/150
提交評(píng)論