




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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)告
學(xué)生姓名學(xué)號(hào)
班級(jí)指導(dǎo)老師
實(shí)驗(yàn)名稱實(shí)驗(yàn)4二叉樹實(shí)驗(yàn)成績(jī)
實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)?zāi)康模?、了解二叉樹的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。
2、了解二叉樹的遍歷.
實(shí)
驗(yàn)實(shí)驗(yàn)要求:(1)在主函數(shù)中,通過鍵盤輸入建立設(shè)定的完全二叉樹的順序存儲(chǔ)結(jié)構(gòu)。
概(2)設(shè)計(jì)子函數(shù),其功能為將順序結(jié)構(gòu)的二叉樹轉(zhuǎn)化為鏈?zhǔn)浇Y(jié)構(gòu)。
述(3)設(shè)計(jì)子函數(shù),其功能為對(duì)給定二叉樹進(jìn)行中序遍歷,顯示遍歷結(jié)果。
(4)通過實(shí)例判斷算法和相應(yīng)程序的正確性。
(5)掌握前序遍歷二叉樹的步驟,針對(duì)任意一棵二叉樹能人工完成對(duì)二叉樹的前序
遍歷。
(6)能掌握棧的工作特點(diǎn),并能正確應(yīng)用這一特點(diǎn)實(shí)現(xiàn)對(duì)二叉樹的遍歷。
實(shí)驗(yàn)基本原理:一、設(shè)一棵完全二叉樹用順序存儲(chǔ)方法存儲(chǔ)于數(shù)組tree中,編寫程
序:
(1)根據(jù)數(shù)組tree,建立與該二叉樹對(duì)應(yīng)的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。
(2)對(duì)該二叉樹采用中序遍歷法顯示遍歷結(jié)果。
二、設(shè)一棵二叉樹采用鏈?zhǔn)椒绞酱鎯?chǔ),編寫一個(gè)前序遍歷該二叉樹的非遞歸算法。
實(shí)驗(yàn)設(shè)計(jì)思路、步驟和方法等:一、(1)順序存儲(chǔ)的二叉樹轉(zhuǎn)化為鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),
采用遞歸算法,遞歸函數(shù)的形式為Creab(tree,n,i,b),其中形參:tree為順序存儲(chǔ)二叉
實(shí)樹的數(shù)組,n為二叉樹的結(jié)點(diǎn)數(shù),i是二叉樹某結(jié)點(diǎn)在數(shù)組tree中的下標(biāo)(初始值為
驗(yàn)1),b為要建立的鏈?zhǔn)酱鎯?chǔ)二叉樹結(jié)點(diǎn)指針、轉(zhuǎn)化時(shí),首先建立*b結(jié)點(diǎn),將tree[ij
內(nèi)的值賦給*b的數(shù)據(jù)域,再調(diào)用遞歸函數(shù)分別構(gòu)造左子樹和右子樹。
容(2)中序遍歷采用遞歸算法,即中序遍歷左子樹、訪問根結(jié)點(diǎn)、中序遍歷右子樹。
二、(1)使用一個(gè)棧(指針數(shù)組)。首先將根結(jié)點(diǎn)(指針)入棧,然后逐次循環(huán),
從棧中退出棧頂元素,作為當(dāng)前要操作結(jié)點(diǎn)的指針(設(shè)為p),訪問p的數(shù)據(jù),然后
令其右結(jié)點(diǎn)(指針)入棧,再將其左結(jié)點(diǎn)(指針)入棧,直至棧空為止。
(2)前序遍歷的次序?yàn)椋焊Y(jié)點(diǎn)、左子樹、右子樹。
實(shí)驗(yàn)過程(實(shí)驗(yàn)中涉及的記錄、數(shù)據(jù)、分析):
一、程序代碼如下:
/*實(shí)驗(yàn)3.1二叉樹的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)*/
#include<stdio.h>
#include<stdlib.h>
#defineMaxSize20
/*二叉樹鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)結(jié)點(diǎn)定義*/
typedefstructBTreeNode
(
chardata;
structBTreeNode*left;
structBTreeNode*right;
}BTreeNode;
BTreeNode*Creab(char*tree,intnjnti,BTreeNode*b);/*建立二叉樹鏈?zhǔn)浇Y(jié)構(gòu)*/
voidInorder(BTreeNode*BT);/*中序遍歷二叉樹*/
voidmain()
(
BTreeNode*BT;/*根結(jié)點(diǎn)指針*/
chartree[MaxSize],c;
intn=0;/*二叉樹的結(jié)點(diǎn)數(shù)*/
inti=l;/*結(jié)點(diǎn)在數(shù)組tree中的下標(biāo)*/
printf(”請(qǐng)輸入完全二叉樹的結(jié)點(diǎn)值(連續(xù)輸入字符,以回車結(jié)束輸入):”);
while((c=getchar())!-\n*)tree[++n]=c;
BT=(BTreeNode*)malloc(sizeof(BTreeNode));
BT=Creab(tree,n,i,BT);
printf(n\n中序遍歷二叉樹的輸出序列為:”);
Inorder(BT);
printf(n\nn);
)
/*將順序結(jié)構(gòu)的二叉樹轉(zhuǎn)化為鏈?zhǔn)浇Y(jié)構(gòu)*/
BTreeNode*Creab(char*tree,intnjnti,BTreeNode*b)
1
\
BTreeNode*p;
if(i<=n)
(
if(i==l)
p=b;當(dāng)前結(jié)點(diǎn)為根結(jié)點(diǎn)*/
else
p=(BTreeNode*)malloc(sizeof(BTreeNode));
p->data=tree[i];
p->left=Creab(tree,n,2*i,p);/*遞歸構(gòu)造左子樹*/
p->right=Creab(tree,n,2*i+l,p);/*遞歸構(gòu)造右子樹*/
)
else
p=NULL;/*葉子結(jié)點(diǎn)*/
returnp;
)
/*中序遍歷二叉樹*/
voidInorder(BTreeNode*BT)
I
i
if(BT!=NULL)
(
Inorder(BT->left);/*遞歸遍歷左子樹*/
printf("%c\BT->data);
Inorder(BT->right);/*遞歸遍歷右子樹*/
)
)
二、程序代碼如下:
/*實(shí)驗(yàn)3.2二叉樹的遍歷*/
#include<stdio.h>
#include<stdlib.h>
#defineMaxSize20
/*二叉樹鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)結(jié)點(diǎn)定義*/
typedefstructBTreeNode
(
chardata;
structBTreeNode*left;
structBTreeNode*right;
[BTreeNode;
/*定義棧*/
typedefstruct
(
BTreeNode*data[MaxSize];
inttop;
)Stack;
BTreeNode*Creab(char*tree,intn,inti,BTreeNode*b);/*建立二叉樹鏈?zhǔn)浇Y(jié)構(gòu)*/
voidPreorderN(BTreeNode*BT);/*前序非遞歸遍歷二叉樹*/
voidmain()
(
BTreeNode*BT;/*根結(jié)點(diǎn)指針*/
chartree[MaxSize],c;
intn=0;/*二叉樹的結(jié)點(diǎn)數(shù)*/
inti=l;/*結(jié)點(diǎn)在數(shù)組tree中的下標(biāo)*/
printf(”請(qǐng)輸入完全二叉樹的結(jié)點(diǎn)值(連續(xù)輸入字符,以回車結(jié)束輸入):”);
while((c=getchar())!=,\n')tree[++n]=c;
BT=(BTreeNode*)malloc(sizeof(BTreeNode));
BT=Creab(tree,n,i,BT);
printfC'\n前序遍歷二叉樹的輸出序列為:”);
PreorderN(BT);
printf(M\nH);
)
/*將順序結(jié)構(gòu)的二叉樹轉(zhuǎn)化為鏈?zhǔn)浇Y(jié)構(gòu)*/
BTreeNode*Creab(char*tree,intn,inti,BTreeNode*b)
(
BTreeNode*p;
if(i<=n)
(
if(i==l)
p=b;/*當(dāng)前結(jié)點(diǎn)為根結(jié)點(diǎn)*/
else
p=(BTreeNode*)malloc(sizeof(BTreeNode));
p->data=tree[i];
p->left=Creab(lree,n,2*i,p);/*遞歸構(gòu)造左子樹*/
p->right=Creab(tree,n,2*i4-1,p);/*遞歸構(gòu)造右子樹*/
)
else
p=NULL;/*葉子結(jié)點(diǎn)*/
returnp;
}
/*前序非遞歸遍歷二叉樹*/
voidPreorderN(BTreeNode*BT)
(
if(BT!=NULL)
(
BTreeNode*p;
Stacks;
s.top=-l;
s.top++;
s.data[s.top]=BT;/*根結(jié)點(diǎn)進(jìn)棧*/
while(s.top!=-1)
(
p=s.data[s.top];/*出棧*/
s.top";
printf(n%cM,p->data);/*訪問根結(jié)點(diǎn)*/
if(p->right!=NULL)
(
s.top++;
s.data|s.top]=p?>right;/*右孩子進(jìn)棧*/
)
if(p->left!=NULL)
{
s.top++;
s.data[s.top]=p->left;/*左孩子進(jìn)棧*/
)
)
)
else
printf("此二叉樹無效!\nn);
)
實(shí)驗(yàn)結(jié)果:一、
c\*C:\Docu>entsandSettings\AllUsers'桌面\sy3_l\Debug\sy3_l?exe”
請(qǐng)輸入完整二叉箱前基點(diǎn)卷《逑續(xù)輸入學(xué)將,以回車結(jié)束輸入):abcdefgh
中序遍歷二叉樹的輸出序列為:hdbeafcS
Pressan9keytocontinue.
c<*C:\Docu>entsandSettings\AllUsers'桌面\sy3_l\Debug\sye*e"
請(qǐng)輸不舞嘉曾"隹續(xù)輸入字符,以回車結(jié)束輸入):abcdefghij
中序遍歷二叉樹的輸出序列為:hdibjeafcg
Pressanykeytocontinue.
二、
c\*C:\DOCU1ESTSAIDSETTIIGS\ALLUSERS\^ffi\sy3_2\Debug\sy3_2.exe*
產(chǎn)輸胭惠曾《最輸人字符,遍睪賽歐L
,序遍歷二叉樹的輸出序列為:abdhec£g
Pressanykeytocontinue
c<*C:\
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東協(xié)和學(xué)院《產(chǎn)能成本決策虛擬仿真實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 商丘職業(yè)技術(shù)學(xué)院《天然提取物與生物活性物質(zhì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 濟(jì)寧2025年山東濟(jì)寧市直教育系統(tǒng)校園招聘55人(曲阜師范大學(xué)站)筆試歷年參考題庫(kù)附帶答案詳解
- 揚(yáng)州環(huán)境資源職業(yè)技術(shù)學(xué)院《數(shù)據(jù)可視化與數(shù)據(jù)新聞》2023-2024學(xué)年第二學(xué)期期末試卷
- 海南體育職業(yè)技術(shù)學(xué)院《Java語(yǔ)言程序設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 瀘州職業(yè)技術(shù)學(xué)院《中國(guó)畫》2023-2024學(xué)年第二學(xué)期期末試卷
- 泰安2025年山東泰安岱岳區(qū)事業(yè)單位初級(jí)綜合類崗位招聘103人筆試歷年參考題庫(kù)附帶答案詳解-1
- 《負(fù)數(shù)的初步認(rèn)識(shí)》教學(xué)設(shè)計(jì)-2024-2025學(xué)年五年級(jí)上冊(cè)數(shù)學(xué)蘇教版
- 浙江商業(yè)職業(yè)技術(shù)學(xué)院《石油工程專業(yè)認(rèn)知專題》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北科技大學(xué)《通信電路設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- (高清版)DZT 0004-2015 重力調(diào)查技術(shù)規(guī)范(150 000)
- 子癇前期危險(xiǎn)因素篩查策略
- 燃?xì)膺^戶協(xié)議書
- 射頻同軸電纜簡(jiǎn)介
- 《勞動(dòng)專題教育》課件-勞動(dòng)的產(chǎn)生
- 中央經(jīng)濟(jì)會(huì)議2024原文及解釋
- 新高考化學(xué)2024備考選擇題高頻熱點(diǎn)專項(xiàng)突破16 弱電解質(zhì)的電離平衡
- 2021年古包頭市昆都侖區(qū)水務(wù)公司招聘考試試題及答案
- 關(guān)于中小企業(yè)“融資難”問題的對(duì)策研究-基于臺(tái)灣經(jīng)驗(yàn)和啟示
- 固體廢棄物管理培訓(xùn)
- 硬件工程師職業(yè)生涯規(guī)劃
評(píng)論
0/150
提交評(píng)論