狼追兔子數(shù)據(jù)結構課程設計_第1頁
已閱讀1頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  游戲算法實踐報告</b></p><p><b>  目錄</b></p><p>  1 問題定義與描述3</p><p>  1.1 問題定義3</p><p>  1.2 問題描述3</p><p><b>  2 關鍵技術

2、3</b></p><p><b>  3 數(shù)據(jù)的組織3</b></p><p>  3.1數(shù)據(jù)類型定義3</p><p>  3.2數(shù)據(jù)存儲結構4</p><p><b>  4 總體設計4</b></p><p>  4.1 系統(tǒng)模塊圖4</

3、p><p>  4.2棧的基本操作4</p><p>  4.3順序表的基本操作4</p><p><b>  5 詳細設計5</b></p><p>  5.1順序存儲的線性表5</p><p>  6 測試結果及分析7</p><p><b>  7 心

4、得體會8</b></p><p><b>  附錄:程序代碼9</b></p><p><b>  1問題定義與描述</b></p><p><b>  1.1 問題定義</b></p><p>  現(xiàn)實中很多利用順序表,棧解決一些數(shù)學模型問題</p>

5、;<p><b>  1.2 問題描述</b></p><p>  圍繞著山頂有10個圓形排列的洞,狐貍要吃兔子,兔子說:“可以,但必須找到我,我就藏身于這十個洞中,你可以先到1號洞找我,第二次隔一個洞(即3號洞)找,第三次隔兩個洞(即6號洞)找,以后如此類推,次數(shù)不限?!钡倧脑绲酵磉M進出出1000次,但仍沒有找到兔子,問兔子究竟藏身于哪個洞里</p><

6、;p><b>  2.關鍵技術</b></p><p>  順序表一次申請多個空間,包括結構體定義的。N為整數(shù),這樣得到的就是N個連續(xù)的空間。順序表可以利用類似于數(shù)組的形式訪問,即通過下標訪問。當然定義的變量類型必須是指針類型的,很方便,當然也可以通過像鏈表一樣的訪問。單鏈表只是將空間分散開了,這樣的優(yōu)點就是動態(tài)申請,需要多少就申請多少,一般一次申請一個空間結點,即N=1。</p

7、><p><b>  3 數(shù)據(jù)的組織</b></p><p><b>  3.1數(shù)據(jù)類型定義</b></p><p>  數(shù)據(jù)結構,順序表,棧,單鏈表,數(shù)組。在程序設計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。在C語言中, 數(shù)組屬于構造數(shù)據(jù)類型。一個數(shù)組可以分解

8、為多個數(shù)組元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構造類型。因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結構數(shù)組等各種類別。</p><p><b>  3.2數(shù)據(jù)存儲結構</b></p><p>  棧以順序結構實現(xiàn),隊列以鏈表結構實現(xiàn)。順序存儲,大概意思就是把邏輯上相鄰的結點存儲在物理位置上相鄰的存儲單元里,結點間邏輯關系由存儲單元的鄰接關

9、系來體現(xiàn)主要用在線性的數(shù)據(jù)結構</p><p><b>  4總體設計</b></p><p>  4.1 順序表系統(tǒng)模塊圖</p><p>  圖4.1 順序表系統(tǒng)模塊圖</p><p><b>  4.2棧的基本操作</b></p><p>  定義棧的順序存取結構,

10、分別定義棧的基本操作(初始化棧、判棧為空、入棧、出棧等),通過定義函數(shù)實現(xiàn)。</p><p>  4.3順序表的基本操作</p><p>  在順序存儲結構實現(xiàn)基本操作:初始化、創(chuàng)建、插入、刪除、查找等運算。</p><p><b>  5 詳細設計</b></p><p>  5.1順序存儲的線性表</p>

11、<p> ?。?)程序中包括哪些函數(shù)?畫出函數(shù)之間的調(diào)用關系。</p><p>  答:程序中包含12個成員函數(shù)和1個主函數(shù)。12個成員函數(shù)。如下,</p><p>  :SqList,~SqList,CreateList,Insert,Delete,GetElem,Locate,Clear,Eepty,Full,Length,ListDisp</p><

12、p> ?。?)程序中數(shù)據(jù)采用了什么樣的邏輯結構、物理結構?</p><p>  答:邏輯結構為依次存放線性表中的數(shù)據(jù);</p><p>  物理結構為一組地址連續(xù)的儲存單元。</p><p>  (3)程序中那個函數(shù)實現(xiàn)順序表的創(chuàng)建?其中包括順序表的初始化嗎?</p><p>  答:函數(shù)SqList用于實現(xiàn)順序表的創(chuàng)建,不包括表的初始

13、化。</p><p> ?。?)程序中哪個函數(shù)實現(xiàn)結點的插入?畫出流程圖。</p><p>  答: 函數(shù)Insert實現(xiàn)結點的插入。</p><p>  圖5.1實現(xiàn)結點插入</p><p> ?。?)程序中哪個函數(shù)實現(xiàn)結點的刪除?畫出流程圖。</p><p>  答:函數(shù)Delete實現(xiàn)了結點的刪除。</p&

14、gt;<p>  圖5.2實現(xiàn)結點刪除</p><p> ?。?)程序中提供了幾種元素查找方法?分別在哪個函數(shù)中實現(xiàn)?</p><p>  答:一種是按位置查找,在GetElem中實現(xiàn);另一種是按元素查找在Locate 中實現(xiàn)。</p><p>  (7)程序退出時,調(diào)用了哪個函數(shù)?該函數(shù)主要操作有哪些?</p><p>  答

15、:調(diào)用~SqList函數(shù),該函數(shù)主要操作是:刪除順序表元素,使表長和表容量為0.</p><p>  6 測試結果及分析</p><p>  運行程序,程序主界面如圖6.1所示。</p><p>  圖6.1 程序的主界面</p><p><b>  運行結果如圖6.2</b></p><p>

16、  圖6.2 程序的運行結果</p><p><b>  7心得體會</b></p><p>  本次課程設計,使我對《數(shù)據(jù)結構》這門課程有了更深入的理解?!稊?shù)據(jù)結構》是一門實踐性較強的課程,為了學好這門課程,必須在掌握理論知識的同時,加強上機實踐。</p><p>  我的課程設計題目關于順序表和棧。剛開始做這個程序的時候,感到完全無從下手,

17、甚至讓我覺得完成這次程序設計根本就是不可能的,于是開始查 閱各種資料以及參考文獻,之后便開始著手寫程序,寫完運行時有很多問題。特別是實現(xiàn)線索二叉樹的刪除運算時很多情況沒有考慮周全,經(jīng)常運行出現(xiàn)錯誤,但通 過同學間的幫助最終基本解決問題。</p><p>  在本課程設計中,我明白了理論與實際應用相結合的重要性,并提高了自己組織數(shù)據(jù)及編寫大型程序的能力。培養(yǎng)了基本的、良好的程序設計技能以及合 作能力。這次課程設計同

18、樣提高了我的綜合運用所學知識的能力。并對C有了更深入的了解。《數(shù)據(jù)結構》是一門實踐性很強的課程,上機實習是對學生全面綜合 素質進行訓練的一種最基本的方法,是與課堂聽講、自學和練習相輔相成的、必不可少的一個教學環(huán)節(jié)。上機實習一方面能使書本上的知識變“活”,起到深化理解 和靈活掌握教學內(nèi)容的目的;另一方面,上機實習是對學生軟件設計的綜合能力的訓練,包括問題分析,總體結構設計,程序設計基本技能和技巧的訓練。此外,還 有更重要的一點是:機器是比

19、任何更嚴厲的檢查者。因此,在“數(shù)據(jù)結構”的學習過程中,必須嚴格按照老師的要求,主動地、積極地、認真地做好每一個實驗,以不斷提高自己的編程能力與專業(yè)素質。</p><p>  通過這段時間的課程設計,我認識到數(shù)據(jù)結構是一門比較難的課程。需要多花時間上機練習。這次的程序訓練培養(yǎng)了我實際分析問題、編程和動手能力,使我掌握了程序設計的基本技能,提高了我適應實際,實踐編程的能力。</p><p> 

20、 總的來說,這次課程設計讓我獲益匪淺,對數(shù)據(jù)結構也有了進一步的理解和認識。</p><p><b>  附錄:程序代碼</b></p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p>  #include <windo

21、ws.h></p><p>  #define StackSize 100</p><p>  typedef int DataType;</p><p>  typedef struct</p><p><b>  {</b></p><p>  DataType stack[StackS

22、ize];</p><p><b>  int top;</b></p><p>  }SeqStack;</p><p>  #define MAXSIZE 1100</p><p>  typedef struct </p><p><b>  {</b></p&g

23、t;<p>  DataType list[MAXSIZE];</p><p><b>  int last;</b></p><p><b>  }SeqList;</b></p><p>  void InitList(SeqList *L)</p><p>  /*順序表的初始化

24、*/</p><p><b>  {</b></p><p>  L->last=-1;</p><p><b>  }</b></p><p>  int ListEmpty(SeqList L)</p><p>  /*判斷順序表是否為空*/</p>

25、<p><b>  {</b></p><p>  if(L.last==-1)/*判斷最后一個元素的序號是否為-1*/</p><p>  return 1;/*當順序表為空時返回1;否則返回0*/</p><p><b>  else </b></p><p>  return 0;/

26、*否則返回0*/</p><p><b>  }</b></p><p>  int ListLength(SeqList L)</p><p>  /*求線性表的長度*/</p><p><b>  {</b></p><p>  return L.last+1;</

27、p><p><b>  }</b></p><p>  int GetElem(SeqList L,int i,DataType *e)</p><p>  /*按序號順序查找元素。查找成功將該值返回給e,并返回1表示成功;否則返回-1表示失敗*/</p><p><b>  {</b></p&g

28、t;<p>  if(i<1||i>L.last+1)/*在查找第i個元素之前,先判斷該序號是否合法*/</p><p>  return -1;</p><p>  *e=L.list[i-1];/*將第i個元素值賦值給e*/</p><p><b>  return 1;</b></p><p&

29、gt;<b>  }</b></p><p>  int LocateElem(SeqList *L,DataType x)</p><p>  /*按內(nèi)容查找,查找成功,將對應元素的序號返回;否則返回-1*/</p><p><b>  {</b></p><p><b>  int i

30、=0;</b></p><p>  while(i<=L->last&&L->list[i]!=x)</p><p><b>  i++;</b></p><p>  if(i>L->last)</p><p>  return -1;</p>&l

31、t;p><b>  else </b></p><p>  return i+1;</p><p><b>  }</b></p><p>  int InsertList(SeqList *L,int i,DataType x)</p><p><b>  {</b>&

32、lt;/p><p><b>  int j;</b></p><p>  if(L->last==MAXSIZE-1)/*表空間已滿,不能插入*/</p><p><b>  {</b></p><p>  printf("表滿,不能插入");</p><p

33、>  return -1;</p><p><b>  }</b></p><p>  if(i>L->last+2)/*檢查插入位置是否合法*/</p><p><b>  {</b></p><p>  printf("插入位置非法");</p>

34、<p><b>  return 0;</b></p><p><b>  }</b></p><p>  for(j=L->last;j>=i-1;j--)</p><p>  L->list[j+1]=L->list[j];/*結點移動*/</p><p>

35、  L->list[i-1]=x;/*新元素插入*/</p><p>  L->last++;/*last仍指向最后一個元素*/</p><p>  return 1;/*插入成功,返回*/</p><p><b>  }</b></p><p>  int DeleteList(SeqList *L,int

36、 i,DataType *e)</p><p><b>  {</b></p><p><b>  int j;</b></p><p>  if(L->last<0)</p><p><b>  {</b></p><p>  printf

37、("順序表已空,不能插入進行操作!\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  else if(i<0||i>L->last+1)</p><p><b>  {<

38、/b></p><p>  printf("插入位置不合法!\n");</p><p>  return -1;</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {<

39、/b></p><p>  *e=L->list[i-1];</p><p>  for(j=i;j<=L->last;j++)</p><p>  L->list[j-1]=L->list[j];</p><p>  L->last--;</p><p><b> 

40、 return 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void InitStack(SeqStack *S)</p><p><b>  /*棧的初始化*/</b></p>&

41、lt;p><b>  {</b></p><p>  S->top=-1;/*把棧頂指針置為-1*/</p><p><b>  }</b></p><p>  int StackEmpty(SeqStack S)</p><p>  /*判斷棧是否為空*/</p><

42、;p><b>  {</b></p><p>  if(S.top==-1)/*判斷棧頂指針top是否為-1*/</p><p>  return 1;/*當棧為空時,返回1;否則返回0*/</p><p><b>  else</b></p><p><b>  return 0;

43、</b></p><p><b>  }</b></p><p>  int GetTop(SeqStack S,DataType *e)</p><p><b>  /*取棧頂元素*/</b></p><p><b>  {</b></p><

44、p>  if(S.top<0)/*在取棧頂元素之前,判斷棧是否為空*/</p><p><b>  {</b></p><p>  printf("棧已經(jīng)空!\n");</p><p><b>  return 0;</b></p><p><b>  }&

45、lt;/b></p><p><b>  else</b></p><p><b>  {</b></p><p>  *e=S.stack[S.top];/*再取棧頂元素*/</p><p><b>  return 1;</b></p><p>

46、;<b>  }</b></p><p><b>  }</b></p><p>  int PushStack(SeqStack *S,DataType x)</p><p>  /*將元素x進棧,元素進棧成功返回1,否則返回0*/</p><p><b>  {</b>&l

47、t;/p><p>  if(S->top>=StackSize)/*在元素進棧前,判斷棧是否已滿*/</p><p><b>  {</b></p><p>  printf("棧已滿,不能進棧!\n");</p><p><b>  return 0;</b></

48、p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  S->top++;/*修改棧頂指針*/</p><p>  S->stack[S->top]=x;

49、/*元素x進棧*/</p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  int PopStack(SeqStack *S,DataType *e)</p>&l

50、t;p>  /*出棧操作,出棧成功返回1,否則返回0*/</p><p><b>  {</b></p><p>  if(S->top==-1)/*元素出棧前,判斷棧是否為空*/</p><p><b>  {</b></p><p>  printf("棧已經(jīng)沒有元素,不能

51、出棧!\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  *

52、e=S->stack[S->top];/*將出棧元素賦值給e*/</p><p>  S->top--;/*修改棧頂指針,即出棧*/</p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  }</b

53、></p><p>  void main()</p><p><b>  {</b></p><p>  SeqList a;</p><p>  InitList(&a);</p><p>  int b[10]={0,0,0,0,0,0,0,0,0,0};</p>

54、<p>  int i=0;//表示第n-1次</p><p>  int f_n_1=0;//表示f(n-1);</p><p>  int f_n=0;//表示f(n)</p><p>  a.list[0]=1;</p><p><b>  a.last++;</b></p><p&

55、gt;  for(i=1;i<1000;i++)</p><p><b>  {</b></p><p>  GetElem(a,i,&f_n_1);//從數(shù)組a中將f(n-1)取出</p><p>  f_n=f_n_1+(i+1);</p><p>  if(f_n>10)</p>

56、<p>  f_n=(f_n%10);</p><p>  InsertList(&a,i+1,f_n);//將第n次的結果輸入到數(shù)組a</p><p><b>  }</b></p><p>  for(i=0;i<1000;i++)</p><p><b>  {</b>

57、</p><p>  switch(a.list[i])</p><p><b>  {</b></p><p>  case 1:b[0]++;break;</p><p>  case 2:b[1]++;break;</p><p>  case 3:b[2]++;break;</p&g

58、t;<p>  case 4:b[3]++;break;</p><p>  case 5:b[4]++;break;</p><p>  case 6:b[5]++;break;</p><p>  case 7:b[6]++;break;</p><p>  case 8:b[7]++;break;</p>&

59、lt;p>  case 9:b[8]++;break;</p><p>  case 10:case 0:b[9]++;break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("┏━━━━━━━━━━━━━━━━

60、━━━━━━━┓\n");</p><p>  printf("┃ ┃\n");</p><p>  printf("┃ 狼追兔子 ┃\n");</p><p&

61、gt;  printf("┃ 狼追蹤的次數(shù)為1000次 ┃\n");</p><p>  printf("┃ 狼找的洞的號數(shù)f(n)=f(n-1)+n ┃\n");</p><p>  printf("┃ 求狼追兔子的洞的號數(shù)

62、 ┃\n");</p><p>  printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");</p><p>  printf("請稍等,程序正在運行中............................\n");</p><p>  Sleep(10000);</p>

63、;<p>  printf("┏━━━━━━━━━━━━━━━━━━━━━━━┓\n");</p><p>  printf("┃ ┃\n");</p><p>  printf("┃ 狼追蹤的次數(shù)為1000次

64、 ┃\n");</p><p>  printf("┃ 狼找的洞的號數(shù)f(n)=f(n-1)+n ┃\n");</p><p>  printf("┃ 求狼追兔子的洞的號數(shù)與被狼需找的次數(shù) ┃\n");</p><p>  printf("

65、;┃ 1 2 3 4 5 6 7 8 9 10 ┃\n");</p><p>  printf("--------------------------------------------------\n");</p><p>  printf(" ");</p><p&

66、gt;  for(i=0;i<10;i++)</p><p>  printf("%3d ",b[i]);</p><p>  printf("\n");</p><p>  printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");</p><p><

溫馨提示

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

評論

0/150

提交評論