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

下載本文檔

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

文檔簡介

1、<p><b>  信息科學(xué)與技術(shù)學(xué)院</b></p><p>  《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告</p><p> 題目名稱:循環(huán)單鏈表(附加頭結(jié)點(diǎn),引用)</p><p> 專業(yè)班級:計算機(jī)科學(xué)與技術(shù)2011級1班</p><p> 學(xué)生姓名:</p><p> 學(xué)生學(xué)號:</p&g

2、t;<p> 指導(dǎo)教師:</p><p>  目 錄</p><p>  1 課程設(shè)計的目的1</p><p>  1.1 課程設(shè)計的目的1</p><p>  1.2 課程設(shè)計的題目1</p><p>  1.3 題目要求1</p><p><

3、b>  2 概要設(shè)計1</b></p><p>  2.1 存儲結(jié)構(gòu)1</p><p>  2.2 基本操作1</p><p><b>  3 詳細(xì)設(shè)計2</b></p><p>  3.1 流程圖2</p><p>  3.2 源程序7</p>

4、;<p><b>  4 測試12</b></p><p>  5 課程設(shè)計總結(jié)19</p><p><b>  6參考書目:20</b></p><p>  1 課程設(shè)計的目的</p><p>  1.1 課程設(shè)計的目的</p><p>  更好

5、的掌握數(shù)據(jù)結(jié)構(gòu)這門課程,會用數(shù)據(jù)結(jié)構(gòu)的基本思想及算法解決實(shí)際問題。更好的掌握循環(huán)鏈表,能進(jìn)行各種基本的操作,提高編程能力。</p><p>  1.2 課程設(shè)計的題目</p><p>  循環(huán)單鏈表(附加頭結(jié)點(diǎn),引用)</p><p><b>  1.3 題目要求</b></p><p>  實(shí)現(xiàn)附加頭結(jié)點(diǎn)循環(huán)單鏈表

6、的基本操作:創(chuàng)建空表、輸出、求表長、取元素、查找、替換、插入、刪除、清空。</p><p><b>  2 概要設(shè)計</b></p><p><b>  2.1 存儲結(jié)構(gòu)</b></p><p><b>  存儲結(jié)構(gòu)</b></p><p>  typedef struct

7、 node{</p><p>  datatype data;/*數(shù)據(jù)域*/</p><p>  struct node *next;/*指針域*/</p><p>  }LNode,*LinkList;/*結(jié)點(diǎn)及結(jié)點(diǎn)的地址*/</p><p><b>  2.2 基本操作</b></p><p&g

8、t;  創(chuàng)建空表、輸出、求表長、取元素、查找、替換、插入、刪除、清空。</p><p><b>  3 詳細(xì)設(shè)計</b></p><p><b>  3.1 流程圖</b></p><p>  各個算法的設(shè)計如下:</p><p><b>  主函數(shù):</b></p&

9、gt;<p><b>  主菜單</b></p><p>  用于進(jìn)行指示進(jìn)行各種操作,是與每個函數(shù)都相聯(lián)系的一個函數(shù)</p><p><b>  3.顯示鏈表</b></p><p>  先讓指針指向首元結(jié)點(diǎn),在判斷該指針是否為頭指針,不是則輸入數(shù)據(jù),實(shí)則退出</p><p>  p

10、 = head->next;</p><p><b>  圖3</b></p><p><b>  4.求表長</b></p><p>  先求表的初始長,在判斷鏈表是否為空,不是則len自加,否則結(jié)束</p><p><b>  取元素</b></p>&

11、lt;p>  先求表長,在判斷Index < 1 || Index > len,為否則循環(huán),一直活得該數(shù)據(jù)</p><p><b>  查找</b></p><p>  求表長,在判斷鏈表是否為空,是則結(jié)束,否則判斷要查找的數(shù)據(jù)是否在鏈表中,是則成功</p><p><b>  7.替換</b></

12、p><p>  判斷要替換的位置是否在鏈表范圍中,是則循環(huán)找到要替換的數(shù)據(jù)替換,否則結(jié)束</p><p><b>  8.插入</b></p><p>  判斷將要插入的位置是否在鏈表范圍內(nèi),是則循環(huán)將要插入的數(shù)據(jù)插入,否則結(jié)束</p><p><b>  9.刪除</b></p><

13、;p>  判斷鏈表是否為空,否則刪除該結(jié)點(diǎn),是則結(jié)束</p><p><b>  清空</b></p><p>  判斷聊表是夠?yàn)榭?,否則依次釋放空間,否則結(jié)束</p><p>  p->next->data == data</p><p><b>  3.2 源程序</b>&l

14、t;/p><p>  #include <iostream></p><p>  using namespace std;</p><p>  typedef int ElemType;</p><p>  typedef struct node{</p><p>  ElemType data;</p&

15、gt;<p>  struct node *next;</p><p>  }LNode,*LinkList,*pNODE;</p><p>  // 創(chuàng)建一個有頭結(jié)點(diǎn)的空循環(huán)表。</p><p>  LinkList InitList(void) </p><p><b>  {</b></p>

16、;<p>  pNODE head = new LNode; </p><p>  head->next = head;</p><p>  return head;</p><p><b>  }</b></p><p>  // 頭插法。將給定結(jié)點(diǎn)插在鏈表頭部。</p><p&

17、gt;  void InsertHead(LinkList head,pNODE anode)</p><p><b>  { </b></p><p>  anode->next = head->next; </p><p>  head->next = anode;</p><p><b>

18、;  }</b></p><p>  // 返回鏈表長度。</p><p>  int ListLen(LinkList head)</p><p><b>  { </b></p><p>  int len = 0;</p><p>  pNODE p = head;</p&

19、gt;<p>  while(p->next != head)</p><p><b>  { </b></p><p><b>  ++len; </b></p><p>  p = p->next;</p><p><b>  } </b><

20、/p><p>  return len;</p><p><b>  }</b></p><p>  // 查找。成功返回1,否則返回0。</p><p>  int ListSearch(LinkList head, ElemType data)</p><p><b>  {</b

21、></p><p>  pNODE p = head;</p><p>  while(p->next != head) </p><p><b>  { </b></p><p>  if(p->next->data == data) </p><p>  return

22、 true; </p><p>  p = p->next;</p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  // 獲取指定索引號的數(shù)據(jù)。&

23、lt;/p><p>  void GetData(LinkList head,int Index,ElemType data)</p><p><b>  { </b></p><p>  pNODE p = head;</p><p>  int i,len = ListLen(head);</p><

24、p>  if(Index < 1 || Index > len)</p><p>  cout <<"獲取失敗" <<endl;</p><p>  for(i = 0; i <Index; ++i,p = p->next);</p><p>  data = p->data; <

25、/p><p>  cout <<"獲取成功,其值為:"<<data <<endl;</p><p><b>  }</b></p><p>  // 用給定結(jié)點(diǎn)替換指定索引的結(jié)點(diǎn)。</p><p>  void NodeReplace(LinkList head, in

26、t Index, int data)</p><p><b>  { </b></p><p>  pNODE p = head; </p><p>  int i,len = ListLen(head);</p><p>  if(Index < 1 || Index > len)</p>&

27、lt;p>  cout <<"錯誤" <<endl;</p><p>  for(i = 0; i <Index; ++i,p = p->next);</p><p>  p->data=data;</p><p>  cout <<"替換成功" <<en

28、dl;</p><p><b>  } </b></p><p><b>  //插入結(jié)點(diǎn)</b></p><p>  void ListInsert(LinkList head,int Index,int data)</p><p><b>  {</b></p>

29、<p>  pNODE s,p=head;int i,len = ListLen(head);</p><p>  if(Index < 1 || Index > len)</p><p>  cout <<"錯誤" <<endl;</p><p>  for(i=1;i<Index;++i

30、,p=p->next);</p><p>  s=new LNode;</p><p>  s->data=data;</p><p>  s->next=p->next;</p><p>  p->next=s;</p><p>  cout <<"插入成功&quo

31、t; <<endl;</p><p><b>  }</b></p><p>  // 刪除數(shù)據(jù)域?yàn)閐ata的結(jié)點(diǎn)。成功返回1,否則返回0。</p><p>  int NodeErase(LinkList head,ElemType data)</p><p><b>  {</b>&

32、lt;/p><p>  pNODE q,p = head;</p><p>  while(p->next != head) </p><p><b>  {</b></p><p>  if(p->next->data == data)</p><p><b>  { &

33、lt;/b></p><p>  q = p->next; </p><p>  p->next = q->next;</p><p><b>  delete q;</b></p><p><b>  return 1;</b></p><p>&l

34、t;b>  }</b></p><p>  p = p->next;</p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><

35、b>  // 釋放鏈表</b></p><p>  void ListDestroy(LinkList head)</p><p><b>  { </b></p><p>  pNODE q,p = head;</p><p>  while(p->next != head)</p>

36、<p><b>  {</b></p><p>  q = p->next;</p><p>  p->next = q->next;</p><p><b>  delete q;</b></p><p><b>  }</b></p&g

37、t;<p>  delete head;</p><p>  cout <<"釋放成功" <<endl;</p><p><b>  }</b></p><p><b>  // 顯示鏈表</b></p><p>  void ListSho

38、w(LinkList head)</p><p><b>  { </b></p><p>  pNODE p = head->next;</p><p>  while(p != head)</p><p><b>  {</b></p><p>  cout <

39、;<" "<<p->data;</p><p>  p = p->next;</p><p><b>  }</b></p><p>  cout <<endl;</p><p><b>  }</b></p><p&

40、gt;  void Menu(LinkList head)</p><p><b>  {</b></p><p>  cout <<"***********************************循環(huán)鏈表*************************************" <<endl;</p>

41、<p>  cout <<"********************************************************************************" <<endl;</p><p>  cout <<"*****************1顯示鏈表2求表長3取元素4查找5替換6插入7刪除8清空9

42、退出**********" <<endl;</p><p>  cout <<"********************************************************************************" <<endl;</p><p>  cout<<"請選擇您需

43、要的操作:"<<endl;</p><p>  int xz,Index,data;</p><p><b>  cin >>xz;</b></p><p>  switch(xz)</p><p><b>  {</b></p><p>&

44、lt;b>  case 1: </b></p><p>  ListShow(head);</p><p>  system("pause");</p><p>  system("cls");</p><p>  Menu(head);</p><p><

45、;b>  break;</b></p><p><b>  case 2:</b></p><p>  cout <<"鏈表長度為:" <<ListLen(head) <<endl;</p><p>  system("pause");</p&g

46、t;<p>  system("cls");</p><p>  Menu(head);</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  cout <<"請輸入要獲取的數(shù)

47、據(jù)的位置:" <<endl;</p><p>  cin >>Index;</p><p>  GetData(head,Index,data);</p><p>  system("pause");</p><p>  system("cls");</p>

48、<p>  Menu(head);</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  cout <<"請輸入要查找的數(shù)據(jù) : " <<endl;</p><p>  ci

49、n >>data;</p><p>  if(ListSearch(head, data))</p><p>  cout <<"找到了" <<endl;</p><p><b>  else</b></p><p>  cout <<"對不起

50、,沒找到" <<data <<endl;</p><p>  system("pause");</p><p>  system("cls");</p><p>  Menu(head);</p><p><b>  break;</b></

51、p><p><b>  case 5:</b></p><p>  cout <<"請輸入要替換的位置,其值為:" <<endl;</p><p>  cin >>Index >>data;</p><p>  NodeReplace(head,Index,

52、data);</p><p>  system("pause");</p><p>  system("cls");</p><p>  Menu(head);</p><p><b>  break;</b></p><p><b>  case

53、 6:</b></p><p>  cout <<"請輸入插入的位置及數(shù)值:" <<endl;</p><p>  cin >>Index >>data;</p><p>  ListInsert(head,Index,data);</p><p>  syste

54、m("pause");</p><p>  system("cls");</p><p>  Menu(head);</p><p><b>  break;</b></p><p><b>  case 7:</b></p><p>

55、  cout <<"請輸入要刪除結(jié)點(diǎn)的數(shù)據(jù) : " <<endl;</p><p>  cin >>data;</p><p>  if(NodeErase(head,data))</p><p>  cout <<"成功刪除" <<data <<endl

56、;</p><p><b>  else</b></p><p>  cout <<"沒有找到" <<data <<endl;</p><p>  system("pause");</p><p>  system("cls"

57、);</p><p>  Menu(head);</p><p><b>  break;</b></p><p><b>  case 8:</b></p><p>  ListDestroy(head);</p><p>  system("pause"

58、;);</p><p>  system("cls");</p><p>  Menu(head);</p><p><b>  break;</b></p><p><b>  case 0:</b></p><p><b>  exit(1)

59、;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b></p><p>  LinkList head = InitLis

60、t();</p><p>  pNODE anode;</p><p>  int i,n = 10,a[] = {0,1,2,3,4,5,6,7,8,9};</p><p>  for(i = 0; i < n; ++i)</p><p>  { // 頭插法 </p><p>  anode =new LN

61、ode;</p><p>  anode->data = a[i];</p><p>  InsertHead(head,anode);</p><p><b>  }</b></p><p>  Menu(head);</p><p><b>  return 0;</b&

62、gt;</p><p><b>  }</b></p><p><b>  4 測試</b></p><p><b>  菜單界面</b></p><p>  顯示各種功能需進(jìn)行的各種操作,界面如下:</p><p>  選擇1時,顯示鏈表中的數(shù)據(jù),

63、如圖:</p><p>  選擇2時,可以得到鏈表長度,如圖:</p><p>  選擇3時,輸入要獲取的數(shù)據(jù)的位置,成功則如圖:</p><p>  選擇4時,可以查找元素是否在該鏈表中,但該功能不能顯示出查找到的數(shù)據(jù)的位置,有所不足,如圖:</p><p>  選擇5時,可以替換你指定位置的數(shù)據(jù),如圖:</p><p&

64、gt;  選擇1,顯示替換指定位置數(shù)據(jù)后鏈表中的所有數(shù)據(jù),如圖:</p><p>  選擇6時,可以選擇要插入的位置及數(shù)值,插入成功,如圖:</p><p>  選擇1,插入后,鏈表中所有的數(shù)據(jù),如圖:</p><p>  選擇7時,可以刪除你要刪除的數(shù)據(jù),成功刪除則如圖:</p><p>  選擇7,刪除失敗,如圖:</p>

65、<p>  選擇8時,可以清空鏈表,如圖:</p><p><b>  5 課程設(shè)計總結(jié)</b></p><p>  通過這次課程設(shè)計,我又收獲到很多,平時的在做作業(yè)時,因?yàn)轭}形與結(jié)構(gòu)都是很簡單的,并且每一章的內(nèi)容都是有相應(yīng)的例題可以參考,所以在做題時沒有遇到過很麻煩的問題,而這次不同了,一個課題拿到手時,給我的感覺是無從下手,而且要求很多,使得題目要求更

66、大了.通過本次課程設(shè)計,我最大的收獲就是自己的動手能力得到了很大的提升,我發(fā)現(xiàn)只有自己動手才能更好的了解到自己的知識漏洞,很多小問題可能對代碼的編寫都有很大影響,像在編寫過程中我有時漏掉半撇括號,而在查找時就相當(dāng)費(fèi)力,所以多敲代碼很重要啊。對語言也得到了更深的了解。語言等于算法加數(shù)據(jù)結(jié)構(gòu),這句話確實(shí)很有道理,數(shù)據(jù)結(jié)構(gòu)給了我一種更好的思路,一種更好的思想,掌握一種思想遠(yuǎn)比會很多語言來的重要,只有我們有了思路,有了更好的算法,我們的程序才會

67、更加優(yōu)秀,空間復(fù)雜度,時間復(fù)雜度才會更加少。在設(shè)計過程中我遇到了很多錯誤或是難題,其中耗時最多的就是考慮存儲結(jié)構(gòu),只有有了一個好的存儲結(jié)構(gòu)對數(shù)據(jù)的操作才更加便利。</p><p>  我將整個程序分塊完成的.將整個大的程序的實(shí)現(xiàn)分8個功能,每個功能都通過一個相應(yīng)的函數(shù)來實(shí)現(xiàn).在調(diào)試時分別進(jìn)行調(diào)試,使得調(diào)試更方便些.在編寫各個函數(shù)只是按著題目要求的去完成,后來經(jīng)指導(dǎo)老師指導(dǎo)后,發(fā)現(xià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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論