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

下載本文檔

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

文檔簡介

1、<p>  《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告</p><p>  學(xué) 院 專 業(yè) </p><p>  班 級 學(xué) 號 </p><p>  學(xué)生姓名 *** 指導(dǎo)教師

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

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

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

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

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

7、gt;  4.2 隊(duì)列判空3</p><p><b>  4.3 出隊(duì)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求二叉樹葉子結(jié)點(diǎn)數(shù)的算法5</p><p><b>  5 運(yùn)行程序6</b></p><p>  5.1程序運(yùn)行結(jié)果6</p><p><b>  6 結(jié)束語8</b></p><p>  附錄:源程序代碼9</p><p&g

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

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

11、的,有的模塊可能是用VC寫的,有的模塊可能是用VB寫的,有的模塊可能是購買(不是源程序模塊而是目標(biāo)代碼)或已有的標(biāo)準(zhǔn)庫模塊,因此,各類源程序都需要先各自編譯成目標(biāo)程序文件,再通過鏈接程序?qū)⑦@些目標(biāo)程序文件連接裝配成可執(zhí)行文</p><p>  1.1 課程設(shè)計(jì)目的</p><p>  (1)使用Microsoft Visual C++6.0 設(shè)計(jì)二叉鏈表結(jié)構(gòu)的相關(guān)函數(shù)庫</p>

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

13、的工作作風(fēng)和團(tuán)隊(duì)協(xié)作精神。</p><p> ?。?)學(xué)會文獻(xiàn)檢索的基本方法和綜合運(yùn)用文獻(xiàn)的能力。</p><p> ?。?)在老師的指導(dǎo)下,要求每個(gè)學(xué)生獨(dú)立完成課程設(shè)計(jì)的全部內(nèi)容。</p><p><b>  2.問題的描述</b></p><p>  2.1問題的模型化描述</p><p>&

14、lt;b>  3 數(shù)據(jù)結(jié)構(gòu)</b></p><p>  3.1定義二叉樹結(jié)點(diǎn)類型</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é)點(diǎn),二叉鏈表</p><p>  typedef struct QueueNode{</p><p>  BiTree data;</p><p>  stru

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

17、eueNode *rear;</p><p>  }LinkQueue;//隊(duì)列</p><p><b>  4.模塊劃分</b></p><p><b>  4.1入隊(duì)</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隊(duì)列判空</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出隊(duì)</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求二叉樹葉子結(jié)點(diǎn)數(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 運(yùn)行程序</b></p><p>  5.1 程序運(yùn)行結(jié)果</p><p><b>  7 結(jié)束語</b></p><p>  本次課程設(shè)計(jì)為時(shí)二周,我選的課題是設(shè)計(jì)出樹結(jié)構(gòu)的相關(guān)函數(shù)庫,以便在程序設(shè)計(jì)中的調(diào)用。其主要研究內(nèi)容在于實(shí)現(xiàn)了二叉鏈表

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

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

42、良好</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 嚴(yán)蔚敏. 數(shù)據(jù)結(jié)構(gòu)(C語言版)[M]. 北京:清華大學(xué)出版社,1997.</p><p>  [2]譚浩強(qiáng). C程序設(shè)計(jì)(第三版)[M]. 北京:清華大學(xué)出版社,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é)點(diǎn),二叉鏈表</p><p>  typedef struct QueueNode{</p><p>  BiTree data;</p><p>  struct QueueNode *n

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

46、lt;/p><p>  }LinkQueue;//隊(duì)列</p><p>  /* 隊(duì)列的初始化 */</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>  /* 入隊(duì) */</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>  /* 隊(duì)列判空*/</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>  /* 出隊(duì)*/</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>  /* 利用擴(kuò)展先序遍歷序列</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>  對給定的二叉樹進(jìn)行層序遍歷 */</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èi)存分配失敗!\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("葉子結(jié)點(diǎn)數(shù)n=%d\n",n);</p><p>  printf("\n"

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論