版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《數(shù)據(jù)結構課程設計》報告</p><p> 設計名稱 主函數(shù)和層次建立二叉樹 </p><p> 專 業(yè) 信息與計算科學 </p><p> 年 級 11級 </p><p&g
2、t; 組 長 </p><p> 學 號 </p><p> 組 員 </p><p><b> 目 錄</b></p><p&g
3、t;<b> 一、設計題目1</b></p><p><b> 二、運行環(huán)境1</b></p><p><b> 三、設計思想1</b></p><p><b> 四、流程圖1</b></p><p> 五、算法設計分析1</p&
4、gt;<p> 六、運行結果分析3</p><p><b> 七、學習總結6</b></p><p><b> 八、源代碼6</b></p><p><b> 主函數(shù)代碼6</b></p><p> 層次建立二叉樹代碼8</p>
5、<p><b> 一、設計題目 </b></p><p> 主函數(shù)設計和層次建立二叉樹</p><p><b> 二、運行環(huán)境</b></p><p><b> VC++6.0</b></p><p><b> 三、設計思想</b>&
6、lt;/p><p><b> 主函數(shù)設計</b></p><p> 由于程序的功能進行的了模塊化設計,分別由各小組完成,所以主函數(shù)的設計是對所有模塊的調(diào)用以實現(xiàn)函數(shù)的各種功能,進而完成程序的功能實現(xiàn)。</p><p> 各個功能模塊是并列關系,就用switch分支結構實現(xiàn)對功能函數(shù)的平行調(diào)用。</p><p> 為了
7、使操作者清楚自己的指令所實現(xiàn)的功能,所以設計了一個主界面來介紹模塊功能和對應的操作指令。</p><p><b> 四、流程圖</b></p><p> 略(本小組負責設計主函數(shù)故流程圖省略)。</p><p><b> 五、算法設計分析</b></p><p> 我們小組選用層次建立法建立
8、二叉樹,操作時按層次直接輸入即可,不需要將元素進行先序或中序或后序處理。為了實現(xiàn)二叉樹的層次輸入建立而采用隊列作為二叉樹的存儲結構。另外,還選用了結構體等數(shù)據(jù)結構。</p><p> 具體數(shù)據(jù)結構介紹如下:</p><p><b> 二叉樹結點結構體:</b></p><p> typedef struct Binnode{</p&
9、gt;<p> char data;</p><p> struct Binnode *lchild;</p><p> struct Binnode *rchild;</p><p><b> };</b></p><p> 該結構體包含數(shù)據(jù)域(儲存結點信息)和指針域(儲存結點的左右孩子結點的指
10、針)。</p><p><b> 二叉樹結點隊列:</b></p><p> typedef struct queue{</p><p> Bintree data[30];</p><p> int front;</p><p><b> int rear;</b>
11、;</p><p><b> };</b></p><p> 該結構體包含一個Bintree類型的數(shù)組,其內(nèi)儲存結點信息。</p><p> 層次建立二叉樹的算法設計如下:</p><p> Bintree Level_Creat()</p><p><b> {</b&
12、gt;</p><p> Bintree root,p,s;</p><p> queue node;</p><p> node.front=node.rear=0;</p><p><b> char ch;</b></p><p> ch=getchar();</p>
13、<p> if(ch=='&')</p><p><b> {</b></p><p> return NULL;</p><p><b> }</b></p><p> root=(Binnode*)malloc(sizeof(Binnode)); /
14、/生成根結點</p><p> root->data=ch;</p><p> node.data[node.rear++]=root; //用隊列實現(xiàn)層次遍歷</p><p> while(node.front<node.rear)</p><p><b> {</b></p><
15、;p> p=node.data[node.front++];</p><p> ch=getchar(); //為了簡化操作,分別對左右子結點進行賦值。</p><p> if(ch!='&')//子樹不空則進隊列進行擴充。下同</p><p><b> {</b></p><p>
16、 s=(Binnode*)malloc(sizeof(Binnode));</p><p> s->data=ch;</p><p> p->lchild=s;</p><p> node.data[node.rear++]=s;</p><p><b> }</b></p><
17、p><b> else</b></p><p><b> {</b></p><p> p->lchild=NULL;</p><p><b> }</b></p><p> ch=getchar();</p><p> if(c
18、h!='&')</p><p><b> {</b></p><p> s=(Binnode*)malloc(sizeof(Binnode));</p><p> s->data=ch;</p><p> p->rchild=s;</p><p> n
19、ode.data[node.rear++]=s;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> p->rchild=NULL;</p><p>&l
20、t;b> }</b></p><p><b> }</b></p><p> return root;</p><p><b> }</b></p><p><b> 六、運行結果分析</b></p><p><b>
21、; 主界面運行結果分析</b></p><p> 輸入任意鍵進入選項操作界面</p><p> 輸入1—12 實現(xiàn)所選操作</p><p> 層次建立二叉樹運行結果分析:</p><p> 進行輸入操作時要注意程序終止條件,由于我們小組采用的是層次建立,所以結束條件為當二叉樹的地所有葉子結點的左右孩子指針域為空時程序結束
22、:</p><p><b> 簡單舉例:</b></p><p> 輸入ABC&DEFGH&L&I&&&&&&&&</p><p><b> 輸出結果如下;</b></p><p><b> 七
23、、學習總結</b></p><p> 我們學習小組在做這次課程設計的時候我們很團結 作為組長的我, 把我們每個人的任務都部署的很詳細 每個人都應該做些什么, , 我們分工明確 配合融洽 互相幫助 一起探討整個課程設計的中心思想.通過這次課程設計,我們發(fā)現(xiàn),對于所學的知識,我們掌握的不是很好,我們需要將知識理解透徹,不應該只學習表面的淺層的知識, 我們覺得我們這次的課程設計完成的不是
24、很好,我們組的成員應該好好思考一下,找到我們的不足,為下一次的課程設計做一個完美的鋪墊。我們會繼續(xù)改進,繼續(xù)努力的.還有通過這次課程設計 我們不但使同學關系更加和諧 而且還能增進我們之間的團隊意識 我覺得這是一項很好的活動.。我建議老師以后能多多給我們這樣的機會,來培養(yǎng)我們的一些能力!總之通過這項活動 。我們雖說面對大的程序有些不知所措 但是我們總體來說還是很開心的!</p><p><b>
25、。</b></p><p><b> 八、源代碼</b></p><p><b> 主函數(shù)代碼</b></p><p> #include<stdio.h></p><p> #include<string.h></p><p>
26、 #include<stdlib.h>//清屏函數(shù)頭文件</p><p> void jiemie1()</p><p><b> {</b></p><p> system("CLS");</p><p> printf("=======================
27、=========================\n");</p><p> printf("==================歡迎進入主界面!===============\n");</p><p> printf(" \n");<
28、/p><p> printf(" 1、輸出家族樹\n");</p><p> printf(" 2、統(tǒng)計家族成員數(shù)目查找\n");</p><p> printf(" 3、向家族中添加一個新成員\n");</p><p&
29、gt; printf(" 4、確定某一成員是第幾代\n");</p><p> printf(" 5、查找某一成員的兄弟\n");</p><p> printf(" 6、查找某一成員的雙親\n");</p><p> printf(
30、" 7、查找某一成員的鼻祖\n");</p><p> printf(" 8、查找某一成員的堂兄弟\n");</p><p> printf(" 9、查找某一成員是否存在\n");</p><p> printf("
31、 10、查找某一成員的子孫后代\n");</p><p> printf(" 11、查找某一成員的所有孩子\n");</p><p> printf(" 12、查找某一成員的所有祖先路徑\n");</p><p> //printf("
32、 14、進入**********************\n");</p><p> printf("================================================\n");</p><p> //printf("請選擇你的操作選項:\n");</p><p><
33、;b> }</b></p><p> void hanshu1()</p><p><b> {}</b></p><p> void jiemian2(int n)</p><p><b> {</b></p><p><b> sw
34、itch(n)</b></p><p><b> {</b></p><p> case 1:printf("執(zhí)行函數(shù)1->輸出家族樹\n");break;</p><p> case 2:printf("執(zhí)行函數(shù)2->統(tǒng)計家族成員數(shù)目查找\n");break;</p&
35、gt;<p> case 3:printf("執(zhí)行函數(shù)3->向家族中添加一個新成員\n");break;</p><p> case 4:printf("執(zhí)行函數(shù)4->確定某一成員是第幾代\n");break;</p><p> case 5:printf("執(zhí)行函數(shù)5->查找某一成員的兄弟\n&quo
36、t;);break;</p><p> case 6:printf("執(zhí)行函數(shù)6->查找某一成員的雙親\n");break;</p><p> case 7:printf("執(zhí)行函數(shù)7->查找某一成員的鼻祖\n");break;</p><p> case 8:printf("執(zhí)行函數(shù)8->查
37、找某一成員的堂兄弟\n");break;</p><p> case 9:printf("執(zhí)行函數(shù)9->查找某一成員是否存在\n");break;</p><p> case 10:printf("執(zhí)行函數(shù)10->查找某一成員的子孫后代\n");break;</p><p> case 11:pri
38、ntf("執(zhí)行函數(shù)11->查找某一成員的所有孩子\n");break;</p><p> case 12:printf("執(zhí)行函數(shù)12->查找某一成員的所有祖先路徑\n");break;</p><p> //case 13:printf("執(zhí)行函數(shù)13\n");hanshu1();break;</p>
39、<p> //case 14:printf("執(zhí)行函數(shù)14\n");hanshu1();break;</p><p> default:printf("輸入有誤!!!!!!!!!!!!!!\n");break;</p><p><b> }</b></p><p><b>
40、 }</b></p><p> int main()</p><p><b> {</b></p><p> int i;char ch;</p><p> ch=getchar();</p><p> while(ch!='w')</p>&l
41、t;p><b> {</b></p><p><b> ch='1';</b></p><p> jiemie1();</p><p> system("PAUSE");</p><p> system("CLS");</
42、p><p> printf("請選擇你的操作選項:\n");</p><p> scanf("%d",&i);</p><p> //system("PAUSE");</p><p> //system("CLS");</p><p
43、> jiemian2(i);</p><p> system("PAUSE");</p><p> ch=getchar();</p><p><b> }</b></p><p><b> return 0;</b></p><p>&l
44、t;b> }</b></p><p><b> 層次建立二叉樹代碼</b></p><p> #include<stdio.h></p><p> #include<malloc.h></p><p> typedef struct Binnode{//二叉樹結點結構體
45、</p><p> char data;</p><p> struct Binnode *lchild;</p><p> struct Binnode *rchild;</p><p><b> };</b></p><p> typedef Binnode *Bintree ;&l
46、t;/p><p> typedef struct queue{ //二叉樹結點隊列</p><p> Bintree data[30];</p><p> int front;</p><p><b> int rear;</b></p><p><b> };</b>
47、</p><p> void Inorder1(Bintree t)</p><p><b> {</b></p><p> if(t!=NULL)</p><p><b> {</b></p><p> Inorder1(t->lchild);</p&
48、gt;<p> printf("%c",t->data);</p><p> Inorder1(t->rchild);</p><p><b> }</b></p><p><b> }</b></p><p> Bintree Level_C
49、reat()</p><p><b> {</b></p><p> Bintree root,p,s;</p><p> queue node;</p><p> node.front=node.rear=0;</p><p><b> char ch;</b>&
50、lt;/p><p> ch=getchar();</p><p> if(ch=='&')</p><p><b> {</b></p><p> return NULL;</p><p><b> }</b></p><p&
51、gt; root=(Binnode*)malloc(sizeof(Binnode)); //生成根結點</p><p> root->data=ch;</p><p> node.data[node.rear++]=root; //用隊列實現(xiàn)層次遍歷</p><p> while(node.front<node.rear)</p>
52、<p><b> {</b></p><p> p=node.data[node.front++];</p><p> ch=getchar(); //為了簡化操作,分別對左右子結點進行賦值。</p><p> if(ch!='&')//子樹不空則進隊列進行擴充。下同</p><p&
53、gt;<b> {</b></p><p> s=(Binnode*)malloc(sizeof(Binnode));</p><p> s->data=ch;</p><p> p->lchild=s;</p><p> node.data[node.rear++]=s;</p>&
54、lt;p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> p->lchild=NULL;</p><p><b> }</b></p><p
55、> ch=getchar();</p><p> if(ch!='&')</p><p><b> {</b></p><p> s=(Binnode*)malloc(sizeof(Binnode));</p><p> s->data=ch;</p><
56、p> p->rchild=s;</p><p> node.data[node.rear++]=s;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p&
57、gt; p->rchild=NULL;</p><p><b> }</b></p><p><b> }</b></p><p> return root;</p><p><b> }</b></p><p> void Level
58、order(Bintree t)</p><p><b> {</b></p><p><b> queue q;</b></p><p> q.data[0]=t;</p><p> q.front=0;q.rear=1;</p><p> printf(&quo
59、t;層次遍歷二叉樹結果:");</p><p> while(q.front<q.rear)</p><p><b> {</b></p><p> if(q.data[q.front])</p><p><b> {</b></p><p> pr
60、intf("%c",q.data[q.front]->data);</p><p> q.data[q.rear++]=q.data[q.front]->lchild;</p><p> q.data[q.rear++]=q.data[q.front]->rchild;</p><p> q.front++;</p&
61、gt;<p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> q.front++;</p><p><b> }</b></p><p&g
62、t;<b> }</b></p><p> printf("\n\n");</p><p><b> }</b></p><p> int main()</p><p><b> {</b></p><p> Bintre
63、e root;</p><p> root=Level_Creat();</p><p> Inorder1(root);//測試,中序遍歷</p><p> Levelorder(root);</p><p><b> return 0;</b></p><p><b> }
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二叉樹數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計--按層次遍歷二叉樹
- 《數(shù)據(jù)結構遍歷二叉樹》課程設計
- 數(shù)據(jù)結構課程設計---計算二叉樹高度
- 數(shù)據(jù)結構課程設計---二叉樹的建立和遍歷的演示
- 數(shù)據(jù)結構課程設計----二叉樹的應用
- 數(shù)據(jù)結構課程設計--二叉樹及應用
- 數(shù)據(jù)結構課程設計報告---線索二叉樹
- 數(shù)據(jù)結構課程設計--二叉樹的遍歷
- 數(shù)據(jù)結構課程設計---二叉樹的操作
- 《數(shù)據(jù)結構》課程設計--二叉排序樹調(diào)整為平衡二叉樹
- 數(shù)據(jù)結構樹和二叉樹ppt
- 數(shù)據(jù)結構課程設計--二叉樹的相關操作
- 數(shù)據(jù)結構課程設計報告--二叉樹的算法
- 數(shù)據(jù)結構課程設計----二叉樹平衡的判定
- 數(shù)據(jù)結構課程設計--樹的應用_樹和二叉樹的轉換
- 數(shù)據(jù)結構課程設計-二叉樹的基本操作
- 數(shù)據(jù)結構課程設計之二叉樹的遍歷
- 數(shù)據(jù)結構課程設計--二叉樹生成家譜
- 數(shù)據(jù)結構課程設計之-樹與二叉樹的轉換
評論
0/150
提交評論