網絡系統(tǒng)課程設計--設計出樹結構的相關函數(shù)庫,以便在程序設計中調用_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  《數(shù)據(jù)結構》課程設計報告</p><p>  學 院 專 業(yè) </p><p>  班 級 學 號 </p><p>  學生姓名 *** 指導教師

2、 </p><p>  課程成績 完成日期 2013年7月12日 </p><p><b>  課程設計任務書</b></p><p>  學院 專業(yè) </p><p&g

3、t;  設計出樹結構的相關函數(shù)庫,以便在程序設計中調用</p><p>  學生姓名: 指導老師: </p><p>  摘 要 作為用戶我們極少接觸系統(tǒng)調用,但是我們熟悉C語言,對庫函數(shù)的調用并不陌生。C語言支持一系列庫函數(shù)的調用,而事實上,庫函數(shù)的調用是C語言在較高層次上調用的一種方式,函數(shù)調用是操作系統(tǒng)內核提供給程序員的程序設計界面,它們是內核提供給用戶調用的函數(shù)。

4、使用Microsoft Visual C++ 6.0設計二叉鏈表結構的相關函數(shù)庫,操作系統(tǒng)通過執(zhí)行main函數(shù)開始運行一個C程序。main函數(shù)可以調用C程序中的其他函數(shù)來完成程序的任務,其他函數(shù)也可以互相調用,但其他函數(shù)(非main函數(shù))不能調用main函數(shù)(main函數(shù)只能由操作系統(tǒng)來調用)。</p><p>  關鍵詞 設計函數(shù)庫;C程序的執(zhí)行;C程序的調用;C語言;VC++6.0</p>&l

5、t;p><b>  目錄</b></p><p><b>  1 引 言1</b></p><p>  1.1 課程設計目的1</p><p>  1.2 課程設計要求1</p><p><b>  2問題的描述2</b></p><p>

6、  2.1問題的模型化描述2</p><p><b>  3數(shù)據(jù)結構3</b></p><p>  3.1定義二叉樹結點類型3</p><p><b>  4 模塊劃分3</b></p><p><b>  4.1 入隊3</b></p><p&

7、gt;  4.2 隊列判空3</p><p><b>  4.3 出隊4</b></p><p>  4.4根據(jù)先序遞歸建立二叉樹4</p><p>  4.5遞歸遍歷輸出函數(shù)4</p><p>  4.6層次遍歷輸出算法5</p><p>  4.7 求二叉樹深度得算法5</p

8、><p>  4.8求二叉樹葉子結點數(shù)的算法5</p><p><b>  5 運行程序6</b></p><p>  5.1程序運行結果6</p><p><b>  6 結束語8</b></p><p>  附錄:源程序代碼9</p><p&g

9、t;<b>  1 引 言</b></p><p>  Visual C++6.0由許多組件組成,包括編輯器、調試器以及程序向導AppWizard、類向導Class Wizard等開發(fā)工具。編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼

10、生成;代碼優(yōu)化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發(fā)現(xiàn)有語法錯誤,給出提示信息。將編譯產生的.obj文件和系統(tǒng)庫連接裝配成一個可以執(zhí)行的程序。由于在實際操作中可以直接點擊Build從源程序產生可執(zhí)行程序,將源程序翻譯成可執(zhí)行文件的過程分為編譯和鏈接兩個獨立的步驟,之所以這樣做,主要是因為:在一個較大的復雜項目中,有很多人共同完成一個項目(每個人可能承擔其中一部分模塊),其中有的模塊可能是用匯編語言寫

11、的,有的模塊可能是用VC寫的,有的模塊可能是用VB寫的,有的模塊可能是購買(不是源程序模塊而是目標代碼)或已有的標準庫模塊,因此,各類源程序都需要先各自編譯成目標程序文件,再通過鏈接程序將這些目標程序文件連接裝配成可執(zhí)行文</p><p>  1.1 課程設計目的</p><p> ?。?)使用Microsoft Visual C++6.0 設計二叉鏈表結構的相關函數(shù)庫</p>

12、<p> ?。?)在程序設計中調用設計二叉鏈表結構的相關函數(shù)庫</p><p> ?。?)在程序設計中調用并實現(xiàn)二叉樹的各種基本函數(shù)以及常用函數(shù)。</p><p>  1.2 課程設計要求</p><p>  (1)按要求編寫課程設計報告書,能正確闡述設計結果。</p><p> ?。?)通過課程設計培養(yǎng)學生嚴謹?shù)目茖W態(tài)度,認真

13、的工作作風和團隊協(xié)作精神。</p><p> ?。?)學會文獻檢索的基本方法和綜合運用文獻的能力。</p><p> ?。?)在老師的指導下,要求每個學生獨立完成課程設計的全部內容。</p><p><b>  2.問題的描述</b></p><p>  2.1問題的模型化描述</p><p>&

14、lt;b>  3 數(shù)據(jù)結構</b></p><p>  3.1定義二叉樹結點類型</p><p>  typedef char datatype; </p><p>  typedef struct Node{</p><p>  char data;</p><p>  struct

15、Node * Lchild;</p><p>  struct Node * Rchild;</p><p>  }BiTNode,*BiTree;//二叉樹節(jié)點,二叉鏈表</p><p>  typedef struct QueueNode{</p><p>  BiTree data;</p><p>  stru

16、ct QueueNode *next;</p><p>  }LinkQueueNode;//隊列中的每個節(jié)點</p><p>  typedef struct</p><p><b>  {</b></p><p>  LinkQueueNode *front;</p><p>  LinkQu

17、eueNode *rear;</p><p>  }LinkQueue;//隊列</p><p><b>  4.模塊劃分</b></p><p><b>  4.1入隊</b></p><p>  void InitQueue(LinkQueue *Q)</p><p>&

18、lt;b>  {</b></p><p>  Q->front = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));</p><p>  if(Q->front != NULL){</p><p>  Q->rear = Q->front;</p><p>

19、;  Q->front->next = NULL;</p><p>  }else printf("分配空間失敗!\n");</p><p><b>  }</b></p><p><b>  4.2隊列判空</b></p><p>  void EnterQueue

20、(LinkQueue *Q,BiTree x)</p><p><b>  {</b></p><p>  LinkQueueNode *NewNode;</p><p>  NewNode = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));</p><p>  if(Ne

21、wNode != NULL){</p><p>  NewNode->data = x;</p><p>  NewNode->next = NULL;</p><p>  Q->rear->next = NewNode;</p><p>  Q->rear = NewNode;</p><p

22、><b>  }</b></p><p><b>  4.3出隊</b></p><p>  int QueueIsEmpty(LinkQueue *Q)</p><p><b>  {</b></p><p>  if(Q->front == Q->rear

23、)</p><p><b>  return 1;</b></p><p>  else return 0;</p><p><b>  }</b></p><p>  4.4根據(jù)先序遞歸建立二叉樹</p><p>  void DeleteQueue(LinkQueue *

24、Q,BiTree *x)</p><p><b>  {</b></p><p>  LinkQueueNode *p;</p><p>  if(Q->front == Q->rear)</p><p><b>  return ;</b></p><p>  

25、p= Q->front->next;</p><p>  Q->front->next = p->next;</p><p>  if(Q->rear == p)</p><p>  Q->rear = Q->front;</p><p>  *x = p->data;</p>

26、<p><b>  free(p);</b></p><p>  4.5遞歸遍歷輸出函數(shù) </p><p>  void CreateBiTree(BiTree *bt)</p><p><b>  {</b></p><p><b>  char ch;<

27、/b></p><p>  ch = getchar();</p><p>  if(ch == '.') *bt = NULL;</p><p><b>  else</b></p><p><b>  {</b></p><p>  *bt = (B

28、iTree)malloc (sizeof(BiTNode));</p><p>  (*bt)->data = ch;</p><p>  CreateBiTree(&((*bt)->Lchild));</p><p>  CreateBiTree(&((*bt)->Rchild));</p><p><

29、;b>  }</b></p><p><b>  }</b></p><p>  /*先序遞歸遍歷二叉樹*/</p><p>  void PreOrder(BiTree root)</p><p><b>  {</b></p><p>  if(root

30、 != NULL){</p><p>  printf("%c ",root->data);</p><p>  PreOrder(root->Lchild);</p><p>  PreOrder(root->Rchild);</p><p><b>  }</b></p&g

31、t;<p><b>  }</b></p><p>  /*后序遞歸遍歷二叉樹 */</p><p>  4.6層次遍歷輸出算法</p><p>  void PostOrder(BiTree root)</p><p><b>  {</b></p><p>

32、  if(root != NULL){</p><p>  PostOrder(root -> Lchild);</p><p>  PostOrder(root -> Rchild);</p><p>  printf("%c ",root->data);</p><p><b>  }<

33、;/b></p><p><b>  }</b></p><p>  void InOrder(BiTree root)</p><p><b>  {</b></p><p>  if(root != NULL){</p><p>  InOrder(root->

34、;Lchild);</p><p>  printf("%c ",root->data);</p><p>  InOrder(root->Rchild);</p><p><b>  }</b></p><p><b>  }</b></p><

35、p>  4.7求二叉樹深度得算法</p><p>  void depth(BiTree root,int &dep)</p><p>  { int dep1,dep2;</p><p>  if(!root) dep=0;</p><p><b>  else</b></p><

36、;p>  {depth(root->Lchild,dep1);</p><p>  depth(root->Rchild,dep2);</p><p>  dep=dep1>dep2?dep1+1:dep2+1;</p><p><b>  }</b></p><p><b>  }&l

37、t;/b></p><p>  4.8求二叉樹葉子結點數(shù)的算法</p><p>  void countleaf(BiTree root,int&n)</p><p>  { if (root)</p><p><b>  {</b></p><p>  countleaf(roo

38、t->Lchild,n);</p><p>  if(!root->Lchild && !root->Rchild) n++;</p><p>  countleaf(root->Rchild,n);</p><p><b>  }</b></p><p><b>  

39、}</b></p><p><b>  5 運行程序</b></p><p>  5.1 程序運行結果</p><p><b>  7 結束語</b></p><p>  本次課程設計為時二周,我選的課題是設計出樹結構的相關函數(shù)庫,以便在程序設計中的調用。其主要研究內容在于實現(xiàn)了二叉鏈表

40、的相關函數(shù)庫的調用。為了實現(xiàn)以鏈表為存儲結構的二叉樹的有關操作,要熟練掌握二叉鏈表的特性,但對于一些算法較為復雜,代碼量多些,容易出現(xiàn)一些變量的定義、函數(shù)聲明、函數(shù)調用等細節(jié)上的問題出錯。在本程序的設計過程中,為了克服以上困難,采取了一些措施:建立清晰的程序設計的步驟方法,分步各個模塊程序設計,進行仔細的總體結構設計,反復調試、細心觀察達到完善整個系統(tǒng)等。二叉樹的遞歸算法主要是將二叉樹存儲到鏈表結構中。遍歷是二叉樹各種操作的基礎,先序、

41、中序、后序是二叉樹遍歷的三種基本遍歷方法。而這些都是數(shù)據(jù)結構的基礎內容,是我們必須理解和牢記的基礎知識。將這些基礎算法綜合起來,更能清晰地認識和理解各種算法的作用。當然,要學會編程不會僅局限于課本知識,而是根據(jù)課本知識進行有效的拓展,并且不得不學會在眾多的參考資料中搜索有用的自己所需的知識,并迫使自己去學習掌握它們,從中不斷提高自己。雖然程序規(guī)模不大,我們依然為此付出了努力,仍免不了各種錯誤的出現(xiàn)。編程過程需要很大的毅力和耐心,而且要有

42、良好</p><p><b>  參考文獻</b></p><p>  [1] 嚴蔚敏. 數(shù)據(jù)結構(C語言版)[M]. 北京:清華大學出版社,1997.</p><p>  [2]譚浩強. C程序設計(第三版)[M]. 北京:清華大學出版社,2005.1. </p><p><b>  附錄:源程序代碼<

43、/b></p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p>  typedef struct Node{</p><p>  char data;</p><p>  struct Node * Lchild;&

44、lt;/p><p>  struct Node * Rchild;</p><p>  }BiTNode,*BiTree;//二叉樹節(jié)點,二叉鏈表</p><p>  typedef struct QueueNode{</p><p>  BiTree data;</p><p>  struct QueueNode *n

45、ext;</p><p>  }LinkQueueNode;//隊列中的每個節(jié)點</p><p>  typedef struct</p><p><b>  {</b></p><p>  LinkQueueNode *front;</p><p>  LinkQueueNode *rear;&

46、lt;/p><p>  }LinkQueue;//隊列</p><p>  /* 隊列的初始化 */</p><p>  void InitQueue(LinkQueue *Q)</p><p><b>  {</b></p><p>  Q->front = (LinkQueueNode *)

47、malloc(sizeof(LinkQueueNode));</p><p>  if(Q->front != NULL){</p><p>  Q->rear = Q->front;</p><p>  Q->front->next = NULL;</p><p>  }else printf("分配

48、空間失敗!\n");</p><p><b>  }</b></p><p><b>  /* 入隊 */</b></p><p>  void EnterQueue(LinkQueue *Q,BiTree x)</p><p><b>  {</b></p&g

49、t;<p>  LinkQueueNode *NewNode;</p><p>  NewNode = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));</p><p>  if(NewNode != NULL){</p><p>  NewNode->data = x;</p><

50、;p>  NewNode->next = NULL;</p><p>  Q->rear->next = NewNode;</p><p>  Q->rear = NewNode;</p><p><b>  }</b></p><p><b>  }</b></

51、p><p><b>  /* 隊列判空*/</b></p><p>  int QueueIsEmpty(LinkQueue *Q)</p><p><b>  {</b></p><p>  if(Q->front == Q->rear)</p><p><b

52、>  return 1;</b></p><p>  else return 0;</p><p><b>  }</b></p><p><b>  /* 出隊*/</b></p><p>  void DeleteQueue(LinkQueue *Q,BiTree *x)<

53、;/p><p><b>  {</b></p><p>  LinkQueueNode *p;</p><p>  if(Q->front == Q->rear)</p><p><b>  return ;</b></p><p>  p= Q->front-

54、>next;</p><p>  Q->front->next = p->next;</p><p>  if(Q->rear == p)</p><p>  Q->rear = Q->front;</p><p>  *x = p->data;</p><p><

55、b>  free(p);</b></p><p><b>  }</b></p><p>  /* 利用擴展先序遍歷序列</p><p><b>  創(chuàng)建二叉鏈表*/</b></p><p>  void CreateBiTree(BiTree *bt)</p>&l

56、t;p><b>  {</b></p><p><b>  char ch;</b></p><p>  ch = getchar();</p><p>  if(ch == '.') *bt = NULL;</p><p><b>  else</b>&

57、lt;/p><p><b>  {</b></p><p>  *bt = (BiTree)malloc (sizeof(BiTNode));</p><p>  (*bt)->data = ch;</p><p>  CreateBiTree(&((*bt)->Lchild));</p>

58、<p>  CreateBiTree(&((*bt)->Rchild));</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*先序遞歸遍歷二叉樹*/</p><p>  void PreOrder(BiTree root)

59、</p><p><b>  {</b></p><p>  if(root != NULL){</p><p>  printf("%c ",root->data);</p><p>  PreOrder(root->Lchild);</p><p>  PreO

60、rder(root->Rchild);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*后序遞歸遍歷二叉樹 */</p><p>  void PostOrder(BiTree root)</p><p><

61、b>  {</b></p><p>  if(root != NULL){</p><p>  PostOrder(root -> Lchild);</p><p>  PostOrder(root -> Rchild);</p><p>  printf("%c ",root->dat

62、a);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void InOrder(BiTree root)</p><p><b>  {</b></p><p>  if(root != NULL){

63、</p><p>  InOrder(root->Lchild);</p><p>  printf("%c ",root->data);</p><p>  InOrder(root->Rchild);</p><p><b>  }</b></p><p>

64、;<b>  }</b></p><p><b>  /* 層序遍歷</b></p><p>  對給定的二叉樹進行層序遍歷 */</p><p>  void LayerOrder(BiTree root)</p><p><b>  {</b></p>&

65、lt;p>  BiTree *x;</p><p>  //這里要記得申請空間</p><p>  x = (BiTree *)malloc(sizeof(BiTree));</p><p>  if(x == NULL){</p><p>  printf("內存分配失敗!\n");</p><

66、p><b>  }</b></p><p>  LinkQueue *Q;</p><p>  Q = (LinkQueue *)malloc(sizeof(LinkQueue));</p><p>  InitQueue(Q);</p><p>  EnterQueue(Q,root);</p>&

67、lt;p>  while(!QueueIsEmpty(Q)){</p><p>  DeleteQueue(Q,x);</p><p>  printf("%c ",(*x)->data);</p><p>  if((*x)->Lchild)EnterQueue(Q,(*x)->Lchild);</p>&

68、lt;p>  if((*x)->Rchild)EnterQueue(Q,(*x)->Rchild);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void countleaf(BiTree root,int&n)</p>&l

69、t;p>  { if (root)</p><p><b>  {</b></p><p>  countleaf(root->Lchild,n);</p><p>  if(!root->Lchild && !root->Rchild) n++;</p><p>  count

70、leaf(root->Rchild,n);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void depth(BiTree root,int &dep)</p><p>  { int dep1,dep2;</p>

71、;<p>  if(!root) dep=0;</p><p><b>  else</b></p><p>  {depth(root->Lchild,dep1);</p><p>  depth(root->Rchild,dep2);</p><p>  dep=dep1>dep2?d

72、ep1+1:dep2+1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  int main(int argc , char **argv)</p><p><b>  {</b></p><p>  

73、int n=0,dep;</p><p>  BiTree root;</p><p>  CreateBiTree(&root);</p><p>  printf("先序遞歸遍歷:\n");</p><p>  PreOrder(root);</p><p>  printf("

74、;\n");</p><p>  printf("中序遞歸遍歷:\n");</p><p>  InOrder(root);</p><p>  printf("\n");</p><p>  printf("后序遞歸遍歷:\n");</p><p>

75、;  PostOrder(root);</p><p>  printf("\n");</p><p>  printf("層序遍歷:\n");</p><p>  LayerOrder(root);</p><p>  printf("\n");</p><p&

76、gt;  depth(root,dep);</p><p>  printf("深度dep=%d\n",dep);</p><p>  countleaf(root,n);</p><p>  printf("葉子結點數(shù)n=%d\n",n);</p><p>  printf("\n"

溫馨提示

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

評論

0/150

提交評論