2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  信息科學(xué)與技術(shù)學(xué)院</b></p><p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告</p><p>  目 錄</p><p>  1、課程設(shè)計的目的、課程設(shè)計題目、題目要求2</p><p>  1.1課程設(shè)計的目的3</p><p>  1.2課程設(shè)計的題目

2、3</p><p><b>  1.3題目要求3</b></p><p>  2課程設(shè)計的實驗報告內(nèi)容:4</p><p>  3課程設(shè)計的原程序代碼:4</p><p><b>  4運(yùn)行結(jié)果16</b></p><p>  5. 課程設(shè)計總結(jié)21</p&g

3、t;<p><b>  6參考書目22</b></p><p><b>  1課程設(shè)計的目的</b></p><p>  1.1課程設(shè)計的目的:</p><p>  通過以前的學(xué)習(xí)以及查看相關(guān)資料,按著題目要求編寫程序,進(jìn)一步加強(qiáng)對編程的訓(xùn)練,使得自己掌握一些將書本知識轉(zhuǎn)化為實際應(yīng)用當(dāng)中.在整個程序中,主要

4、應(yīng)用的是鏈表,但是也運(yùn)用了類.通過兩種方法解決現(xiàn)有問題.</p><p>  1.2課程設(shè)計的題目: 二叉樹的應(yīng)用</p><p><b>  1.3題目要求:</b></p><p>  建立二叉樹的二叉鏈表存儲算法</p><p>  二叉樹的先序遍歷,中序遍歷和后序遍歷輸出</p><p>

5、  非遞歸的先序遍歷,中序遍歷</p><p><b>  二叉樹的層次遍歷</b></p><p>  判斷此二叉樹是否是完全二叉樹</p><p>  二叉樹的左右孩子的交換</p><p>  2課程設(shè)計的實驗報告內(nèi)容:</p><p>  通過遞歸對二叉樹進(jìn)行遍歷。二叉樹的非遞歸遍歷主要采

6、用利用隊進(jìn)行遍歷。此后的判斷此二叉樹是否是完全二叉樹也才采用隊,而二叉樹的左右孩子的交換則采用的是一個簡單的遞歸。</p><p>  3課程設(shè)計的原程序代碼:</p><p>  #include<iostream></p><p>  using namespace std;</p><p>  #define MAXSIZE

7、 100</p><p>  int sign=0;</p><p>  void menu();</p><p><b>  //</b></p><p>  typedef struct BiTNode</p><p><b>  {</b></p><

8、;p>  char data;</p><p>  BiTNode *left_child,*right_child;</p><p>  }BiTNode,*BiTree;</p><p>  int CreateBiTree(BiTree &T)//創(chuàng)建二叉樹</p><p>  { char ch;</p>

9、<p>  cout<<"請輸入數(shù)據(jù)(#為結(jié)束): ";</p><p><b>  cin>>ch;</b></p><p>  if(ch=='#') T=NULL;</p><p><b>  else</b></p><

10、p><b>  { </b></p><p>  if(!(T=new BiTNode)){ </p><p>  cout<<"Overflow!";//no alloction</p><p><b>  return 0;</b></p><p>

11、<b>  }</b></p><p>  T->data=ch;</p><p>  CreateBiTree(T->left_child);//create leftchild</p><p>  CreateBiTree(T->right_child); //create rightchild</p>

12、<p><b>  }</b></p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  //判斷此樹是否是完全二叉樹</p><p>  int LevelOrder1(BiTree &T)<

13、/p><p><b>  {</b></p><p>  BiTree stack[MAXSIZE];</p><p><b>  BiTreep;</b></p><p>  int front,rear;</p><p>  front=-1,rear=0;</p&

14、gt;<p>  stack[rear]=T;</p><p>  while(rear!=front)</p><p><b>  {</b></p><p>  front++;</p><p>  p=stack[front];</p><p>  if((p->

15、left_child==NULL)&&(p->right_child))</p><p>  sign=1;</p><p>  if(p->left_child)</p><p><b>  {</b></p><p><b>  rear++;</b></

16、p><p>  stack[rear]=p->left_child;</p><p><b>  }</b></p><p>  if(p->right_child)</p><p><b>  {</b></p><p><b>  rear++;<

17、/b></p><p>  stack[rear]=p->right_child;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return 1;</b></p><p>&l

18、t;b>  }</b></p><p>  void Output(BiTree &T) //輸出二叉樹</p><p><b>  {</b></p><p><b>  if(!T) {</b></p><p>  cout<<"空樹!\n&qu

19、ot;;</p><p><b>  return ;</b></p><p>  } //空樹</p><p>  cout<<T->data<<" ";// 輸出根結(jié)點</p><p>  if(T->left_child)

20、Output(T->left_child); //輸出左子樹</p><p>  if(T->right_child)Output(T->right_child);//輸出右子樹</p><p><b>  }</b></p><p>  int Depth(BiTree &T) //求樹深</p>&l

21、t;p><b>  {</b></p><p><b>  int i,j;</b></p><p>  if(!T) return 0;</p><p>  i = Depth(T->left_child);</p><p>  j = Depth(T->right_child)

22、;</p><p>  return (i>j?i:j) + 1;</p><p><b>  }</b></p><p>  int Node(BiTree &T)//求結(jié)點數(shù)</p><p><b>  {</b></p><p>  if(!T) retu

23、rn 0;</p><p>  return 1+Node(T->left_child)+Node(T->right_child);</p><p><b>  }</b></p><p>  int Leaf(BiTree &T) //求葉子結(jié)點</p><p><b>  {</b

24、></p><p>  if(!T) return 0;</p><p>  if(!T->left_child&&!T->right_child) return 1;//僅有根結(jié)點</p><p>  return Leaf(T->left_child)+Leaf(T->right_child);//返回葉子結(jié)點的數(shù)目

25、</p><p><b>  }</b></p><p>  void PreOrder(BiTree &T) //先序遍歷算法 DLR</p><p><b>  {</b></p><p>  if(!T) return ; //遞歸調(diào)用的結(jié)束條件</p><p>

26、;  cout<<T->data<<" "; // 訪問根結(jié)點的數(shù)據(jù)域</p><p>  PreOrder(T->left_child);//先序遞歸遍歷T的左子樹</p><p>  PreOrder(T->right_child);//先序遞歸遍歷T的右子樹</p><p><b>  }

27、</b></p><p>  void InOrder(BiTree &T)//中序遍歷算法 LDR</p><p><b>  {</b></p><p>  if(!T) return ;</p><p>  InOrder(T->left_child);</p><p&

28、gt;  cout<<T->data<<" ";</p><p>  InOrder(T->right_child);</p><p><b>  }</b></p><p>  void PostOrder(BiTree &T)//后序遍歷算法 LRD</p>&l

29、t;p><b>  {</b></p><p>  if(!T) return ;</p><p>  PostOrder(T->left_child);</p><p>  PostOrder(T->right_child);</p><p>  cout<<T->data<&

30、lt;" ";</p><p><b>  }</b></p><p><b>  //非遞歸先序遍歷</b></p><p>  int NRPreOrder(BiTree &T)</p><p>  {BiTree stack[100],p;</p>&

31、lt;p><b>  int top;</b></p><p>  if(T==NULL)</p><p><b>  return 1;</b></p><p><b>  top=-1;</b></p><p><b>  p=T;</b><

32、;/p><p>  while(!(p==NULL&&top==-1)){</p><p>  while(p!=NULL){</p><p>  cout<<p->data<<" ";</p><p>  if(top<100-1)</p><p>

33、<b>  {</b></p><p><b>  top++;</b></p><p>  stack[top]=p;</p><p><b>  }</b></p><p><b>  else{</b></p><p>  c

34、out<<"棧溢出"<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  p=p->left_child;</p><p><b>  }</b>&l

35、t;/p><p>  if(top==-1)</p><p><b>  return 1;</b></p><p><b>  else{</b></p><p>  p=stack[top];</p><p><b>  top--;</b></p

36、><p>  p=p->right_child;</p><p><b>  }</b></p><p><b>  }</b></p><p>  return 1;}</p><p><b>  //非遞歸中序遍歷</b></p>&

37、lt;p>  int NRInOrder(BiTree &T)</p><p>  {BiTree stack[100],p;</p><p><b>  int top;</b></p><p>  if(T==NULL)</p><p><b>  return 1;</b><

38、;/p><p><b>  top=-1;</b></p><p><b>  p=T;</b></p><p>  while(!(p==NULL&&top==-1)){</p><p>  while(p!=NULL){</p><p>  if(top<

39、;100-1)</p><p><b>  {</b></p><p><b>  top++;</b></p><p>  stack[top]=p;</p><p><b>  }</b></p><p><b>  else{</b

40、></p><p>  cout<<"棧溢出"<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  p=p->left_child;</p><p

41、><b>  }</b></p><p>  if(top==-1)</p><p><b>  return 1;</b></p><p><b>  else{</b></p><p>  p=stack[top];</p><p>  cou

42、t<<p->data<<" ";</p><p><b>  top--;</b></p><p>  p=p->right_child;</p><p><b>  }</b></p><p><b>  }</b>&l

43、t;/p><p>  return 1;}</p><p><b>  //層次遍歷</b></p><p>  void LevelOrder(BiTree &T)</p><p>  {BiTree queue[100];</p><p>  int front,rear;</p&g

44、t;<p>  if(T==NULL)</p><p><b>  return;</b></p><p><b>  front=-1;</b></p><p><b>  rear=0;</b></p><p>  queue[rear]=T;</p&g

45、t;<p>  while(front!=rear){</p><p><b>  front++;</b></p><p>  cout<<queue[front]->data<<" ";</p><p>  if(queue[front]->left_child!=NUL

46、L){</p><p><b>  rear++;</b></p><p>  queue[rear]=queue[front]->left_child;</p><p><b>  }</b></p><p>  if(queue[front]->right_child!=NULL)&

47、lt;/p><p><b>  {</b></p><p><b>  rear++;</b></p><p>  queue[rear]=queue[front]->right_child;</p><p><b>  }</b></p><p>&

48、lt;b>  }</b></p><p><b>  }</b></p><p>  //*******************************左右子樹交換*****************************</p><p>  /*將結(jié)點的左右子樹交換*/</p><p>  /*BiT

49、Node *swap(BiTNode &T)</p><p><b>  { </b></p><p>  BiTNode *t,*t1,*t2; </p><p>  if(T==NULL) t=NULL; </p><p><b>  else </b></p><p

50、><b>  { </b></p><p>  t=(BiTNode *)malloc(sizeof(BiTNode)); </p><p>  t->data=T->data; </p><p>  t1=swap(T->left_child); </p><p>  t2=swap(T->

51、;right_child); </p><p>  t->left_child=t2; </p><p>  t->right_child=t1; </p><p><b>  } </b></p><p>  return(t); </p><p><b>  }<

52、/b></p><p>  void print(BiTNode &T) </p><p><b>  { </b></p><p>  if(T!=NULL) </p><p><b>  { </b></p><p>  printf("%

53、c",T->data); </p><p>  if(T->left_child!=NULL||T->right_child!=NULL) </p><p><b>  { </b></p><p>  printf("("); </p><p>  print(b

54、->left_child); </p><p>  if(b->right_child!=NULL)printf(", "); </p><p>  print(b->right_child); </p><p>  printf(")"); </p><p><b>

55、;  } </b></p><p><b>  } </b></p><p><b>  }*/</b></p><p>  int PreOrderTraverse(BiTree T)</p><p><b>  { </b></p><

56、p><b>  if(!T)</b></p><p><b>  return 0;</b></p><p><b>  BiTree t;</b></p><p>  if (T->left_child||T->right_child) </p><p>

57、<b>  {</b></p><p>  t=T->left_child;</p><p>  T->left_child=T->right_child;</p><p>  T->right_child=t;</p><p><b>  }</b></p>

58、<p>  PreOrderTraverse(T->left_child);</p><p>  PreOrderTraverse(T->right_child);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>

59、;<b>  //菜單</b></p><p>  void menu()</p><p>  { cout<<"*****************************************************************************"<<endl;</p><p>

60、  cout<<"<< (主菜單) >>"<<endl;</p><p>  cout<<"********************************************************

61、*********************"<<endl;</p><p>  cout<<"<< 0.建立二叉樹 >>"<<endl;</p><p>  cout<<&

62、quot;<< 1.二叉樹樹深 >>"<<endl;</p><p>  cout<<"<< 2.二叉樹結(jié)點數(shù)

63、 >>"<<endl;</p><p>  cout<<"<< 3.二叉樹的葉子結(jié)點 >>"<<endl;</p><p>  cout<<"<<

64、; 4.二叉樹的先序遍歷 >>"<<endl;</p><p>  cout<<"<< 5.二叉樹的中序遍歷 >>"

65、;<<endl;</p><p>  cout<<"<< 6.二叉樹的后序遍歷 >>"<<endl;</p><p>  cout<<"<<

66、 7.二叉樹的非遞歸先序遍歷 >>"<<endl;</p><p>  cout<<"<< 8.二叉樹的非遞歸中序遍歷 >>"<<endl;</p>

67、;<p>  cout<<"<< 9.二叉樹的層次遍歷 >>"<<endl;</p><p>  cout<<"<< 10.判斷

68、此樹是否是完全二叉樹 >>"<<endl;</p><p>  cout<<"<< 11.左右孩子交換 >>"<<endl;</p><p>  cout&

69、lt;<"<< 12.退出 >>"<<endl;</p><p>  cout<<"************************************************************

70、*****************"<<endl;</p><p><b>  }</b></p><p><b>  //主函數(shù)</b></p><p>  void main()</p><p><b>  { </b></p>&l

71、t;p><b>  int br,a;</b></p><p><b>  BiTree T;</b></p><p>  br=CreateBiTree(T);</p><p><b>  while(1){</b></p><p><b>  menu();

72、</b></p><p>  cout<<"請輸入選擇的命令-->";</p><p><b>  cin>>a;</b></p><p>  if(a>=0||a<=12)</p><p><b>  {</b></p

73、><p>  switch (a){</p><p><b>  case 0:</b></p><p>  {cout<<"建立后的二叉樹為:\n";</p><p>  Output(T);</p><p>  cout<<endl;}</p>

74、;<p>  system("pause");break;</p><p><b>  case 1:</b></p><p>  cout<<"該樹的樹深為: "<<Depth(T)<<endl;</p><p>  system("pause

75、");break;</p><p><b>  case 2:</b></p><p>  cout<<"該樹的結(jié)點數(shù):"<<Node(T)<<endl;</p><p>  system("pause");break;</p><p>

76、;<b>  case 3:</b></p><p>  cout<<"該樹的葉子結(jié)點為:"<<Leaf(T)<<endl;</p><p>  system("pause");break;</p><p><b>  case 4:</b><

77、;/p><p>  {cout<<"該樹以先序遍歷輸出為:\n";</p><p>  PreOrder(T);</p><p>  cout<<endl;}</p><p>  system("pause");break;</p><p><b>

78、  case 5:</b></p><p>  {cout<<"該樹以中序遍歷輸出為:\n";</p><p>  InOrder(T);</p><p>  cout<<endl;}</p><p>  system("pause");break;</p>

79、;<p><b>  case 6:</b></p><p>  {cout<<"該樹以后序遍歷輸出為:\n";</p><p>  PostOrder(T);</p><p>  cout<<endl;}</p><p>  system("pause

80、");break;</p><p><b>  case 7:</b></p><p>  {cout<<"該樹的非遞歸先序遍歷輸出為:\n";</p><p>  NRPreOrder(T);</p><p>  cout<<endl;}</p>&l

81、t;p>  system("pause");break;</p><p><b>  case 8:</b></p><p>  {cout<<"該樹的非遞歸中序遍歷輸出為:\n";</p><p>  NRInOrder(T);</p><p>  cout&l

82、t;<endl;}</p><p>  system("pause");break;</p><p><b>  case 9:</b></p><p>  {cout<<"該樹的層次遍歷:\n";</p><p>  LevelOrder(T);</p&g

83、t;<p>  cout<<endl;}</p><p>  system("pause");break;</p><p><b>  case 10:</b></p><p><b>  {</b></p><p>  LevelOrder1(T);&

84、lt;/p><p>  if(sign==1)</p><p><b>  {</b></p><p>  cout<<"這不是一個完全二叉樹。"<<endl;</p><p><b>  }</b></p><p><

85、b>  else </b></p><p>  cout<<"這是一個完全二叉樹。"<<endl;</p><p><b>  //break;</b></p><p><b>  }</b></p><p>  system("

86、;pause");break;</p><p>  case 11:PreOrderTraverse(T);</p><p>  cout<<"左右孩子已經(jīng)替換成功"<<endl;break;</p><p>  case 12:exit(-1);</p><p><b>  }

87、</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  4運(yùn)行結(jié)果:</b></p><p>  4. 1用二叉鏈表創(chuàng)

88、建二叉樹:</p><p><b>  4.2主菜單 </b></p><p>  4.3求二叉樹樹深:</p><p>  4.4二叉樹結(jié)點數(shù):</p><p>  4.5二叉樹的中序遍歷:</p><p>  4.6二叉樹的層次遍歷:</p><p>  4.7左右孩子

89、交換:</p><p>  4.8左右孩子交換后的中序遍歷:</p><p>  4.9左右孩子交換后的層次遍歷:</p><p>  5. 課程設(shè)計總結(jié):此次課程設(shè)計使我對書本的知識有進(jìn)一步了解。同時也是我知道自己的一些不足,這次課程設(shè)計我是在書本與同學(xué)的幫助下完成的。它并不難,但是我沒有自己獨(dú)自完成是我的錯誤。</p><p><b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論