數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--基于線性表下的查找與排序_第1頁(yè)
已閱讀1頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</b></p><p>  論文題目:基于線性表下的查找與排序</p><p>  2014年1月17日</p><p><b>  實(shí)驗(yàn)環(huán)境</b></p><p>  硬件:學(xué)生每人一臺(tái)計(jì)算機(jī)。</p><p>  軟件:W

2、indows操作系統(tǒng),Visual C++6.0。</p><p><b>  實(shí)驗(yàn)內(nèi)容</b></p><p>  基于線性表下的查找與排序。</p><p><b>  實(shí)驗(yàn)原理</b></p><p>  基于線性表的查找法概述</p><p>  集合結(jié)構(gòu)是數(shù)據(jù)對(duì)象之

3、間關(guān)系松散的一種數(shù)據(jù)結(jié)構(gòu),對(duì)其進(jìn)行查找是根據(jù)給定的關(guān)鍵字,在特定的列表中確定一個(gè)其關(guān)鍵字與給定值相同的數(shù)據(jù)元素,并返回該數(shù)據(jù)元素在列表中的位置。查找的方法分為比較式查找法和計(jì)算式查找法,其中比較式查找法可分為基于線性表的查找法和基于樹(shù)的查找法;而計(jì)算式查找法也稱為Hash(哈希)查找法。基于線性表的查找法是將集合的數(shù)據(jù)對(duì)象組織成為線性表形式進(jìn)行查找,即用給定的關(guān)鍵字與線性表中各元素的關(guān)鍵字逐個(gè)比較,直到成功或失敗。線性表的存儲(chǔ)結(jié)構(gòu)通常是

4、順序存儲(chǔ)結(jié)構(gòu),也可使用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。</p><p>  查找時(shí)可在表的一端設(shè)置一個(gè)“監(jiān)視哨”,存放要查找元素的關(guān)鍵字,從表的另一端開(kāi)始查找,若在“監(jiān)視哨”找到要查找元素的關(guān)鍵字,返回失敗信息,否則返回關(guān)鍵字的位序。基于線性表的查找技術(shù)有著非常廣泛的應(yīng)用。</p><p>  基于線性表的排序法概述</p><p>  排序是計(jì)算機(jī)程序設(shè)計(jì)中的一種重要操作,在數(shù)值計(jì)

5、算或數(shù)據(jù)處理過(guò)程中,都會(huì)直接或間接用到數(shù)據(jù)的排序問(wèn)題。排序的功能是將一個(gè)數(shù)據(jù)元素(或稱記錄)的無(wú)序序列,按數(shù)據(jù)元素的關(guān)鍵字大小排列成一個(gè)遞增或遞減有序的記錄序列。</p><p>  由于待排序的記錄數(shù)量不同,使得排序過(guò)程中涉及的存儲(chǔ)器也不同,因此可將排序方法分為內(nèi)排序和外排序。內(nèi)排序包括插入、交換、選擇和歸并等幾類排序。</p><p>  2.1基于插入類的排序概述</p>

6、<p>  插入類排序的基本思想是假定記錄序列中前面的一部分記錄已經(jīng)有序,把后面的一個(gè)記錄插入已排序的有序子序列中去,使得插入這個(gè)記錄后得到的依然是有序序列,從而逐步擴(kuò)大有序的子序列的長(zhǎng)度,直到所有記錄都有序?yàn)橹?。直接插入排序是采用順序查找法?lái)確定記錄的插入位置。折半插入排序是采用折半查找法來(lái)確定記錄的插入位置。希爾排序是對(duì)待排序記錄序列先做宏觀直接插入排序調(diào)整,再做微觀直接插入排序調(diào)整,故稱縮小增量排序排序。</p

7、><p>  2.2基于交換類的排序概述</p><p>  交換排序的基本思想是兩兩比較待排序記錄的關(guān)鍵字,當(dāng)兩個(gè)記錄的次序相反時(shí)進(jìn)行交換,直到?jīng)]有反序的記錄為止?;诮粨Q類的排序有冒泡排序和快速排序。</p><p>  冒泡排序是比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)

8、該會(huì)是最大的數(shù)。針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。</p><p>  快速排序是對(duì)冒泡排序的一種改進(jìn)。它的基本思想是:通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。</p&g

9、t;<p>  2.3基于選擇類的排序概述</p><p>  選擇排序的基本思想是從每一趟待排序數(shù)據(jù)中選取一個(gè)關(guān)鍵字最小的記錄,并置于適當(dāng)?shù)奈恢蒙?。即第一趟從n個(gè)記錄中選取關(guān)鍵字最小的記錄,第二趟從剩下的n-1個(gè)記錄中選取關(guān)鍵字最小的記錄,直到整個(gè)序列的記錄選完,由選取記錄的順序便可得到關(guān)鍵字有序的序列。堆排序的基本思想是通過(guò)類似于淘汰賽的想法,讓序列中的關(guān)鍵字兩兩相比,不斷淘汰較大者,最終選出關(guān)

10、鍵字最小的記錄。</p><p><b>  系統(tǒng)測(cè)試</b></p><p>  4.1基于線性表的查找源代碼</p><p>  #include<stdio.h></p><p>  #include<process.h></p><p>  #define LIST

11、_SIZE 100</p><p>  //定義順序表的最大長(zhǎng)度</p><p>  typedef int keyType ;</p><p>  //定義關(guān)鍵字類型為整形</p><p>  typedef struct </p><p><b>  {</b></p><

12、p>  keyType key ;</p><p><b>  //關(guān)鍵字項(xiàng)</b></p><p><b>  }</b></p><p>  RecordType ;</p><p><b>  //記錄類型</b></p><p>  typ

13、edef struct </p><p><b>  {</b></p><p>  RecordType r[LIST_SIZE+1];</p><p>  //r[0]用作監(jiān)視哨</p><p>  int length ;</p><p><b>  //定義順序表長(zhǎng)度</b

14、></p><p><b>  }</b></p><p>  RecordList ;</p><p><b>  //順序表類型</b></p><p><b>  /*函數(shù)申明*/</b></p><p>  void CreatList(R

15、ecordList*L);</p><p>  int SeqSearch(RecordList*l,keyType k);</p><p>  int BinSrch(RecordList*l,keyType k);</p><p>  void Display(RecordList*L);</p><p>  void shunxu();

16、</p><p>  void zheban();</p><p>  void Menu();</p><p><b>  //主函數(shù)</b></p><p>  int main()</p><p><b>  {</b></p><p><

17、b>  int i ;</b></p><p><b>  Menu();</b></p><p>  printf("請(qǐng)選擇:\n");</p><p>  scanf("%d",&i);</p><p><b>  switch(i)<

18、/b></p><p><b>  {</b></p><p><b>  case 1 :</b></p><p><b>  {</b></p><p><b>  shunxu();</b></p><p><b&

19、gt;  break ;</b></p><p><b>  }</b></p><p><b>  case 2 :</b></p><p><b>  {</b></p><p><b>  zheban();</b></p>

20、<p><b>  break ;</b></p><p><b>  }</b></p><p><b>  case 3 :</b></p><p><b>  exit(1);</b></p><p><b>  default

21、 :</b></p><p><b>  {</b></p><p>  printf("輸入命令錯(cuò)誤,請(qǐng)重新輸入!\n");</p><p><b>  break ;</b></p><p><b>  }</b></p>&l

22、t;p><b>  Menu();</b></p><p>  printf("請(qǐng)選擇:\n");</p><p>  scanf("%d",&i);</p><p><b>  }</b></p><p>  return 0 ;</p&

23、gt;<p><b>  }</b></p><p><b>  //創(chuàng)建線性表</b></p><p>  void CreatList(RecordList*L)</p><p><b>  {</b></p><p><b>  int i ;&l

24、t;/b></p><p>  printf("請(qǐng)輸入數(shù)據(jù)元素的個(gè)數(shù):");</p><p>  scanf("%d",&L->length);</p><p>  printf("請(qǐng)輸入數(shù)據(jù)元素:\n");</p><p>  for(i=1;i<=L-&

25、gt;length;i++)</p><p>  scanf("%d",&L->r[i]);</p><p><b>  }</b></p><p>  /*有哨兵的順序查找*/</p><p>  int SeqSearch(RecordList*l,keyType k)</p&

26、gt;<p><b>  {</b></p><p><b>  int i ;</b></p><p>  l->r[0].key=k ;</p><p>  i=l->length ;</p><p>  while(l->r[i].key!=k)</p&g

27、t;<p><b>  i--;</b></p><p>  return i ;</p><p><b>  }</b></p><p><b>  /*折半查找*/</b></p><p>  int BinSrch(RecordList*l,keyType

28、k)</p><p><b>  {</b></p><p>  int low,high,mid ;</p><p><b>  low=1 ;</b></p><p>  high=l->length ;</p><p>  while(low<=high)&

29、lt;/p><p><b>  {</b></p><p>  mid=(low+high)/2 ;</p><p>  if(k==l->r[mid].key)</p><p>  return mid ;</p><p>  else if(k<l->r[mid].key)<

30、;/p><p>  high=mid-1 ;</p><p><b>  else </b></p><p>  low=mid+1 ;</p><p><b>  }</b></p><p>  return 0 ;</p><p><b> 

31、 }</b></p><p>  /*折半查找結(jié)果*/</p><p>  void zheban()</p><p><b>  {</b></p><p><b>  int key ;</b></p><p>  RecordList l ;</p&g

32、t;<p>  printf("折半查找如下:\n");</p><p>  CreatList(&l);</p><p>  Display(&l);</p><p>  printf("\n請(qǐng)輸入關(guān)鍵字?jǐn)?shù)據(jù):\n");</p><p>  scanf("%d&

33、quot;,&key);</p><p>  if(BinSrch(&l,key))</p><p>  printf("關(guān)鍵字?jǐn)?shù)據(jù)的位置是:%d\n",BinSrch(&l,key));</p><p><b>  else </b></p><p>  printf(&qu

34、ot;不存在這樣的關(guān)鍵字!\n");</p><p><b>  }</b></p><p>  /*順序查找結(jié)果*/</p><p>  void shunxu()</p><p><b>  {</b></p><p><b>  int key ;&

35、lt;/b></p><p>  RecordList l ;</p><p>  printf("順序查找如下:\n");</p><p>  CreatList(&l);</p><p>  Display(&l);</p><p>  printf("\n請(qǐng)輸入

36、關(guān)鍵字?jǐn)?shù)據(jù):\n");</p><p>  scanf("%d",&key);</p><p>  if(SeqSearch(&l,key))</p><p>  printf("關(guān)鍵字?jǐn)?shù)據(jù)的位置是:%d\n",SeqSearch(&l,key));</p><p>&

37、lt;b>  else </b></p><p>  printf("不存在這樣的關(guān)鍵字!\n");</p><p><b>  }</b></p><p><b>  //輸出線性表</b></p><p>  void Display(RecordList*

38、L)</p><p><b>  {</b></p><p><b>  int i ;</b></p><p>  printf("數(shù)據(jù)集合輸出:\n");</p><p>  printf("序號(hào)\t\t");</p><p>  

39、for(i=1;i<=L->length;i++)</p><p>  printf("%d\t",i);</p><p>  printf("\n");</p><p>  printf("數(shù)據(jù)元素\t");</p><p>  for(i=1;i<=L->

40、length;i++)</p><p>  printf("%d\t",L->r[i]);</p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  //程序菜單</b></p>&

41、lt;p>  void Menu()</p><p><b>  {</b></p><p>  printf("/********************************基于線性表的查找******************************/");</p><p>  printf("/*

42、 1:順序查找 */");</p><p>  printf("/* 2:折半查找 */");</p><p>

43、;  printf("/* 3:退出 */");</p><p>  printf("/******************************************************************************/&q

44、uot;);</p><p><b>  }</b></p><p><b>  測(cè)試結(jié)果如下:</b></p><p>  4.2基于線性表的排序源代碼</p><p>  #include<stdio.h></p><p>  #include<proc

45、ess.h></p><p>  #define MAXSIZE 100//定義順序表的最大長(zhǎng)度</p><p>  typedef int keyType;//定義關(guān)鍵字類型為整形</p><p>  typedef struct</p><p><b>  {</b></p><p> 

46、 keyType key;//關(guān)鍵字項(xiàng)</p><p>  }RedType;//記錄類型</p><p>  typedef struct</p><p><b>  {</b></p><p>  RedType r[MAXSIZE+1];//r[0]用作監(jiān)視哨</p><p>  int l

47、ength;//定義順序表長(zhǎng)度</p><p>  }SqList;//順序表類型</p><p><b>  //函數(shù)申明</b></p><p>  void CreateSqList(SqList *L);</p><p>  void InsertSort(SqList *L);</p><p

48、>  void BInsertSort(SqList *L);</p><p>  void ShellInsert(SqList *L,int dk);</p><p>  void ShellSort(SqList *L,int dlta[],int t);</p><p>  void BubbleSort(SqList *L);</p>

49、<p>  int Partition(SqList *L,int low,int high);</p><p>  void QSort(SqList *L,int s,int t);</p><p>  void QuickSort(SqList *L);</p><p>  void SelectSort(SqList *L);</p>

50、<p>  void HeapAdjust(SqList *L,int s,int t);</p><p>  void HeapSort(SqList *L);</p><p>  void Display(SqList *L);</p><p>  void Menu();</p><p>  int main() //主

51、函數(shù)</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  SqList l;</b></p><p>  int dlta[3]={5,3,1};//希爾排序的增量</p><p><

52、;b>  Menu();</b></p><p>  printf("請(qǐng)選擇:");</p><p>  scanf("%d",&i);</p><p><b>  switch(i)</b></p><p><b>  {</b>&

53、lt;/p><p><b>  case 1:</b></p><p><b>  {</b></p><p>  CreateSqList(&l);</p><p>  Display(&l);</p><p>  InsertSort(&l);<

54、/p><p>  printf("直接插入排序輸出:\n");</p><p>  Display(&l);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 2:

55、</b></p><p><b>  {</b></p><p>  CreateSqList(&l);</p><p>  Display(&l);</p><p>  BInsertSort(&l);</p><p>  printf("折半插入排

56、序輸出:\n");</p><p>  Display(&l);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 3:</b></p><p><b&

57、gt;  {</b></p><p>  CreateSqList(&l);</p><p>  Display(&l);</p><p>  ShellSort(&l,dlta,3);</p><p>  printf("希爾排序輸出:\n");</p><p>

58、;  Display(&l);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 4:</b></p><p><b>  {</b></p><p

59、>  CreateSqList(&l);</p><p>  Display(&l);</p><p>  BubbleSort(&l);</p><p>  printf("冒泡排序輸出:\n");</p><p>  Display(&l);</p><p>

60、;<b>  break;</b></p><p><b>  }</b></p><p><b>  case 5:</b></p><p><b>  {</b></p><p>  CreateSqList(&l);</p>&

61、lt;p>  Display(&l);</p><p>  QuickSort(&l);</p><p>  printf("快速排序輸出:\n");</p><p>  Display(&l);</p><p><b>  break;</b></p>&

62、lt;p><b>  }</b></p><p><b>  case 6:</b></p><p><b>  {</b></p><p>  CreateSqList(&l);</p><p>  Display(&l);</p><

63、;p>  SelectSort(&l);</p><p>  printf("簡(jiǎn)單選擇排序輸出:\n");</p><p>  Display(&l);</p><p><b>  break;</b></p><p><b>  }</b></p&g

64、t;<p><b>  case 7:</b></p><p><b>  {</b></p><p>  CreateSqList(&l);</p><p>  Display(&l);</p><p>  HeapSort(&l);</p>&

65、lt;p>  printf("堆排序輸出:\n");</p><p>  Display(&l);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 0:</b>&l

66、t;/p><p><b>  exit(1);</b></p><p><b>  default:</b></p><p><b>  {</b></p><p>  printf("輸入命令錯(cuò)誤,請(qǐng)重新輸入!\n");</p><p>

67、;<b>  break;</b></p><p><b>  }</b></p><p><b>  Menu();</b></p><p>  printf("請(qǐng)選擇:\n");</p><p>  scanf("%d",&i

68、);</p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void CreateSqList(SqList *L)//創(chuàng)建線性表</p><p>&l

69、t;b>  {</b></p><p><b>  int i;</b></p><p>  printf("請(qǐng)輸入數(shù)據(jù)元素的個(gè)數(shù):");</p><p>  scanf("%d",&L->length);</p><p>  printf(&quo

70、t;請(qǐng)輸入數(shù)據(jù)元素:\n");</p><p>  for(i=1;i<=L->length;i++)</p><p>  scanf("%d",&L->r[i]);</p><p><b>  }</b></p><p>  void InsertSort(SqL

71、ist *L)//直接插入排序</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for(i=2;i<=L->length;++i)</p><p>  if(L->r[i].key<L->r[i-1].k

72、ey)</p><p><b>  {</b></p><p>  L->r[0]=L->r[i];</p><p>  L->r[i]=L->r[i-1];</p><p>  for(j=i-2;L->r[0].key<L->r[j].key;--j)</p>

73、<p>  L->r[j+1]=L->r[j];</p><p>  L->r[j+1]=L->r[0];</p><p><b>  }</b></p><p><b>  }</b></p><p>  void BInsertSort(SqList *L)//

74、折半插入排序</p><p><b>  {</b></p><p>  int i,j,low,high,m;</p><p>  for(i=2;i<=L->length;++i)</p><p><b>  {</b></p><p>  L->r[0

75、]=L->r[i];</p><p><b>  low=1;</b></p><p><b>  high=i-1;</b></p><p>  while(low<=high)</p><p><b>  {</b></p><p>  

76、m=(low+high)/2;</p><p>  if(L->r[0].key<L->r[m].key)</p><p><b>  high=m-1;</b></p><p><b>  else</b></p><p><b>  low=m+1;</b>

77、;</p><p><b>  }</b></p><p>  for(j=i-1;j>=high+1;--j)</p><p>  L->r[j+1]=L->r[j];</p><p>  L->r[high+1]=L->r[0];</p><p><b>

78、;  }</b></p><p><b>  }</b></p><p>  void ShellInsert(SqList *L,int dk) //一趟希爾排序</p><p><b>  {</b></p><p><b>  int i,j;</b><

79、;/p><p>  for(i=dk+1;i<L->length;++i)</p><p>  if(L->r[i].key<L->r[i-dk].key)</p><p><b>  {</b></p><p>  L->r[0]=L->r[j];</p><p

80、>  for(j=i-dk;j>0&&(L->r[0].key<L->r[j].key);j-=dk)</p><p>  L->r[j+dk]=L->r[j];</p><p>  L->r[j+dk]=L->r[0];</p><p><b>  }</b></p&

81、gt;<p><b>  }</b></p><p>  void ShellSort(SqList *L,int dlta[],int t)//希爾排序</p><p><b>  {</b></p><p><b>  int k;</b></p><p> 

82、 for(k=0;k<t;k++)</p><p>  ShellInsert(L,dlta[k]);</p><p><b>  }</b></p><p>  void BubbleSort(SqList *L)//冒泡排序法</p><p><b>  {</b></p>

83、<p>  int i=L->length,j,temp;</p><p>  int lastExchangeIndex;</p><p>  while(i>1)</p><p><b>  {</b></p><p>  lastExchangeIndex=1;</p><

84、p>  for(j=1;j<i;j++)</p><p>  if(L->r[j+1].key<L->r[j].key)</p><p><b>  {</b></p><p>  temp=L->r[j+1].key;</p><p>  L->r[j+1].key=L->

85、;r[j].key;</p><p>  L->r[j].key=temp;</p><p>  lastExchangeIndex=j;</p><p><b>  }</b></p><p>  i=lastExchangeIndex;</p><p><b>  }</

86、b></p><p><b>  }</b></p><p>  int Partition(SqList *L,int low,int high)//一趟快速排序?qū)ふ覙休S</p><p><b>  {</b></p><p><b>  int key;</b><

87、;/p><p>  key=L->r[low].key;</p><p>  while(low<high)</p><p><b>  {</b></p><p>  while(low<high&&L->r[high].key>=key)</p><p&g

88、t;<b>  --high;</b></p><p>  L->r[low].key=L->r[high].key;</p><p>  while(low<high&&L->r[low].key<=key)</p><p><b>  ++low;</b></p>

89、;<p>  L->r[high].key=L->r[low].key;</p><p><b>  }</b></p><p>  L->r[low].key=key;</p><p>  return low;</p><p><b>  }</b></p&

90、gt;<p>  void QSort(SqList *L,int s,int t)//對(duì)區(qū)間[s,t]進(jìn)行快速排序</p><p><b>  {</b></p><p>  int pivotloc=Partition(L,s,t);</p><p>  if(t-s<=1)</p><p>&l

91、t;b>  return;</b></p><p>  QSort(L,s,pivotloc-1);</p><p>  QSort(L,pivotloc+1,t);</p><p><b>  }</b></p><p>  void QuickSort(SqList *L) //對(duì)順序表進(jìn)行快

92、速排序</p><p><b>  {</b></p><p>  QSort(L,1,L->length);</p><p><b>  }</b></p><p>  void SelectSort(SqList *L) //簡(jiǎn)單選擇排序</p><p><

93、;b>  {</b></p><p>  int i,j,temp,t;</p><p>  for(i=1;i<L->length;i++)</p><p><b>  {</b></p><p>  for(j=i+1,t=i;j<=L->length;j++)</p&

94、gt;<p><b>  {</b></p><p>  if(L->r[t].key>L->r[j].key)</p><p><b>  t=j;</b></p><p><b>  }</b></p><p><b>  if(t

95、!=i)</b></p><p><b>  {</b></p><p>  temp=L->r[t].key;</p><p>  L->r[t].key=L->r[i].key;</p><p>  L->r[i].key=temp;</p><p><

96、;b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void HeapAdjust(SqList *L,int s,int t) //堆的賽選</p><p><b>  {</b><

97、;/p><p>  int j,key;</p><p>  key=L->r[s].key;</p><p>  for(j=2*s;j<=t;j*=2)</p><p><b>  {</b></p><p>  if(j<t&&L->r[j].key<

98、;L->r[j+1].key)</p><p><b>  ++j;</b></p><p>  if(key>=L->r[j].key)</p><p><b>  break;</b></p><p>  L->r[s].key=L->r[j].key;</p

99、><p><b>  s=j;</b></p><p><b>  }</b></p><p>  L->r[s].key=key;</p><p><b>  }</b></p><p>  void HeapSort(SqList *L) //對(duì)

100、順序表進(jìn)行堆排序</p><p><b>  {</b></p><p>  int key,i;</p><p>  for(i=L->length/2;i>0;i--)</p><p>  HeapAdjust(L,i,L->length);</p><p>  for(i=

101、L->length;i>1;--i)</p><p><b>  {</b></p><p>  key=L->r[1].key;</p><p>  L->r[1].key=L->r[i].key;</p><p>  L->r[i].key=key;</p><

102、p>  HeapAdjust(L,1,i-1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void Display(SqList *L) //輸出線性表</p><p><b>  {</b></p>

103、;<p><b>  int i;</b></p><p>  printf("數(shù)據(jù)集合輸出:\n");</p><p>  printf("序號(hào)\t\t");</p><p>  for(i=1;i<=L->length;i++)</p><p>  p

104、rintf("%d\t",i);</p><p>  printf("\n");</p><p>  printf("數(shù)據(jù)元素\t");</p><p>  for(i=1;i<=L->length;i++)</p><p>  printf("%d\t&quo

105、t;,L->r[i]);</p><p>  printf("\n");</p><p><b>  }</b></p><p>  void Menu() //程序菜單</p><p><b>  {</b></p><p>  printf(

106、"/**********************************基于線性表的各種排序************************/");</p><p>  printf(" 1:直接插入排序\n");</p><p>  printf("

107、 2:折半插入排序\n");</p><p>  printf(" 3:希爾排序\n");</p><p>  printf(" 4:冒泡排序\n");</p>

108、<p>  printf(" 5:快速排序\n");</p><p>  printf(" 6:簡(jiǎn)單選擇排序\n");</p><p>  printf("

109、 7:堆排序\n");</p><p>  printf(" 0:退出\n");</p><p>  printf("/****************************************************************************

110、**/\n");</p><p><b>  }</b></p><p><b>  測(cè)試結(jié)果如下:</b></p><p><b>  4.3測(cè)試評(píng)價(jià)</b></p><p>  優(yōu)點(diǎn):此次做的基于線性表下的查找和排序系統(tǒng),采用順序存儲(chǔ)結(jié)構(gòu),融合了各種查找和排序的算

111、法,簡(jiǎn)單方便,執(zhí)行效率高。</p><p>  不足與改進(jìn):此次課程設(shè)計(jì)由于時(shí)間有限,查找法只做了基于線性表下的查找法,基于樹(shù)的查找和計(jì)算式查找(Hash法查找)沒(méi)有做,課外空余時(shí)間可以再去做做。</p><p>  對(duì)于排序也還有歸并排序沒(méi)有做,留到課外再完善吧。</p><p><b>  五、實(shí)習(xí)體會(huì)與總結(jié)</b></p>

112、<p>  經(jīng)過(guò)這次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì),首先使我對(duì)數(shù)據(jù)結(jié)構(gòu)這門(mén)課更感興趣,也對(duì)編程和這門(mén)課程有了更深入的體會(huì)和認(rèn)知,數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計(jì)算機(jī)硬件和計(jì)算機(jī)軟件三者之間的一門(mén)核心課程。這門(mén)課對(duì)于計(jì)算機(jī)類的專業(yè)確實(shí)非常重要,起到舉足輕重的作用,如果想干計(jì)算機(jī)這一行,那這門(mén)課一定要更深入的學(xué)習(xí)才行。其次,通過(guò)這次課程設(shè)計(jì),讓我對(duì)編程方面有了極大的進(jìn)步,自己的程序調(diào)試能力也有了很大的提升,增加了自信。最后通過(guò)這次的課程設(shè)計(jì),更是讓我深

113、刻認(rèn)識(shí)到自己在學(xué)習(xí)中的不足,同時(shí)也找到了克服這些不足的方法,這也是一筆很大的資源。在以后的時(shí)間中,我們應(yīng)該利用更多的時(shí)間去上機(jī)實(shí)驗(yàn),加強(qiáng)自學(xué)的能力,多編寫(xiě)程序,相信不久后我們的編程能力都會(huì)有很大的提高,能設(shè)計(jì)出更多的更有創(chuàng)新的作品。</p><p>  總而言之,在這次的課程設(shè)計(jì)中不僅檢驗(yàn)了我所學(xué)習(xí)的知識(shí),也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。在設(shè)計(jì)過(guò)程中,和同學(xué)們相互探

114、討,相互學(xué)習(xí),相互監(jiān)督。我學(xué)會(huì)了運(yùn)籌帷幄,學(xué)會(huì)了寬容,學(xué)會(huì)了理解,也學(xué)會(huì)了做人與處世,這次課程設(shè)計(jì)對(duì)我來(lái)說(shuō)真的受益良多。</p><p><b>  六、參考文獻(xiàn)</b></p><p>  數(shù)據(jù)結(jié)構(gòu)試驗(yàn)教程(C語(yǔ)言版),王青海編著,中國(guó)鐵道部出版社,2012年9月。</p><p>  數(shù)據(jù)結(jié)構(gòu)用C語(yǔ)言描述,耿國(guó)華主編,高等教育出版社,201

溫馨提示

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

評(píng)論

0/150

提交評(píng)論