數據結構課程設計(二叉排序樹的相關操作)_第1頁
已閱讀1頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  數據結構課程設計報告</p><p>  課程設計題目:二叉排序樹的相關操作 </p><p><b>  學生姓名 : </b></p><p><b>  專 業(yè) :</b></p><p><b>  班 級 : </b>

2、</p><p><b>  學 號 : </b></p><p><b>  指導教師 :</b></p><p>  2012年06月23日</p><p><b>  摘要:</b></p><p>  數據結構是研究數據之間關系的一門科學,

3、我們稱這一關系為數據的邏輯結構,簡稱數據結構。當數據的邏輯結構確定以后,數據在物理空間中的存儲方式,稱為數據的存儲結構。同一邏輯結構可以具有不同的存儲結構,因而有不同的算法。本次課程設計,程序中的數據采用“二叉樹結構”。具體采用的是“二叉排序樹”,并且使用“一維數組”作為其存儲結構。一維數組順序表存儲結構是用一組地址連續(xù)的存儲單元依次自左而右、自上而下存儲二叉排序樹的結點元素;本課程設計實現了二叉排序樹的創(chuàng)建、查找、插入、刪除,中序遍歷

4、輸出等基本操作,完美地實現了二叉排序樹的大部分功能。</p><p>  關鍵詞:二叉排序樹的創(chuàng)建;中序遍歷輸出;插入結點;查找結點;刪除結點</p><p><b>  課程設計目的:</b></p><p>  課程設計為學生提供了一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結合起來,鍛煉學生的分析解決實際問題的能力。提

5、高學生適應實際,實踐編程的能力。</p><p><b>  內容設計要求:</b></p><p>  二叉排序樹的相關操作</p><p>  要求:完成二叉排序樹的建立、查詢、插入和刪除操作</p><p><b>  三、概要設計:</b></p><p><b

6、>  1.菜單設計:</b></p><p>  為了實現二叉排序樹相關操作的管理,設計一個包含多個子菜單項的主菜單,子程序以鏈接系統(tǒng)的各項子功能,方便用戶使用本程序。本系統(tǒng)主菜單界面如下圖所示:</p><p><b>  2.存儲結構設計:</b></p><p>  用二叉鏈式存儲類型存儲二叉樹的結點結構。二叉樹的鏈表中

7、結點至少包含3個域:數據域、左孩子指針域和右孩子指針域。</p><p>  typedef struct bitreenode// 二叉樹結點結構類型</p><p><b>  {</b></p><p><b>  int data;</b></p><p>  struct bitreeno

8、de *lchild;</p><p>  struct bitreenode *rchild;</p><p>  } bitreenode ,*bitree;</p><p>  3. 系統(tǒng)功能設計:</p><p>  本系統(tǒng)設置了5子功能菜單,5個子功能的設計描述如下。</p><p>  建立二叉排序樹,由函

9、數void createbst( )來實現。</p><p>  查找節(jié)點,由函數int searchbst(bitree root,int data)來實現。</p><p>  插入節(jié)點,由函數void insertbst(bitree *root,int data)來實現。</p><p>  刪除節(jié)點,由函數bitreenode *deletebst(bi

10、tree t,int k)來實現。</p><p><b>  四、目與流程圖:</b></p><p>  題目: 二叉排序樹的相關操作</p><p><b>  流程圖:</b></p><p><b>  五、運行結果:</b></p><p>

11、<b>  1.創(chuàng)建二叉樹:</b></p><p><b>  查找結點:</b></p><p><b>  插入結點:</b></p><p><b>  刪除結點:</b></p><p><b>  退出:</b></

12、p><p><b>  六、小結:</b></p><p>  經過一個星期的課程設計,過程曲折可謂一語難盡。整天都是對著電腦,不然就是翻閱資料。在此期間我失落過,也曾一度熱情高漲。點點滴滴令我回味無窮。這次課程設計使我體會到只有做到細心耐心,恒心才能做好一件事。</p><p>  這次的課程設計,加強了我們動手、思考和解決問題的能力。鞏固和加深

13、了對數據結構的理解,提高綜合運用本課程所學知識的能力,培養(yǎng)了我查找參考書,及文獻資料的能力。培養(yǎng)獨立思考,深入研究,分析問題、解決問題的能力。通過實際編譯系統(tǒng)的分析設計、編程調試,掌握應用軟件的分析方法和工程設計方法。通過課程設計,培養(yǎng)了我嚴肅認真的學習態(tài)度,逐步建立正確的局部觀念和全局觀念的關系。而且做課程設計同時也是對課本知識的鞏固和加強,平時看課本時,有些問題就不是很能理解,做完課程設計,那些問題就迎刃而解了。認識來源于實踐,實踐

14、是認識的動力和最終目的,實踐是檢驗真理的唯一標準。所以這個期末測試之后的課程設計對我們的作用是非常大的。</p><p>  這次的課程設計使我懂得了理論與實際相結合是很非常重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,從實踐中檢驗理論,從而提高自己的實際動手能力和獨立思考的能力。在整個設計過程中,構思是很重要的。調試時經常會遇到這樣那樣的錯誤,有的是因為粗心造成的語法

15、錯誤。當然,也有方法錯誤之類的,總是需要花費很多時間來檢查錯誤。同時在設計的過程中發(fā)現了自己的許多不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。</p><p>  每個細節(jié)問題通常都要花費很長的時間才能理清程序的思路,而且要不斷的調試程序才能把程序調試正確,同時還要做到界面的輸出也是需要美化的。這次課程設計終于順利完成了。</p><p>  通過這次的課程設計,讓我更加了

16、解到數據結構的重要性。此次課程設計,學到了很多課內學不到的東西,比如獨立思考解決問題的能力,出現差錯的隨機應變能力,這些都讓我受益非淺,今后的制作應該能夠更輕松。</p><p><b>  附錄:</b></p><p><b>  1.源代碼:</b></p><p>  # include<stdio.h>

17、;</p><p>  # include<stdlib.h></p><p>  #define null 0</p><p>  typedef struct bitreenode</p><p><b>  {</b></p><p><b>  int data;&l

18、t;/b></p><p>  struct bitreenode *lchild;</p><p>  struct bitreenode *rchild;</p><p>  }bitreenode,*bitree;</p><p>  int searchbst(bitree root,int data)</p>&

19、lt;p><b>  {</b></p><p><b>  bitree p;</b></p><p><b>  p=root;</b></p><p><b>  while(p)</b></p><p><b>  {</b&

20、gt;</p><p>  if (p->data==data)</p><p>  return p->data;</p><p>  if(p->data>data)</p><p>  p=p->lchild;</p><p>  else p=p->rchild;</p

21、><p><b>  }</b></p><p>  return 1000;</p><p><b>  }</b></p><p>  void insertbst(bitree *root,int data)</p><p><b>  {</b>&l

22、t;/p><p><b>  bitree s;</b></p><p>  if(*root==null)</p><p><b>  {</b></p><p>  s=(bitree)malloc(sizeof(bitreenode));</p><p>  s->d

23、ata=data;</p><p>  s->lchild=s->rchild=null;</p><p><b>  *root=s;</b></p><p><b>  }</b></p><p>  else if(data<(*root)->data)</p&g

24、t;<p>  insertbst(&((*root)->lchild),data);</p><p>  else if(data>(*root)->data)</p><p>  insertbst(&((*root)->rchild),data);</p><p><b>  }</b>

25、;</p><p>  void display(bitree root)</p><p><b>  {</b></p><p>  if(root!=null)</p><p><b>  {</b></p><p>  display(root->lchild);

26、</p><p>  printf("%5d",root->data);</p><p>  display(root->rchild);</p><p><b>  }</b></p><p><b>  }</b></p><p>  bi

27、treenode *deletebst(bitree t,int k)</p><p><b>  {</b></p><p>  bitreenode *p,*f,*s,*q;</p><p><b>  p=t;</b></p><p><b>  f=null;</b>&

28、lt;/p><p><b>  while(p)</b></p><p><b>  {</b></p><p>  if(p->data==k) break;</p><p><b>  f=p;</b></p><p>  if(p->dat

29、a>k)</p><p>  p=p->lchild;</p><p>  else p=p->rchild;</p><p><b>  }</b></p><p>  if(p==null)</p><p><b>  {</b></p>

30、<p>  printf("The key to search does not exist!\n");</p><p><b>  return t;</b></p><p><b>  }</b></p><p>  if(p->lchild==null)</p>&l

31、t;p><b>  {</b></p><p>  if(f==null)</p><p>  t=p->rchild;</p><p>  else if(f->lchild==p)</p><p>  f->lchild=p->rchild;</p><p>  

32、else f->rchild=p->rchild;</p><p><b>  free(p);</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p&

33、gt;<p><b>  q=p;</b></p><p>  s=p->lchild;</p><p>  while(s->rchild)</p><p><b>  {</b></p><p><b>  q=s;</b></p>

34、<p>  s=s->rchild;</p><p><b>  }</b></p><p><b>  if(q==p)</b></p><p>  q->lchild=s->lchild;</p><p>  else q->rchild=s->lchil

35、d;</p><p>  p->data=s->data;</p><p><b>  free(s);</b></p><p><b>  }</b></p><p><b>  return t;</b></p><p><b>

36、;  }</b></p><p>  void createbst(bitree *root)</p><p><b>  {</b></p><p><b>  int data;</b></p><p>  *root=null;</p><p>  prin

37、tf("Please input the data: ");</p><p>  scanf("%d",&data);</p><p>  while(data!=1000)</p><p>  { insertbst(root,data);</p><p>  scanf("%d&q

38、uot;,&data);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void table()</p><p><b>  {</b></p><p>  printf("\t**

39、***********Welcome to use!*************\n");</p><p>  printf("\t* 1. create bitree *\n");</p><p>  printf("\t* 2. search bitreenode *\n&

40、quot;);</p><p>  printf("\t* 3. insert bitreenode *\n");</p><p>  printf("\t* 4. delete bitreenode *\n");</p><p>  printf("

41、;\t* 0. exit *\n");</p><p>  printf("\t*****************************************\n");</p><p><b>  }</b></p><p>  void main()

42、</p><p><b>  {</b></p><p>  int data,menu;bitree root;</p><p><b>  table();</b></p><p>  printf("Please input your action number(0-4):"

43、;);</p><p>  scanf("%d",&menu);</p><p>  while(!(menu>=0 && menu<=4))</p><p><b>  {</b></p><p>  printf("Your choice number

44、 is not exist,please choose your act number again(0-4):");</p><p>  scanf("%d",&menu);</p><p><b>  }</b></p><p>  while(menu!=0)</p><p>&

45、lt;b>  {</b></p><p>  switch(menu)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p><b>  {</b></p><p>  printf

46、("create bitree(1000 is the end number): \n");</p><p>  createbst(&root);</p><p>  display(root);</p><p>  printf("\n");</p><p><b>  table

47、();</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 2:</b></p><p><b>  {</b></p><p>  p

48、rintf("Please input key word which you want to search:");</p><p>  scanf("%d",&data);</p><p>  printf("%d\n",searchbst(root,data));</p><p>  printf

49、("(1000 stand for failing to search the key number)\n");</p><p><b>  table();</b></p><p><b>  break;</b></p><p><b>  }</b></p>&

50、lt;p><b>  case 3:</b></p><p><b>  {</b></p><p>  printf("Please the key word you want to insert:");</p><p>  scanf("%d",&data);<

51、;/p><p>  insertbst(&root,data);</p><p>  display(root);</p><p>  printf("\n");table();</p><p><b>  break;</b></p><p><b>  }&l

52、t;/b></p><p><b>  case 4:</b></p><p><b>  {</b></p><p>  printf("Please input the key word you want to delete:");</p><p>  scanf(&q

53、uot;%d",&data);</p><p>  deletebst(root,data);</p><p>  display(root);</p><p>  printf("\n");table();</p><p><b>  break;</b></p>&

54、lt;p><b>  }</b></p><p><b>  }</b></p><p>  printf("please continue to choose your action number:");</p><p>  scanf("%d",&menu);<

溫馨提示

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

評論

0/150

提交評論