2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩21頁(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><b>  數(shù)據(jù)結(jié)構(gòu)</b></p><p><b>  課程設(shè)計(jì)說(shuō)明書(shū)</b></p><p>  題目: 二叉樹(shù)的遍歷算法集成 </p><p>  院 系: 計(jì)算機(jī)科學(xué)與工程學(xué)院</p><p>  專業(yè)班級(jí): <

2、/p><p>  學(xué) 號(hào): </p><p>  學(xué)生姓名: </p><p>  指導(dǎo)教師: </p><p>  2010年1月11日</p><p>  課程設(shè)計(jì)(論文)任務(wù)書(shū)<

3、/p><p>  計(jì)算機(jī)科學(xué)與工程 學(xué)院 計(jì)算機(jī)軟件教研室</p><p>  2009年 11 月 16 日 </p><p><b>  目  錄</b></p><p><b>  1、需求分析1</b></

4、p><p><b>  2、概要設(shè)計(jì)2</b></p><p>  2.1 功能設(shè)計(jì)2</p><p>  2.2 算法流程圖3</p><p><b>  3、詳細(xì)設(shè)計(jì)4</b></p><p>  3.1 界面設(shè)計(jì)4</p><p>  3.

5、2 詳細(xì)代碼分析5</p><p>  3.3 調(diào)試分析14</p><p>  3.3.1調(diào)試結(jié)果14</p><p>  3.3.2算法分析18</p><p><b>  4、總結(jié)18</b></p><p><b>  參考文獻(xiàn)19</b></p&g

6、t;<p><b>  1、需求分析</b></p><p>  數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)、信息管理、信息與計(jì)算機(jī)科學(xué)等信息類專業(yè)最重要的專業(yè)基礎(chǔ)課程,掌握好數(shù)據(jù)結(jié)構(gòu)的知識(shí)將直接關(guān)系到后續(xù)專業(yè)課程的學(xué)習(xí)。數(shù)據(jù)結(jié)構(gòu)只要研究四個(gè)方面的問(wèn)題:(1)數(shù)據(jù)的邏輯結(jié)構(gòu),即數(shù)據(jù)之間的邏輯關(guān)系;(2)數(shù)據(jù)的物理結(jié)構(gòu),即數(shù)據(jù)在計(jì)算機(jī)內(nèi)的存儲(chǔ)方式;(3)對(duì)數(shù)據(jù)的加工,即基于某種存儲(chǔ)方式的操作算法;(4)算

7、法的分析;即評(píng)價(jià)算法的優(yōu)劣。</p><p>  本實(shí)驗(yàn)是用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)來(lái)存儲(chǔ)二叉樹(shù)并進(jìn)行一系列的算法,且結(jié)點(diǎn)內(nèi)容的數(shù)據(jù)類型為字符型。</p><p>  本程序用VC++6.0編寫(xiě),可以實(shí)現(xiàn)各種二叉樹(shù)的遍歷。包括先序遍歷、中序遍歷、后序遍歷的遞歸算法,先序遍歷、中序遍歷、后序遍歷的非遞歸算法以及 能查找任一結(jié)點(diǎn)在某種遍歷序列中的前驅(qū)和后繼。</p><p>  根

8、據(jù)題目知,程序主要是根據(jù)給定二叉樹(shù)的先序遍歷結(jié)果,構(gòu)造出二叉樹(shù)并輸出按中,后序遍歷的結(jié)果,以及求二叉樹(shù)的葉子個(gè)數(shù)等。其中二叉樹(shù)的結(jié)點(diǎn)用字符表示。</p><p>  (1) 先創(chuàng)建二叉樹(shù):按先序次序輸入,構(gòu)造二叉鏈表表示的二叉樹(shù)。</p><p>  (2)設(shè)計(jì)算法:先序遍歷,中序遍歷,后序遍歷. 在做到層序遍歷時(shí),應(yīng)注意算法如下:根結(jié)點(diǎn)入隊(duì),隊(duì)頭元素出隊(duì),左孩子不為空入隊(duì)右孩子不為空入隊(duì)

9、的順序進(jìn)行。</p><p>  (3)可以加入求二叉樹(shù)的深度二叉樹(shù)的葉子數(shù)二叉樹(shù)的結(jié)點(diǎn)總數(shù)等一些簡(jiǎn)單的算法 。</p><p>  (4) 設(shè)計(jì)main()函數(shù)調(diào)用以上步驟實(shí)現(xiàn)相關(guān)功能。</p><p><b>  2、概要設(shè)計(jì)</b></p><p><b>  2.1 功能設(shè)計(jì)</b><

10、/p><p> ?。?)typedef struct BTNode</p><p>  定義一個(gè)用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)存儲(chǔ)的二叉樹(shù),其中包括左孩子和右孩子以及數(shù)據(jù)元素的內(nèi)容。和單鏈表類似,一個(gè)二叉鏈表由頭指針唯一確定,若二叉樹(shù)為空,則頭指針指向空。并且結(jié)點(diǎn)內(nèi)容的數(shù)據(jù)類型為字符型。</p><p> ?。?)CreateBiTree(BiTree &T)</p>

11、;<p>  此函數(shù)的功能是構(gòu)建二叉樹(shù)。從鍵盤上按先序次序輸入字符構(gòu)造二叉鏈表表示的二叉樹(shù)T,其中用星號(hào)表示空樹(shù) 。</p><p> ?。?)NRPreOrder(BiTree bt) </p><p>  此函數(shù)的功能是用非遞歸的方法實(shí)現(xiàn)二叉樹(shù)的先序遍歷算法。調(diào)用此函數(shù)可以獲得二叉樹(shù)的非遞歸的先序遍歷的結(jié)果。</p><p>  (4)NRInOr

12、der(BiTree bt)</p><p>  此函數(shù)的功能是用非遞歸的方法實(shí)現(xiàn)二叉樹(shù)的中序遍歷算法。調(diào)用此函數(shù)可以獲得二叉樹(shù)的非遞歸的中序遍歷的結(jié)果。</p><p> ?。?)NRPostOrder(BiTree bt)</p><p>  此函數(shù)的功能是用非遞歸的方法實(shí)現(xiàn)二叉樹(shù)的后序遍歷算法。調(diào)用此函數(shù)可以獲得二叉樹(shù)的非遞歸的后序遍歷的結(jié)果。其中bt是要遍歷

13、樹(shù)的根指針,后序遍歷要求在遍歷完左右子樹(shù)后,再訪問(wèn)根。需要判斷根結(jié)點(diǎn)的左右子樹(shù)是否均遍歷過(guò)??刹捎脴?biāo)記法,結(jié)點(diǎn)入棧時(shí),配一個(gè)標(biāo)志tag一同入棧1:遍歷左子樹(shù)的現(xiàn)場(chǎng)保護(hù),2:遍歷右子樹(shù)前的現(xiàn)場(chǎng)保護(hù)。首先將bt和tag(為1)入棧,遍歷左子樹(shù);返回后,修改棧頂tag為2,遍歷右子樹(shù);最后訪問(wèn)根結(jié)點(diǎn)。</p><p> ?。?)PreOrderTraverse(BiTree T) </p><p&g

14、t;  函數(shù)功能是用遞歸的方法對(duì)二叉樹(shù)進(jìn)行先序遍歷,調(diào)用此函數(shù)可以獲得二叉樹(shù)的遞歸的先序遍歷的結(jié)果。</p><p> ?。?)InOrderTraverse(BiTree T)</p><p>  函數(shù)功能是用遞歸的方法對(duì)二叉樹(shù)進(jìn)行中序遍歷,調(diào)用此函數(shù)可以獲得二叉樹(shù)的遞歸的中序遍歷的結(jié)果。</p><p> ?。?)PostOrderTraverse(BiTree

15、 T)</p><p>  函數(shù)功能是用遞歸的方法對(duì)二叉樹(shù)進(jìn)行后序遍歷,調(diào)用此函數(shù)可以獲得二叉樹(shù)的遞歸的后序遍歷的結(jié)果。</p><p> ?。?)LevelOrderTraverse(BiTree T)</p><p>  調(diào)用此函數(shù)可以獲得二叉樹(shù)的層序遍歷。</p><p> ?。?0)BTDepth(BiTree T)</p>

16、;<p>  求二叉樹(shù)的深度的算法。</p><p> ?。?1)Leaf(BiTree T)</p><p>  求二叉樹(shù)的葉子數(shù)的算法。</p><p> ?。?2)NodeCount(BiTree T)</p><p>  求二叉樹(shù)的結(jié)點(diǎn)總數(shù)的算法。</p><p> ?。?3)main()<

17、/p><p>  主函數(shù)用while()與switch(select)語(yǔ)句對(duì)二叉樹(shù)的操作的算法進(jìn)行了設(shè)計(jì)??梢詫?shí)現(xiàn)以上函數(shù)的功能,并能退出程序。</p><p><b>  2.2 算法流程圖</b></p><p>  先設(shè)計(jì)出二叉樹(shù)的一些算法的函數(shù),如非遞歸遍歷、遞歸遍歷、層次遍歷等一些算法。然后在主函數(shù)中逐一調(diào)用。其中,在求任意結(jié)點(diǎn)在中序遍歷

18、前驅(qū)后繼算法時(shí)利用了遞歸的中序遍歷的算法。</p><p>  算法流程圖如圖1所示。</p><p><b>  圖 1 算法流程圖</b></p><p><b>  3、詳細(xì)設(shè)計(jì)</b></p><p><b>  3.1 界面設(shè)計(jì)</b></p><

19、p>  設(shè)計(jì)的界面如圖2所示。</p><p><b>  圖2 界面</b></p><p>  3.2 詳細(xì)代碼設(shè)計(jì)</p><p><b> ?。?)定義二叉樹(shù)</b></p><p>  用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)存儲(chǔ)二叉樹(shù)。其中,Lchild和Rchild是分別指向該結(jié)點(diǎn)左孩子和右孩子的指針,d

20、ata是數(shù)據(jù)元素的內(nèi)容。定義二叉樹(shù)結(jié)點(diǎn)值的類型為字符型且結(jié)點(diǎn)個(gè)數(shù)不超過(guò)10個(gè)。</p><p>  typedef char ElemType;</p><p>  //結(jié)點(diǎn)個(gè)數(shù)不超過(guò)10個(gè)</p><p>  const int MaxLength=10;</p><p>  typedef struct BTNode{</p>

21、<p>  ElemType data;</p><p>  struct BTNode *lchild,*rchild;</p><p>  }BTNode,* BiTree;(2)查找模塊</p><p><b>  (2)構(gòu)造二叉鏈表</b></p><p>  創(chuàng)建二叉鏈表存儲(chǔ)的二叉樹(shù)。按二叉樹(shù)帶空

22、指針的先序次序輸入結(jié)點(diǎn)值,結(jié)點(diǎn)類型為字符型。按先序次序輸入,其中*表示空結(jié)點(diǎn)。算法是按照先序遍歷思想設(shè)計(jì)的。構(gòu)造二叉鏈表表示的二叉樹(shù)T,星號(hào)表示空樹(shù)。</p><p>  void CreateBiTree(BiTree &T){</p><p><b>  char ch;</b></p><p>  ch=getchar();<

23、;/p><p>  if(ch=='*') T=NULL;</p><p><b>  else{</b></p><p>  if(!(T=(BTNode *)malloc(sizeof(BTNode)))) cout<<"malloc fail!";</p><p>  T

24、->data=ch;</p><p>  CreateBiTree(T->lchild);</p><p>  CreateBiTree(T->rchild);</p><p><b>  }</b></p><p><b>  }</b></p><p>

25、 ?。?)非遞歸的先序遍歷算法</p><p>  函數(shù)功能是用非遞歸的方法對(duì)二叉樹(shù)進(jìn)行先序遍歷。通過(guò)分析可知最后處理過(guò)的結(jié)點(diǎn)的右子樹(shù)應(yīng)該首先被訪問(wèn),最先處理過(guò)的結(jié)點(diǎn)的右子樹(shù)應(yīng)該最后被訪問(wèn),顯然使用??梢越鉀Q問(wèn)題。</p><p>  void NRPreOrder(BiTree bt)</p><p>  {BiTree stack[MaxLength],p;&

26、lt;/p><p><b>  int top;</b></p><p>  if (bt!=NULL){</p><p>  top=0;p=bt;</p><p>  while(p!=NULL||top>0)</p><p>  {while(p!=NULL)</p>&l

27、t;p><b>  {</b></p><p>  cout<<p->data<<' ';</p><p>  stack[top]=p; </p><p><b>  top++;</b></p><p>  p=p->lchild;

28、</p><p><b>  }</b></p><p>  if (top>0)</p><p>  { top--;p=stack[top];p=p->rchild;}</p><p><b>  }</b></p><p><b>  

29、}</b></p><p><b>  }</b></p><p> ?。?)非遞歸的中序遍歷算法</p><p>  此函數(shù)的功能是用非遞歸的方法實(shí)現(xiàn)二叉樹(shù)的中序遍歷算法。調(diào)用此函數(shù)可以獲得二叉樹(shù)的非遞歸的中序遍歷的結(jié)果。用非遞歸調(diào)用也得使用棧。</p><p>  void NRInOrder(BiTre

30、e bt)</p><p>  {BiTree stack[MaxLength],p;</p><p><b>  int top;</b></p><p>  if (bt!=NULL){</p><p>  top=0;p=bt;</p><p>  while(p!=NULL||top&g

31、t;0)</p><p>  {while(p!=NULL)</p><p><b>  {</b></p><p>  stack[top]=p; </p><p><b>  top++;</b></p><p>  p=p->lchild;</p&

32、gt;<p><b>  }</b></p><p>  if (top>0)</p><p>  { top--;p=stack[top];cout<<p->data<<' ';p=p->rchild;}</p><p><b>  }</b>

33、;</p><p><b>  }</b></p><p><b>  }</b></p><p>  (5)非遞歸的后序遍歷算法</p><p>  此函數(shù)的功能是用非遞歸的方法實(shí)現(xiàn)二叉樹(shù)的后序遍歷算法。調(diào)用此函數(shù)可以獲得二叉樹(shù)的非遞歸的后序遍歷的結(jié)果。其中bt是要遍歷樹(shù)的根指針,后序遍歷要求在遍

34、歷完左右子樹(shù)后,再訪問(wèn)根。需要判斷根結(jié)點(diǎn)的左右子樹(shù)是否均遍歷過(guò)??刹捎脴?biāo)記法,結(jié)點(diǎn)入棧時(shí),配一個(gè)標(biāo)志tag一同入棧1:遍歷左子樹(shù)的現(xiàn)場(chǎng)保護(hù),2:遍歷右子樹(shù)前的現(xiàn)場(chǎng)保護(hù)。首先將bt和tag(為1)入棧,遍歷左子樹(shù);返回后,修改棧頂tag為2,遍歷右子樹(shù);最后訪問(wèn)根結(jié)點(diǎn)。</p><p>  typedef struct </p><p><b>  {</b></

35、p><p>  BiTree ptr;</p><p><b>  int tag;</b></p><p>  }stacknode;</p><p>  void NRPostOrder(BiTree bt)</p><p><b>  {</b></p>&l

36、t;p>  stacknode s[MaxLength],x;</p><p>  BiTree p=bt;</p><p><b>  int top;</b></p><p>  if(bt!=NULL){ </p><p>  top=0;p=bt;</p><p><b&g

37、t;  do </b></p><p><b>  {</b></p><p>  while (p!=NULL) </p><p><b>  {</b></p><p>  s[top].ptr = p; </p><p>  s[top].ta

38、g = 1; </p><p><b>  top++;</b></p><p>  p=p->lchild;</p><p><b>  } </b></p><p>  while (top>0 && s[top-1].tag==2) <

39、/p><p><b>  {</b></p><p>  x = s[--top];</p><p>  p = x.ptr;</p><p>  cout<<p->data<<' '; </p><p><b>  }

40、 </b></p><p>  if (top>0)</p><p><b>  {</b></p><p>  s[top-1].tag =2; </p><p>  p=s[top-1].ptr->rchild; </p><p><b&

41、gt;  } </b></p><p>  }while (top>0);}</p><p><b>  }</b></p><p> ?。?)遞歸的先序遍歷</p><p>  函數(shù)功能是用遞歸的方法對(duì)二叉樹(shù)進(jìn)行先序遍歷,調(diào)用此函數(shù)可以獲得二叉樹(shù)的遞歸的先序遍歷的結(jié)果。算法思想:若二叉樹(shù)為空,則

42、結(jié)束遍歷操作;否則訪問(wèn)根結(jié)點(diǎn);先序遍歷根的左子樹(shù);先序遍歷根的右子樹(shù)。</p><p>  void PreOrderTraverse(BiTree T){</p><p><b>  if(T){</b></p><p>  cout<<T->data<<' ';</p><p

43、>  PreOrderTraverse(T->lchild);</p><p>  PreOrderTraverse(T->rchild);</p><p><b>  }</b></p><p><b>  }</b></p><p>  (7)遞歸的中序遍歷</p>

44、<p>  函數(shù)功能是用遞歸的方法對(duì)二叉樹(shù)進(jìn)行中序遍歷。算法思想:若二叉樹(shù)為空,則結(jié)束遍歷操作;否則中序遍歷根的左子樹(shù);訪問(wèn)根結(jié)點(diǎn);中序遍歷根的右子樹(shù)。</p><p>  void InOrderTraverse(BiTree T){</p><p><b>  if(T){</b></p><p>  InOrderTrave

45、rse(T->lchild);</p><p>  cout<<T->data<<' ';</p><p>  a[i]=T->data;</p><p><b>  i++;</b></p><p>  InOrderTraverse(T->rchild)

46、;</p><p><b>  }</b></p><p><b>  }</b></p><p>  (8)遞歸的后序遍歷</p><p>  函數(shù)功能是用遞歸的方法對(duì)二叉樹(shù)進(jìn)行中序遍歷。算法思想:若二叉樹(shù)為空,則結(jié)束遍歷操作;否則后序遍歷根的左子樹(shù);后序遍歷根的右子樹(shù);訪問(wèn)根結(jié)點(diǎn)。</p&

47、gt;<p>  void PostOrderTraverse(BiTree T){</p><p><b>  if(T){</b></p><p>  PostOrderTraverse(T->lchild);</p><p>  PostOrderTraverse(T->rchild);</p>&

48、lt;p>  cout<<T->data<<' ';</p><p><b>  }</b></p><p><b>  }</b></p><p><b> ?。?)層序遍歷</b></p><p>  調(diào)用此函數(shù)可以獲得二

49、叉樹(shù)的層序遍歷。該算法的思想如下:訪問(wèn)根結(jié)點(diǎn),并將該結(jié)點(diǎn)記錄下來(lái);若記錄的所有節(jié)點(diǎn)都已經(jīng)處理完畢,則結(jié)束遍歷操作;否則重復(fù)下列操作。取出記錄中第一個(gè)還沒(méi)有訪問(wèn)孩子的結(jié)點(diǎn),若它有左孩子,則訪問(wèn)做孩子,并記錄下來(lái);若它有右孩子,則訪問(wèn)右孩子,并記錄下來(lái)。</p><p>  void LevelOrderTraverse(BiTree T){</p><p>  BiTree Q[MaxLen

50、gth];</p><p>  int front=0,rear=0;</p><p><b>  BiTree p;</b></p><p><b>  //根結(jié)點(diǎn)入隊(duì)</b></p><p><b>  if(T){ </b></p><p>  Q

51、[rear]=T;</p><p>  rear=(rear+1)%MaxLength;</p><p><b>  } </b></p><p>  while(front!=rear){</p><p><b>  //隊(duì)頭元素出隊(duì)</b></p><p>  p=Q[f

52、ront]; </p><p>  front=(front+1)%MaxLength; </p><p>  cout<<p->data<<' ';</p><p>  //左孩子不為空,入隊(duì)</p><p>  if(p->lchild){ </p><p>

53、;  Q[rear]=p->lchild;</p><p>  rear=(rear+1)%MaxLength;</p><p><b>  }</b></p><p>  //右孩子不為空,入隊(duì)</p><p>  if(p->rchild){ </p><p>  Q[rear]=

54、p->rchild;</p><p>  rear=(rear+1)%MaxLength;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?0)結(jié)點(diǎn)在中

55、序遍歷的前驅(qū)后繼</p><p>  此程序所用的方法并非利用線索二叉樹(shù)。對(duì)整個(gè)二叉樹(shù)進(jìn)行中序遍歷,看看哪個(gè)結(jié)點(diǎn)之后是所求結(jié)點(diǎn)的前驅(qū),則該結(jié)點(diǎn)就是所求結(jié)點(diǎn)的中序前驅(qū)。同樣的也可以得到中序后繼。</p><p>  int i;char a[100];</p><p>  void InOrderTraverse(BiTree T){</p><p

56、><b>  if(T){</b></p><p>  InOrderTraverse(T->lchild);</p><p>  cout<<T->data<<' ';</p><p>  a[i]=T->data;</p><p><b>  

57、i++;</b></p><p>  InOrderTraverse(T->rchild);</p><p><b>  }</b></p><p><b>  }</b></p><p>  上面是利用的二叉樹(shù)的中序遍歷方法來(lái)獲得結(jié)點(diǎn)的信息,再調(diào)用下面語(yǔ)句便可實(shí)現(xiàn)以上功能。在主函

58、數(shù)中應(yīng)用switch()語(yǔ)句。</p><p>  cout<<"\n請(qǐng)輸入您要在中序中查找前驅(qū)后繼的結(jié)點(diǎn)(字符型):\n";</p><p><b>  cin>>c;</b></p><p>  for(j=0;j<i;j++)</p><p><b>  

59、{</b></p><p>  if(a[j]==c)</p><p>  cout<<"結(jié)點(diǎn)的前驅(qū)為:\n"<<a[j-1]<<endl<<"結(jié)點(diǎn)的后繼為:\n"<<a[j+1]; </p><p><b>  }</b&

60、gt;</p><p><b>  break;</b></p><p><b>  3.3 調(diào)試分析</b></p><p><b>  3.3.1調(diào)試結(jié)果</b></p><p><b>  (1)系統(tǒng)界面</b></p><p&g

61、t;  系統(tǒng)主界面如圖3所示。</p><p><b>  圖 3 主界面</b></p><p><b>  (2) 創(chuàng)建二叉樹(shù)</b></p><p>  創(chuàng)建后的二叉樹(shù)如圖4所示。</p><p><b>  圖 4創(chuàng)建二叉樹(shù)</b></p><p&g

62、t; ?。?)二叉樹(shù)的非遞歸遍歷算法(前、中、后)</p><p>  非遞歸遍歷如圖5所示。</p><p>  圖 5二叉樹(shù)的非遞歸遍歷算法(前、中、后)</p><p> ?。?)二叉樹(shù)的遞歸遍歷算法(前、中、后)</p><p>  遞歸遍歷如圖6所示。</p><p>  圖 6二叉樹(shù)的遞歸遍歷算法(前、中、

63、后)</p><p>  (5)二叉樹(shù)的層次遍歷算法</p><p>  層次遍歷如圖7所示。</p><p>  圖 7 二叉樹(shù)的層次遍歷算法</p><p>  (6)求二叉樹(shù)的深度</p><p>  創(chuàng)建后的二叉樹(shù)的深度如圖8所示。</p><p>  圖 8求二叉樹(shù)的深度</p&

64、gt;<p> ?。?)求二叉樹(shù)的葉子結(jié)點(diǎn)</p><p>  求出的結(jié)點(diǎn)的個(gè)數(shù)如圖9所示。</p><p>  圖 9求二叉樹(shù)的葉子結(jié)點(diǎn)</p><p> ?。?)求二叉樹(shù)的結(jié)點(diǎn)總數(shù)</p><p>  求出的結(jié)點(diǎn)總數(shù)如圖10所示。</p><p>  圖 10求二叉樹(shù)的結(jié)點(diǎn)總數(shù)</p>

65、<p>  (9)求結(jié)點(diǎn)在中序遍歷的前驅(qū)后繼</p><p>  任意一結(jié)點(diǎn)的前驅(qū)后繼如圖11所示。</p><p>  圖 11求結(jié)點(diǎn)在中序遍歷的前驅(qū)后繼</p><p><b>  3.3.2算法分析</b></p><p>  本程序按遞歸遍歷所耗費(fèi)的時(shí)間復(fù)雜度為O(n),其所耗費(fèi)的空間復(fù)雜度也為O(n)

66、。</p><p><b>  4、總結(jié) </b></p><p>  雖然都說(shuō)“程序=數(shù)據(jù)結(jié)構(gòu)+算法”,但我在學(xué)習(xí)運(yùn)用數(shù)據(jù)結(jié)構(gòu)編程之前,并沒(méi)能深刻體會(huì)到這一點(diǎn),直到這次課設(shè)實(shí)踐。我感受最深的一點(diǎn)是:以前用C編程,只是注重如何編寫(xiě)函數(shù)能夠完成所需要的功能,似乎沒(méi)有明確的戰(zhàn)術(shù),只是憑單純的意識(shí)和簡(jiǎn)單的語(yǔ)句來(lái)堆砌出一段程序。感覺(jué)有點(diǎn)像張飛打仗,有勇無(wú)謀,只要能完成任務(wù)就

67、行。</p><p>  但現(xiàn)在編程感覺(jué)完全不同了。在編寫(xiě)一個(gè)程序之前,自己能夠綜合考慮各種因素,首先選取自己需要的數(shù)據(jù)結(jié)構(gòu),是樹(shù)還是圖或是別的什么?然后選定一種或幾種存儲(chǔ)結(jié)構(gòu)來(lái)具體的決定后面的函數(shù)的主要風(fēng)格。最后在編寫(xiě)每一個(gè)函數(shù)之前,可以仔細(xì)斟酌比對(duì),挑選出最適合當(dāng)前狀況的算法。這樣,即使在完整的程序還沒(méi)有寫(xiě)出來(lái)之前,自己心中已經(jīng)有了明確的原圖了。這樣無(wú)形中就提高了自己編寫(xiě)的程序的質(zhì)量。</p>

68、<p>  另外,我還體會(huì)到深刻理解數(shù)據(jù)結(jié)構(gòu)的重要性。只有真正理解這樣定義數(shù)據(jù)類型的好處,才能用好這樣一種數(shù)據(jù)結(jié)構(gòu)。了解典型數(shù)據(jù)結(jié)構(gòu)的性質(zhì)是非常有用的,它往往是編寫(xiě)程序的關(guān)鍵。我以前對(duì)遞歸算法一直很害怕,總是看不明白究竟這遞歸是怎么進(jìn)行的。在這次實(shí)驗(yàn)中我終于克服了這一障礙,一次次單步執(zhí)行書(shū)中遞歸函數(shù)的例子,并一遍遍在心中自己默默的走,終于弄明白了,真的是功夫不負(fù)有心人??!同時(shí)我還根據(jù)自己的理解寫(xiě)出了類似的遞歸函數(shù)實(shí)現(xiàn)了新的功能

69、,真是受益良多?。≡谶@次實(shí)驗(yàn)中,我對(duì)參數(shù)的調(diào)用也進(jìn)行了很多種嘗試,已差不多經(jīng)能夠選擇合適的參數(shù)形式來(lái)實(shí)現(xiàn)函數(shù)之間的數(shù)據(jù)傳輸交互了。</p><p>  這次實(shí)驗(yàn)中我也出現(xiàn)過(guò)一些比較嚴(yán)重的錯(cuò)誤。在用鏈表結(jié)構(gòu)編寫(xiě)程序時(shí)我錯(cuò)誤的把一個(gè)定義的一級(jí)指針用二級(jí)指針來(lái)做,結(jié)果出現(xiàn)了一些難以想象的后果。這是我對(duì)基本概念理解的模糊不清造成的。后來(lái)在同學(xué)的指點(diǎn)下我意識(shí)到自己的錯(cuò)誤。不過(guò)收獲也很不少。至少我又掌握了指針的應(yīng)用,。總之,

70、我會(huì)繼續(xù)我的興趣編寫(xiě)程序的,相信在越來(lái)越多的嘗試之后,自己會(huì)不斷進(jìn)步不斷提高的。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 秦鋒. 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版).合肥:中國(guó)科學(xué)技術(shù)大學(xué)出版社,2007 </p><p>  [2] 溫秀梅.Visual C++面象對(duì)象程序設(shè)計(jì)教程與實(shí)驗(yàn).北京:清華大學(xué)出版社2006<

溫馨提示

  • 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)論