主函數(shù)和層次建立二叉樹(shù) 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩11頁(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)介

1、<p>  《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》報(bào)告</p><p>  設(shè)計(jì)名稱 主函數(shù)和層次建立二叉樹(shù) </p><p>  專 業(yè) 信息與計(jì)算科學(xué) </p><p>  年 級(jí) 11級(jí) </p><p&g

2、t;  組 長(zhǎng) </p><p>  學(xué) 號(hào) </p><p>  組 員 </p><p><b>  目 錄</b></p><p&g

3、t;<b>  一、設(shè)計(jì)題目1</b></p><p><b>  二、運(yùn)行環(huán)境1</b></p><p><b>  三、設(shè)計(jì)思想1</b></p><p><b>  四、流程圖1</b></p><p>  五、算法設(shè)計(jì)分析1</p&

4、gt;<p>  六、運(yùn)行結(jié)果分析3</p><p><b>  七、學(xué)習(xí)總結(jié)6</b></p><p><b>  八、源代碼6</b></p><p><b>  主函數(shù)代碼6</b></p><p>  層次建立二叉樹(shù)代碼8</p>

5、<p><b>  一、設(shè)計(jì)題目 </b></p><p>  主函數(shù)設(shè)計(jì)和層次建立二叉樹(shù)</p><p><b>  二、運(yùn)行環(huán)境</b></p><p><b>  VC++6.0</b></p><p><b>  三、設(shè)計(jì)思想</b>&

6、lt;/p><p><b>  主函數(shù)設(shè)計(jì)</b></p><p>  由于程序的功能進(jìn)行的了模塊化設(shè)計(jì),分別由各小組完成,所以主函數(shù)的設(shè)計(jì)是對(duì)所有模塊的調(diào)用以實(shí)現(xiàn)函數(shù)的各種功能,進(jìn)而完成程序的功能實(shí)現(xiàn)。</p><p>  各個(gè)功能模塊是并列關(guān)系,就用switch分支結(jié)構(gòu)實(shí)現(xiàn)對(duì)功能函數(shù)的平行調(diào)用。</p><p>  為了

7、使操作者清楚自己的指令所實(shí)現(xiàn)的功能,所以設(shè)計(jì)了一個(gè)主界面來(lái)介紹模塊功能和對(duì)應(yīng)的操作指令。</p><p><b>  四、流程圖</b></p><p>  略(本小組負(fù)責(zé)設(shè)計(jì)主函數(shù)故流程圖省略)。</p><p><b>  五、算法設(shè)計(jì)分析</b></p><p>  我們小組選用層次建立法建立

8、二叉樹(shù),操作時(shí)按層次直接輸入即可,不需要將元素進(jìn)行先序或中序或后序處理。為了實(shí)現(xiàn)二叉樹(shù)的層次輸入建立而采用隊(duì)列作為二叉樹(shù)的存儲(chǔ)結(jié)構(gòu)。另外,還選用了結(jié)構(gòu)體等數(shù)據(jù)結(jié)構(gòu)。</p><p>  具體數(shù)據(jù)結(jié)構(gòu)介紹如下:</p><p><b>  二叉樹(shù)結(jié)點(diǎn)結(jié)構(gòu)體:</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>  該結(jié)構(gòu)體包含數(shù)據(jù)域(儲(chǔ)存結(jié)點(diǎn)信息)和指針域(儲(chǔ)存結(jié)點(diǎn)的左右孩子結(jié)點(diǎn)的指

10、針)。</p><p><b>  二叉樹(shù)結(jié)點(diǎn)隊(duì)列:</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>  該結(jié)構(gòu)體包含一個(gè)Bintree類型的數(shù)組,其內(nèi)儲(chǔ)存結(jié)點(diǎn)信息。</p><p>  層次建立二叉樹(shù)的算法設(shè)計(jì)如下:</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、/生成根結(jié)點(diǎn)</p><p>  root->data=ch;</p><p>  node.data[node.rear++]=root; //用隊(duì)列實(shí)現(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(); //為了簡(jiǎn)化操作,分別對(duì)左右子結(jié)點(diǎn)進(jìn)行賦值。</p><p>  if(ch!='&')//子樹(shù)不空則進(jìn)隊(duì)列進(jìn)行擴(kuò)充。下同</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>  六、運(yùn)行結(jié)果分析</b></p><p><b>

21、;  主界面運(yùn)行結(jié)果分析</b></p><p>  輸入任意鍵進(jìn)入選項(xiàng)操作界面</p><p>  輸入1—12 實(shí)現(xiàn)所選操作</p><p>  層次建立二叉樹(shù)運(yùn)行結(jié)果分析:</p><p>  進(jìn)行輸入操作時(shí)要注意程序終止條件,由于我們小組采用的是層次建立,所以結(jié)束條件為當(dāng)二叉樹(shù)的地所有葉子結(jié)點(diǎn)的左右孩子指針域?yàn)榭諘r(shí)程序結(jié)束

22、:</p><p><b>  簡(jiǎn)單舉例:</b></p><p>  輸入ABC&DEFGH&L&I&&&&&&&&</p><p><b>  輸出結(jié)果如下;</b></p><p><b>  七

23、、學(xué)習(xí)總結(jié)</b></p><p>  我們學(xué)習(xí)小組在做這次課程設(shè)計(jì)的時(shí)候我們很團(tuán)結(jié) 作為組長(zhǎng)的我, 把我們每個(gè)人的任務(wù)都部署的很詳細(xì) 每個(gè)人都應(yīng)該做些什么, , 我們分工明確 配合融洽 互相幫助 一起探討整個(gè)課程設(shè)計(jì)的中心思想.通過(guò)這次課程設(shè)計(jì),我們發(fā)現(xiàn),對(duì)于所學(xué)的知識(shí),我們掌握的不是很好,我們需要將知識(shí)理解透徹,不應(yīng)該只學(xué)習(xí)表面的淺層的知識(shí), 我們覺(jué)得我們這次的課程設(shè)計(jì)完成的不是

24、很好,我們組的成員應(yīng)該好好思考一下,找到我們的不足,為下一次的課程設(shè)計(jì)做一個(gè)完美的鋪墊。我們會(huì)繼續(xù)改進(jìn),繼續(xù)努力的.還有通過(guò)這次課程設(shè)計(jì) 我們不但使同學(xué)關(guān)系更加和諧 而且還能增進(jìn)我們之間的團(tuán)隊(duì)意識(shí) 我覺(jué)得這是一項(xiàng)很好的活動(dòng).。我建議老師以后能多多給我們這樣的機(jī)會(huì),來(lái)培養(yǎng)我們的一些能力!總之通過(guò)這項(xiàng)活動(dòng) 。我們雖說(shuō)面對(duì)大的程序有些不知所措 但是我們總體來(lái)說(shuō)還是很開(kāi)心的!</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("==================歡迎進(jìn)入主界面!===============\n");</p><p>  printf(" \n");<

28、/p><p>  printf(" 1、輸出家族樹(shù)\n");</p><p>  printf(" 2、統(tǒng)計(jì)家族成員數(shù)目查找\n");</p><p>  printf(" 3、向家族中添加一個(gè)新成員\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、進(jìn)入**********************\n");</p><p>  printf("================================================\n");</p><p>  //printf("請(qǐng)選擇你的操作選項(xiàng):\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->輸出家族樹(shù)\n");break;</p><p>  case 2:printf("執(zhí)行函數(shù)2->統(tǒng)計(jì)家族成員數(shù)目查找\n");break;</p&

35、gt;<p>  case 3:printf("執(zhí)行函數(shù)3->向家族中添加一個(gè)新成員\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("請(qǐng)選擇你的操作選項(xiàng):\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>  層次建立二叉樹(shù)代碼</b></p><p>  #include<stdio.h></p><p>  #include<malloc.h></p><p>  typedef struct Binnode{//二叉樹(shù)結(jié)點(diǎn)結(jié)構(gòu)體

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{ //二叉樹(shù)結(jié)點(diǎn)隊(duì)列</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)); //生成根結(jié)點(diǎn)</p><p>  root->data=ch;</p><p>  node.data[node.rear++]=root; //用隊(duì)列實(shí)現(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(); //為了簡(jiǎn)化操作,分別對(duì)左右子結(jié)點(diǎn)進(jìn)行賦值。</p><p>  if(ch!='&')//子樹(shù)不空則進(jìn)隊(duì)列進(jìn)行擴(kuò)充。下同</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;層次遍歷二叉樹(shù)結(jié)果:");</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);//測(cè)試,中序遍歷</p><p>  Levelorder(root);</p><p><b>  return 0;</b></p><p><b>  }

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論