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

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計 報 告</p><p>  課程設(shè)計名稱:數(shù)據(jù)結(jié)構(gòu)和算法課程設(shè)計</p><p>  課程設(shè)計題目: 順序表結(jié)構(gòu)和算法</p><p><b>  目 錄</b></p><p><b>  目錄</b></p><p><b

2、>  學(xué)術(shù)誠信聲明I</b></p><p>  1 問題分析和任務(wù)定義1</p><p><b>  1.1題目1</b></p><p><b>  1.2內(nèi)容1</b></p><p>  2系統(tǒng)功能模塊結(jié)構(gòu)圖2</p><p>  3數(shù)據(jù)

3、結(jié)構(gòu)設(shè)計及使用說明3</p><p>  3.1 定義線性表抽象數(shù)據(jù)類型3</p><p>  3.1.1基本操作:3</p><p>  3.2詳細設(shè)計和編碼4</p><p>  3.2.1類型定義4</p><p>  3.2.2順序表初始化4</p><p>  3.2.3子

4、函數(shù)輸出函數(shù)4</p><p>  4 相關(guān)函數(shù)的描述6</p><p>  4.1 本函數(shù)包含的十個函數(shù)6</p><p>  4.1.1各函數(shù)之間的調(diào)用關(guān)系6</p><p>  4.2主函數(shù)的代碼7</p><p><b>  4.3用法說明7</b></p>

5、<p>  5算法的程序流程圖8</p><p><b>  6程序測試結(jié)果9</b></p><p><b>  7參考文獻11</b></p><p>  8附錄(程序清單)12</p><p><b>  2</b></p><p&g

6、t;  1 問題分析和任務(wù)定義</p><p><b>  1.1題目</b></p><p><b>  順序表結(jié)構(gòu)和算法。</b></p><p><b>  1.2內(nèi)容</b></p><p>  1、設(shè)計出順序表結(jié)構(gòu)的相關(guān)函數(shù)庫,以便在程序設(shè)計中調(diào)用。</p&g

7、t;<p>  2、實現(xiàn)順序表的各種基本函數(shù)以及常用函數(shù)。</p><p>  3、給出1-2個例子,通過調(diào)用自己的庫函數(shù)來實現(xiàn)問題的求解。</p><p>  4、設(shè)計順序表的相關(guān)函數(shù),以便在程序調(diào)用中調(diào)用,進行順序表中元素的插</p><p>  入、查找、取出、刪除等操作。</p><p><b>  1.3要求

8、</b></p><p>  1、設(shè)計軟件的系統(tǒng)功能模塊及各模塊的程序流程圖。</p><p>  2、采用模塊化編程,系統(tǒng)中的各項功能分別用函數(shù)編寫。</p><p>  3、學(xué)生獨立完成系統(tǒng)的設(shè)計,編碼和調(diào)試工作并通過指導(dǎo)老師的檢查。</p><p>  4、按課程設(shè)計規(guī)范撰寫課程設(shè)計報告。</p><p&

9、gt;  2系統(tǒng)功能模塊結(jié)構(gòu)圖</p><p>  圖1-順序表結(jié)構(gòu)功能模塊圖</p><p>  3數(shù)據(jù)結(jié)構(gòu)設(shè)計及使用說明</p><p>  3.1 定義線性表抽象數(shù)據(jù)類型</p><p>  3.1.1基本操作:</p><p>  SqLsetnull (L)</p><p>  操作前

10、提:L是一個未初始化的線性表</p><p>  操作結(jié)果:將L初始化為一個空的線性表</p><p>  操作前提:L是一個已初始化的空表</p><p>  操作結(jié)果:建立一個非空的線性表L</p><p>  SqLinsert (L,s,i)</p><p>  操作前提:線性表L已存在</p>

11、<p>  操作結(jié)果:將元素s插入到線性表L的i位置</p><p>  SqLdelete (L,i)</p><p>  操作前提:線性表L已存在</p><p>  操作結(jié)果:將線性表L中i位置的元素刪除,</p><p>  SqLlocate (L,x)</p><p>  操作前提:線性表L已存在

12、</p><p>  操作結(jié)果:在線性表L中查找元素x,</p><p>  若存在,返回元素在表中的序號位置;</p><p><b>  若不存在,返回-1</b></p><p>  SqLlength_L(L)</p><p>  初始條件:線性表L已存在</p><p

13、>  操作結(jié)果:返回L中數(shù)據(jù)元素個數(shù)</p><p>  SqLget (L,i)</p><p>  初始條件:線性表L已存在</p><p>  操作結(jié)果:判斷第i個數(shù)據(jù)元素值是否存在,存在則返回1;否則,返回0; </p><p>  3.2詳細設(shè)計和編碼</p><p><b>  3.2.1類

14、型定義</b></p><p>  typedef struct</p><p>  { Datatype data[maxlen];</p><p><b>  int last;</b></p><p>  }Sequenlist; /*將data和len封裝成一個結(jié)構(gòu)體*/</p><

15、;p>  3.2.2順序表初始化</p><p>  Sequenlist *SqLsetnull()</p><p><b>  {</b></p><p>  Sequenlist *L;</p><p>  L=(Sequenlist*)malloc(sizeof(Sequenlist));</p&g

16、t;<p>  L->last=-1;</p><p>  return(L);</p><p><b>  }</b></p><p>  3.2.3子函數(shù)輸出函數(shù)</p><p>  void print(Sequenlist *L)</p><p><b>  

17、{</b></p><p><b>  int h;</b></p><p>  printf("顯示結(jié)果為: ");</p><p>  for(h=0;h<L->last+1;h++) </p><p><b>  {</b></p>&

18、lt;p>  printf("%d ",L->data[h]);</p><p>  }/*輸出順序表中所有元素*/</p><p>  printf("\n"); </p><p><b>  }</b></p><p><b>  判表滿 </b

19、></p><p>  int SqLempty(Sequenlist *L)</p><p><b>  {</b></p><p>  if(L->last+1>=50)</p><p>  return(1);</p><p><b>  else</b&g

20、t;</p><p>  return(0);</p><p><b>  }</b></p><p><b>  插入函數(shù)</b></p><p>  int SqLinsert(Sequenlist *L,Datatype s,int i)</p><p><b&g

21、t;  {</b></p><p><b>  int j;</b></p><p>  if(SqLempty(L)==1)</p><p><b>  {</b></p><p>  printf("表滿溢出\n");</p><p>  

22、return(0);</p><p><b>  }</b></p><p>  else if(i<1||i>L->last+2)</p><p><b>  {</b></p><p>  printf("位置出錯\n");</p><p

23、>  return(0);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  for(j=L->last;j>=i-1;j--)</p><p&

24、gt;  L->data[j+1]=L->data[j];/*節(jié)點往后移動一個位置*/</p><p>  L->data[i-1]=s; /*插入新元素s*/</p><p>  L->last++; /*last仍指向最后一個元素*/</p><

25、p>  return (1); </p><p><b>  }</b></p><p><b>  取數(shù)函數(shù)</b></p><p>  int SqLget(Sequenlist *L, int i)</p><p><b>  {</b></p>&

26、lt;p><b>  int x;</b></p><p>  if(i<1||i>L->last+1)</p><p><b>  {</b></p><p>  printf("取數(shù)出錯!");</p><p>  return (0);</p

27、><p><b>  }</b></p><p><b>  else</b></p><p>  x=L->data[i-1];</p><p>  return (1) ;</p><p><b>  }</b></p><p&

28、gt;<b>  更新函數(shù)</b></p><p>  int SqLupdate(Sequenlist *L,int i,int s)</p><p><b>  {</b></p><p>  if(i<1||i>L->last+2)</p><p><b>  {&

29、lt;/b></p><p>  printf("位置出錯\n");</p><p>  return(0);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b

30、></p><p>  L->data[i-1]=s;</p><p>  return (1); </p><p><b>  }</b></p><p><b>  }</b></p><p>  其中用switch來做選擇操作,從而實現(xiàn)個子函數(shù)對應(yīng)的功能。

31、</p><p>  4 相關(guān)函數(shù)的描述</p><p>  4.1 本函數(shù)包含的十個函數(shù)</p><p><b>  主函數(shù)main()</b></p><p>  初始化順序表函數(shù)SqLsetnull ()</p><p>  顯示順序表內(nèi)容函數(shù)print()</p><

32、;p>  插入元素函數(shù)SqLinsert ()</p><p>  刪除元素函數(shù)SqLdelete ()</p><p>  查找元素函數(shù)SqLlocate ()</p><p>  取值函數(shù)SqLget ()</p><p><b>  判表滿</b></p><p>  4.1.1各函數(shù)

33、之間的調(diào)用關(guān)系</p><p><b>  4.2主函數(shù)的代碼</b></p><p><b>  main()</b></p><p>  { 說明一個單鏈表 L ;</p><p><b>  初始化 L ;</b></p><p><b>

34、;  建立 L ;</b></p><p><b>  顯示 L ;</b></p><p><b>  }</b></p><p><b>  4.3用法說明</b></p><p>  程序執(zhí)行后,首先輸出:</p><p><b&

35、gt;  “請輸入表長:”n</b></p><p><b>  輸入表長后,輸出:</b></p><p>  “請輸入n個元素值:”</p><p>  輸入n個元素值后,輸出:</p><p><b>  “請選擇:”</b></p><p>  任意選擇指

36、定操作的某一操作序號:如3</p><p>  “輸入需要刪除的元素”</p><p>  然后程序自動執(zhí)行結(jié)果并顯示出來</p><p><b>  5算法的程序流程圖</b></p><p>  圖二-順序表的程序流程圖</p><p><b>  6程序測試結(jié)果</b>

37、</p><p>  執(zhí)行情況如下:請正確輸入4個元素:1 2 3 4</p><p><b>  請選擇:</b></p><p><b>  1:顯示所有元素 </b></p><p><b>  2:增加一個元素</b></p><p>  3:按

38、數(shù)值刪除某個元素 </p><p>  4:按位置刪除某個元素 </p><p><b>  5:按位置更新</b></p><p><b>  6:按數(shù)值更新</b></p><p>  7:按位置查找某元素</p><p><b>  8:按值查找某元素<

39、/b></p><p><b>  9:退出程序</b></p><p><b>  3</b></p><p><b>  需要刪除的元素:4</b></p><p>  顯示結(jié)果為:1 2 3 </p><p>  測試結(jié)果如下圖所示:<

40、/p><p><b>  圖三 插入一個數(shù)字</b></p><p>  圖四 刪除一個數(shù)字 圖五 更改一個數(shù)字</p><p><b>  7參考文獻</b></p><p>  【1】嚴蔚敏、陳文博,數(shù)據(jù)結(jié)構(gòu)應(yīng)用算法教程【M】.北京:清華大學(xué)出版社,20

41、11.5</p><p>  【2】張小莉、王淼、羅文劼,數(shù)據(jù)結(jié)構(gòu)與算法【M】.北京:機械工業(yè)出版社,2014.4</p><p><b>  8附錄(程序清單)</b></p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p&

42、gt;<p>  typedef int Datatype;</p><p>  typedef struct Sequenlist</p><p><b>  {</b></p><p>  Datatype data[50];</p><p><b>  int last;</b>

43、</p><p>  }Sequenlist;</p><p>  Sequenlist *SqLsetnull()</p><p><b>  {</b></p><p>  Sequenlist *L;</p><p>  L = (Sequenlist*)malloc(sizeof(Seq

44、uenlist));</p><p>  L->last = -1;</p><p>  return(L);</p><p><b>  }</b></p><p>  void print(Sequenlist *L)</p><p><b>  {</b><

45、/p><p><b>  int h;</b></p><p>  printf("顯示結(jié)果為: ");</p><p>  for (h = 0; h<L->last + 1; h++)</p><p><b>  {</b></p><p> 

46、 printf("%d ", L->data[h]);</p><p>  }/*輸出順序表中所有元素*/</p><p>  printf("\n");</p><p><b>  }</b></p><p>  int SqLempty(Sequenlist *L)<

47、;/p><p><b>  {</b></p><p>  if (L->last + 1 >= 50)</p><p>  return(1);</p><p><b>  else</b></p><p>  return(0);</p><p

48、><b>  }</b></p><p>  int SqLinsert(Sequenlist *L, Datatype s, int i)</p><p><b>  {</b></p><p><b>  int j;</b></p><p>  if (SqLemp

49、ty(L) == 1)</p><p><b>  {</b></p><p>  printf("表滿溢出\n");</p><p>  return(0);</p><p><b>  }</b></p><p>  else if (i<1 |

50、| i>L->last + 2)</p><p><b>  {</b></p><p>  printf("位置出錯\n");</p><p>  return(0);</p><p><b>  }</b></p><p><b>

51、;  else</b></p><p><b>  {</b></p><p>  for (j = L->last; j >= i - 1; j--)</p><p>  L->data[j + 1] = L->data[j];/*節(jié)點往后移動一個位置*/</p><p>  L-&

52、gt;data[i - 1] = s; /*插入新元素s*/</p><p>  L->last++; /*last仍指向最后一個元素*/</p><p>  return (1); </p><p><b>  }</b></p>

53、;<p><b>  }</b></p><p>  int SqLdelete(Sequenlist *L, int i)</p><p><b>  {</b></p><p><b>  int j;</b></p><p>  if (L->last

54、<0)</p><p><b>  {</b></p><p>  printf("順序表空!");</p><p>  return(0);</p><p><b>  }</b></p><p>  else if (i<1 || (i&g

55、t;L->last + 1)) /*檢查空表及刪除位置的合法性*/</p><p><b>  {</b></p><p>  printf("參數(shù)出錯!");</p><p>  return(0);</p><p><b>  }</b></p><

56、p><b>  else</b></p><p><b>  {</b></p><p>  for (j = i; j <= L->last + 1; j++)</p><p>  L->data[j - 1] = L->data[j];</p><p>  L-&g

57、t;last--;</p><p>  return(1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  int SqLupdate(Sequenlist *L, int i, int s)</p><p><b&

58、gt;  {</b></p><p>  if (i<1 || i>L->last + 2)</p><p><b>  {</b></p><p>  printf("位置出錯\n");</p><p>  return(0);</p><p>

59、<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  L->data[i - 1] = s;</p><p>  return (1);</p><p><b>

60、  }</b></p><p><b>  }</b></p><p>  int SqLget(Sequenlist *L, int i)</p><p><b>  {</b></p><p><b>  int x;</b></p><p&

61、gt;  if (i<1 || i>L->last + 1)</p><p><b>  {</b></p><p>  printf("取數(shù)出錯!");</p><p>  return (0);</p><p><b>  }</b></p>

62、<p><b>  else</b></p><p>  x = L->data[i - 1];</p><p>  return (1);</p><p><b>  }</b></p><p>  void SqLlocate(Sequenlist *L, int x)</

63、p><p><b>  {</b></p><p>  int i, z = 0;</p><p>  for (i = 0; i<L->last + 1; i++)</p><p><b>  {</b></p><p>  if (L->data[i] ==

64、 x)</p><p><b>  {</b></p><p>  printf("該元素的位置為:%d", i + 1);</p><p><b>  z = 1;</b></p><p><b>  }</b></p><p>&

65、lt;b>  }</b></p><p>  if (z == 0)</p><p>  printf("不存在此元素!");</p><p><b>  }</b></p><p>  void Delete_x(Sequenlist *L, int x)</p>&

66、lt;p><b>  {</b></p><p>  int j, k, z = 0;</p><p>  for (j = 0; j<L->last + 1; j++){</p><p>  if (L->data[j] == x) {</p><p>  for (k = j; k<L-

67、>last + 1; k++){</p><p>  L->data[k] = L->data[k + 1]; /*向前移動一個位置*/</p><p><b>  }</b></p><p>  L->last--;</p><p>  j--; /*返回到刪除的位置*/</p>

68、<p><b>  z = 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (z == 0)</p><p>  printf("不存在此元素!");</p>

69、<p><b>  }</b></p><p>  void Update_x(Sequenlist *L, int x)</p><p><b>  {</b></p><p>  int j, k, z = 0, t = 1;</p><p>  for (j = 0; j<L

70、->last + 1; j++)</p><p><b>  {</b></p><p>  if (L->data[j] == x)</p><p><b>  {</b></p><p>  printf("將第%d次出現(xiàn)的數(shù)%d更改為:", t, x);<

71、/p><p>  scanf("%d", &k);</p><p>  L->data[j] = k;</p><p><b>  z = 1;</b></p><p><b>  t++;</b></p><p><b>  }<

72、;/b></p><p><b>  }</b></p><p>  if (z == 0)</p><p>  printf("不存在此元素!");</p><p><b>  }</b></p><p>  int main()</p>

73、;<p><b>  {</b></p><p>  Sequenlist *L;</p><p>  int i, j, t, s, h, m, n, flag = 1;</p><p>  L = SqLsetnull();</p><p>  printf("請輸入表長:");&l

74、t;/p><p>  scanf("%d", &i); L->last = i - 1;</p><p>  printf("請輸入%d個元素值:", i); /*確定表長*/</p><p>  for (t = 0; t<i; t++)</p><p>  sc

75、anf("%d", &L->data[t]); /*輸入表中元素*/</p><p>  while (flag) /*使用標(biāo)識flag*/</p><p><b>  {</b></p><p>  printf("請選擇:\n");</p>

76、<p>  printf("1:顯示所有元素\n");</p><p>  printf("2:增加一個元素\n");</p><p>  printf("3:按數(shù)值刪除某個元素\n");</p><p>  printf("4:按位置刪除某元素\n");</p>

77、<p>  printf("5:按位置更改\n");</p><p>  printf("6:按數(shù)值更改\n");</p><p>  printf("7:按位置查找(?。┰豛n");</p><p>  printf("8:按值查找一個元素\n");</p>

78、<p>  printf("9:退出程序\n"); /*輸入順序表元素之后顯示選項*/</p><p>  scanf("%d", &j);</p><p>  switch (j) /*當(dāng)輸入數(shù)字j時自動調(diào)用函數(shù)庫中的函數(shù)實現(xiàn)功能*/</p>

79、<p><b>  {</b></p><p>  case 1:{print(L); break; }</p><p><b>  case 2:</b></p><p><b>  {</b></p><p>  printf("輸入需要插入的數(shù)值和位

80、置:");</p><p>  scanf("%d %d", &s, &i);</p><p>  h = SqLinsert(L, s, i);</p><p><b>  if (h)</b></p><p><b>  {</b></p>

81、;<p>  printf("插入之后的線性表:"); /*顯示插入元素后的順序表*/</p><p><b>  print(L);</b></p><p><b>  }</b></p><p><b>  break;</b><

82、/p><p><b>  }</b></p><p><b>  case 3:</b></p><p><b>  {</b></p><p>  printf("輸入需要刪除的元素:");</p><p>  scanf("

83、%d", &s);</p><p>  Delete_x(L, s); /*顯示刪除元素后的順序表*/</p><p><b>  print(L);</b></p><p><b>  break;</b></p><p><b>  }&l

84、t;/b></p><p><b>  case 4:</b></p><p><b>  {</b></p><p>  printf("輸入需要刪除的數(shù)值位置:");</p><p>  scanf("%d", &s);</p>

85、<p>  h = SqLdelete(L, s);</p><p>  printf("\n");</p><p><b>  if (h)</b></p><p><b>  {</b></p><p>  printf("刪除之后的線性表:\n&quo

86、t;); /*顯示刪除元素后的順序表*/</p><p><b>  print(L);</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b>

87、</p><p><b>  case 5:{</b></p><p>  printf("輸入需要更改的位置和更改后的數(shù)據(jù):");</p><p>  scanf("%d %d", &m, &n);</p><p>  h = SqLupdate(L, m, n)

88、;</p><p><b>  if (h)</b></p><p><b>  {</b></p><p>  printf("插入之后的線性表:"); /*顯示更新元素后的順序表*/</p><p><b>  print(L);<

89、/b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 6:{</b></p><p>  printf(

90、"輸入需要更改的數(shù)");</p><p>  scanf("%d", &m);</p><p>  Update_x(L, m);</p><p><b>  print(L);</b></p><p><b>  break;</b></p&g

91、t;<p><b>  }</b></p><p><b>  case 7:{</b></p><p>  printf("取出第n個元素:");</p><p>  scanf("%d", &i);</p><p>  h = SqL

92、get(L, i);</p><p><b>  if (h)</b></p><p><b>  {</b></p><p>  printf("所取的數(shù)據(jù)元素為:");</p><p>  printf("%d\n", L->data[i - 1])

93、; /*輸出所取元素*/</p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("輸入序號超出范圍!\n"); /*輸入不合法報錯*/</p><p><b>

94、  break;</b></p><p><b>  }</b></p><p><b>  case 8:</b></p><p><b>  {</b></p><p>  printf("輸入需要查找的數(shù)值:");</p>&

95、lt;p>  scanf("%d", &s);</p><p>  SqLlocate(L, s);</p><p>  printf("\n");</p><p><b>  break;</b></p><p><b>  }</b><

96、/p><p><b>  case 9:</b></p><p><b>  flag = 0;</b></p><p>  printf("程序結(jié)束,按任意鍵退出!\n");</p><p><b>  }</b></p><p>&l

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論