數(shù)據(jù)結構課程設計報告_第1頁
已閱讀1頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設 計 報 告</p><p>  課程名稱 數(shù)據(jù)結構 </p><p>  課題名稱 1.迷宮求解 2.一元多項式計算 </p><p>  專 業(yè) 計算機科學與技術 </p><p>  班 級 計算機 1001

2、 </p><p>  學 號 20100301012 </p><p>  姓 名 </p><p>  指導教師 </p><p>  2012年 7 月 5 日<

3、;/p><p>  課 程 設 計 任 務 書</p><p>  課程名稱 數(shù)據(jù)結構 </p><p>  課 題 1.迷宮求解 2.一元多項式計算 </p><p>  課 程 設 計 任 務 書</p><p><b>  一.設計內容</b>

4、</p><p><b>  問題1:拓撲排序</b></p><p>  大學期間各專業(yè)都要制訂相應的教學計劃。每個專業(yè)開設的課程預先已確定。而各門課程間有的是相互獨立的,而有的則有先修后修的限定。試設計相應的課程設置程序,實現(xiàn)對某專業(yè)各學期的課程的排布,其中每門課需設定課時,而各學期的總課時不能超過上限。</p><p>  測試數(shù)據(jù):學期

5、課時上限數(shù):350 ;各課程所需學時:48;課程先、后修關系如圖:</p><p>  問題2:huffman編碼</p><p>  對于確定的字符集的電文字符串編碼,實現(xiàn)最高的通信效率。編程實現(xiàn)對于給定的輸入串及各字符的已知頻度,輸出其編碼方式(各字符的二進制編碼)及對應的輸出流。</p><p><b>  測試數(shù)據(jù): </b></

6、p><p><b>  問題3:成績管理</b></p><p>  編制一應用軟件實現(xiàn)對班級成績管理?;竟δ苡袑W生信息的增刪(轉入或退學)、查找(從當前點向前或向后雙向的)、錄入、統(tǒng)計(如總分,及格率等)。建議用雙鏈表實現(xiàn)。</p><p><b>  問題4:成績排序</b></p><p>  

7、對某次考試成績排序,輸入為多門課程成績,可以任一課程成績?yōu)殛P鍵字進行檢索。建議采用快速排序等算法效率高的算法。</p><p><b>  問題5:迷宮求解</b></p><p>  一個M*N的長方陣迷宮,0和1分別表示迷宮中的通路和墻壁,對任意設定的迷宮,東、南、西、北四個方向是可能的行走方向,求出一條從入口到出口的路徑(或沒有通路)。</p>&

8、lt;p>  迷宮的測試數(shù)據(jù)如下:左上角(1,1)為入口,右下角(8,9)為出口。</p><p>  問題6:一元多項式計算</p><p>  對于任意輸入的多項式A=anxn+an-1xn-1+…a1x+a0和B=bmxm+bm-1xm-1+…b1x+b0,用鏈表存儲后實現(xiàn)A+B;A-B。</p><p><b>  測試數(shù)據(jù):</b&g

9、t;</p><p><b>  a.;</b></p><p><b>  b.;</b></p><p><b>  c.;</b></p><p><b>  d.;</b></p><p><b>  e. ;&l

10、t;/b></p><p>  問題7: 通訊錄管理</p><p>  設計一個通訊錄管理,包括通訊錄鏈表的建立、通訊者的插入、通訊者的刪除、通訊者的查詢以及信息修改等。</p><p>  要求有運行界面,從菜單中進入選項。</p><p><b>  二.設計要求</b></p><p&g

11、t;<b>  1.選題</b></p><p>  每位學生需完成兩個課題,其中一個必選,另一個自選,必選題次為,學號/7+1。</p><p>  2.課程設計報告內容說明</p><p>  1)需求分析 程序的功能;輸入輸出的要求。</p><p>  2)概要設計 程序的模塊構成以及模塊之間的層次結構、各模塊的

12、調用關系;每個模塊的功能;課題涉及的數(shù)據(jù)結構和數(shù)據(jù)庫結構;即要存儲什么數(shù)據(jù),這些數(shù)據(jù)是什么樣的結構,它們之間有什么關系等。</p><p>  3)詳細設計 采用C語言定義相關的數(shù)據(jù)類型;寫出各模塊的類C碼算法;畫出各函數(shù)的調用關系圖、主要函數(shù)的流程圖。</p><p>  4)調試分析以及設計體會 測試數(shù)據(jù):準備典型的測試數(shù)據(jù)和測試方案,包括正確的輸入及輸出結果和含有錯誤的輸入及輸出結果

13、;程序調試中遇到的問題以及解決問題的方法;課程設計過程經(jīng)驗教訓、心得體會。</p><p>  5)使用說明 用戶使用手冊:說明如何使用你編寫的程序,詳細列出每一步的操作步驟。</p><p>  6)書寫格式 見附帶說明。</p><p>  7)附錄 參考書目;源程序清單(帶注釋)。</p><p><b>  3.成績評定

14、</b></p><p>  指導老師負責驗收程序的運行結果,并結合學生的工作態(tài)度、實際動手能力、創(chuàng)新精神和設計報告等進行綜合考評,并按優(yōu)秀、良好、中等、及格和不及格五個等級給出每位同學的課程設計成績。具體考核標準包含以下幾個部分:① 平時出勤 (占10%)② 系統(tǒng)需求分析、功能設計、數(shù)據(jù)結構設計及程序總體結構合理與否(占10%)③ 程序能否完整、準確地運行,個人能否獨立、熟練地調試程序(占40%)④

15、 設計報告(占30%)注意:不得抄襲他人的報告(或給他人抄襲),一旦發(fā)現(xiàn),成績?yōu)榱惴?。?獨立完成情況(占10%)。</p><p><b>  三.進度安排</b></p><p>  第 19 周 星期一 13時:00分——17時:00分</p><p>  星期二 13時:00分——17時:00分</p><p&g

16、t;  星期三 13時:00分——17時:00分</p><p>  星期四 13時:00分——17時:00分</p><p>  第 20 周 星期一 8 時:00分——12時:00分</p><p>  星期二 8 時:00分——12時:00分</p><p><b>  附:</b></p>

17、<p>  課程設計報告裝訂順序:封面、任務書、目錄、正文、評分、附件(A4大小的圖紙及程序清單)。 </p><p>  正文的格式:一級標題用3號黑體,二級標題用四號宋體加粗,正文用小四號宋體;行距為22。</p><p>  正文的內容:一、課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實現(xiàn)(至少要有一個主要模塊的流程圖);四、程序調試;五、總

18、結;六、附件(所有程序的原代碼,要求對程序寫出必要的注釋)。</p><p>  正文總字數(shù)要求在5000字以上(不含程序原代碼)。</p><p><b>  目 錄</b></p><p>  一、迷宮求解系統(tǒng) ................................................................

19、.........................................................................1</p><p>  1. 系統(tǒng)需求分析1</p><p>  1. 1系統(tǒng)設計的意義與目的...........................................................................

20、.....................................1</p><p>  1. 2系統(tǒng)功能需求................................................................................................................................1</p><p>

21、;<b>  2. 總體設計2</b></p><p>  2. 1系統(tǒng)功能分析................................................................................................................................2</p><p>  2. 2

22、系統(tǒng)功能模塊劃分與設計............................................................................................................2</p><p>  2. 3系統(tǒng)功能模塊圖..................................................................

23、..........................................................2</p><p><b>  3. 詳細設計3</b></p><p>  3. 1定義棧的結構體............................................................................

24、...............................................3</p><p>  3. 2棧構造函數(shù)算法...........................................................................................................................3</p>&l

25、t;p>  3. 3入棧函數(shù)算法...............................................................................................................................3</p><p>  3. 4取棧頂元素函數(shù)算法.....................................

26、..............................................................................4</p><p>  3. 5出棧函數(shù)算法............................................................................................................

27、...................4</p><p>  3. 6輸入迷宮矩陣函數(shù)算法...............................................................................................................4</p><p>  3. 7迷宮矩陣求解函數(shù)算法..............

28、.................................................................................................5</p><p><b>  4. 系統(tǒng)調試7</b></p><p>  4. 1調試過程中的錯誤....................................

29、..................................................................................7</p><p>  4. 2具體調試過程........................................................................................................

30、......................7</p><p><b>  5. 結果分析9</b></p><p><b>  6. 總結10</b></p><p>  二、一元多項式計.................................................................

31、.........................................................................11</p><p>  1. 系統(tǒng)需求分析11</p><p>  1. 1系統(tǒng)設計的意義與目的.........................................................................

32、.....................................11</p><p>  1. 2系統(tǒng)功能需求..............................................................................................................................11</p><p>

33、;  2. 總體設計12</p><p>  2. 1系統(tǒng)功能分析..............................................................................................................................12</p><p>  2. 2系統(tǒng)功能模塊劃分與設計........

34、..................................................................................................12</p><p>  2. 3系統(tǒng)功能模塊圖......................................................................................

35、....................................12</p><p>  3. 詳細設計13</p><p>  3. 1定義鏈表結點結構體.................................................................................................................

36、13</p><p>  3. 2多項式計算結果輸出函數(shù)算法.................................................................................................13</p><p>  3. 3需要處理的多項式輸出函數(shù)算法......................................

37、.......................................................13</p><p>  3. 4插入結點函數(shù)算法.....................................................................................................................14</p>

38、;<p>  3. 5多項式系數(shù)和指數(shù)輸入函數(shù)算法.............................................................................................14</p><p>  3. 6結點刪除函數(shù)算法..........................................................

39、...........................................................15</p><p>  3. 7多項式相加函數(shù)算法.................................................................................................................15</p&g

40、t;<p>  3. 8多項式相減函數(shù)算法.................................................................................................................16</p><p>  4. 系統(tǒng)調試18</p><p>  4. 1調試過程中的錯誤.........

41、...........................................................................................................18</p><p>  4. 2具體調試過程..............................................................................

42、..............................................18</p><p>  5. 結果分析20</p><p><b>  6. 總結21</b></p><p><b>  三、附件22</b></p><p>  1. 迷宮求解系統(tǒng)源程序代碼22

43、</p><p>  2. 一元多項式運算系統(tǒng)源程序代碼30</p><p>  3. 參考文獻40</p><p><b>  一、迷宮求解系統(tǒng) </b></p><p><b>  系統(tǒng)需求分析</b></p><p>  1.1 系統(tǒng)設計的目的與意義</p&g

44、t;<p>  在對迷宮矩陣進行求解時,當矩陣規(guī)模比較龐大的時候,進行人工求解比較麻煩同時也容易出錯,因此需要一個迷宮求解系統(tǒng)來對迷宮矩陣進行求解。</p><p>  1.2 系統(tǒng)功能需求</p><p>  本系統(tǒng)定義了棧的結構體,棧的構造函數(shù),入棧函數(shù),出棧函數(shù),取棧頂元素函數(shù),迷宮矩陣的輸入函數(shù),迷宮矩陣求解函數(shù)以及一個主函數(shù),通過主函數(shù)調用其他幾個函數(shù)最終實現(xiàn)求得迷

45、宮矩陣的通路徑。</p><p><b>  總體設計</b></p><p>  2.1 系統(tǒng)功能分析</p><p>  系統(tǒng)通過調用函數(shù)來實現(xiàn)棧的構造,數(shù)據(jù)入棧,數(shù)據(jù)出棧,取得棧頂元素,輸入迷宮矩陣,求解迷宮矩陣等功能。InitStack( )函數(shù)用來構造棧;Push( )函數(shù)用來將數(shù)據(jù)入棧;Gettop( )函數(shù)用來取棧頂元素; Pop

46、( )用來將棧頂元素出棧;Inpute( )用來輸入迷宮矩陣;MazePath( )用來對迷宮矩陣進行求解;主函數(shù)main()用于調用這些函數(shù)。 </p><p>  2.2 系統(tǒng)功能模塊劃分與設計</p><p>  本系統(tǒng)定義了一個棧的結構體,定義了InitStack( )、Push( )、Gettop( )、Pop( )、Inpute( )、MazePath( )等函數(shù)來實現(xiàn)系統(tǒng)所需

47、功能。</p><p>  2.3 系統(tǒng)功能模塊圖</p><p>  圖2.1系統(tǒng)功能模塊</p><p><b>  詳細設計</b></p><p>  3.1 定義棧的結構體</p><p>  該結構體定義了一個整型變量用來存放當前已分配的存儲空間,數(shù)并定義了一個棧頂指針和一個棧低指針。

48、 </p><p>  typedef struct{ //定義棧的結構體</p><p>  int *base;</p><p><b>  int *top;</b></p><p>  int stacksize;</p><p><b>  }SqSta

49、ck;</b></p><p>  3.2 棧構造函數(shù)算法</p><p>  Status InitStack(SqStack &s){ </p><p><b>  //構造一個空棧s</b></p><p>  s.base=(int *)malloc(STACK_INIT_SIZE*sizeo

50、f(int));</p><p>  if(!s.base) exit(OVERFLOW); //存儲空間分配失敗</p><p>  s.top=s.base;</p><p>  s.stacksize=STACK_INIT_SIZE;</p><p>  return OK;</p><p>  }//Ini

51、tStack</p><p>  3.3 入棧函數(shù)算法</p><p>  Status Push(SqStack &s,int e){ </p><p>  //插入元素e為新的棧頂元素</p><p>  if(s.top-s.base>=s.stacksize){//棧滿,追加存儲空間</p><p&

52、gt;  s.base=(int*)realloc(s.base,(s.stacksize+STACKINCREMENT)*</p><p>  sizeof(int));</p><p>  if(!s.base) exit(OVERFLOW); //存儲空間分配失敗</p><p>  s.top=s.base+s.stacksize;</p>

53、<p>  s.stacksize+=STACKINCREMENT;</p><p><b>  }</b></p><p>  *s.top++=e;</p><p>  return OK;</p><p><b>  }//Push</b></p><p>

54、;  3.4 取棧頂元素函數(shù)算法</p><p>  Status Gettop(SqStack s,int &e){ </p><p>  //若棧不空,則用e返回棧頂元素,并返回OK;否則返回ERRORif(s.top= =s.base) return ERROR;</p><p>  e=*(s.top-1);</p>&l

55、t;p>  return OK;</p><p><b>  }//Gettop</b></p><p>  3.5 出棧函數(shù)算法</p><p>  Status Pop(SqStack &s,ElamType e){ </p><p>  //若棧不空,則刪除s的棧頂元素,并返回OK;否則返回ERR

56、OR</p><p>  if(s.top= =s.base)return ERROR;</p><p>  e=*--s.top;</p><p>  return OK;</p><p><b>  }// Pop</b></p><p>  3.6 輸入迷宮矩陣函數(shù)算法</p&g

57、t;<p>  Status **Inpute(ElamType n,ElamType m){ </p><p>  //輸入迷宮矩陣函數(shù)</p><p>  Status **p=(Status**)malloc(n*sizeof(int));//為矩陣分配存儲空間</p><p>  for(i=0;i<n;i++)</p>

58、<p>  *(p+i)=(Status *)malloc(m*sizeof(int));</p><p>  for(i=0;i<n;i++)</p><p>  for(j=0;j<m;j++)</p><p>  scanf("%d",&p[i][j]);//按行輸入迷宮矩陣的每個元素</p>

59、<p><b>  return p;</b></p><p><b>  }//Inpute</b></p><p>  3.7 迷宮矩陣求解函數(shù)算法</p><p>  Status MazePath(Status **p,ElamType n,ElamType m){ </p><p

60、>  //迷宮矩陣求解函數(shù)</p><p>  SqStack s1,s2;</p><p>  InitStack(s1); InitStack(s2);</p><p>  Push(s1,i); Push(s2,j);</p><p>  do{i=i+1; //判斷當前元素下方的元素位置是否可通,可通則將該位置入棧</p

61、><p>  if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p>  if(i==n-1&&j==m-1){//判斷當前元素是否為迷宮出口位置元素</p><p>  Push(s1,i); Push(s2,j); break;&l

62、t;/p><p><b>  }</b></p><p>  Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b>  }</b></p><p>  else{i=i-1;j=j+1;</p><p>  //判斷當前元素右方的元素位置是否可

63、通,可通則將該位置入棧</p><p>  if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p>  if(i==n-1&&j==m-1){</p><p>  Push(s1,i);Push(s2,j);break;</p

64、><p><b>  }</b></p><p>  Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b>  }</b></p><p><b>  else{</b></p><p><b>  j=j-2;

65、</b></p><p>  //判斷當前元素左方的元素位置是否可通,可通則將該位置入棧</p><p>  if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p>  if(i==n-1&&j==m-1){</p

66、><p>  Push(s1,i);Push(s2,j);break;</p><p><b>  }</b></p><p>  Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b>  }</b></p><p>  else{i=i-1;

67、 j=j+1;</p><p>  //判斷當前元素上方的元素位置是否可通,可通則將該位置入棧</p><p>  if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p>  if(i==n-1&&j==m-1){</p&g

68、t;<p>  Push(s1,i);Push(s2,j);break;</p><p><b>  }</b></p><p>  Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b>  }</b></p><p>  else{//如果該元素的

69、以上四個相鄰元素位置都不通,則出棧</p><p>  Gettop(s1,i); Gettop(s2,j);</p><p>  p[i][j]=1;Pop(s1); Pop(s2);</p><p>  Gettop(s1,i); Gettop(s2,j);</p><p><b>  }</b></p&

70、gt;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(i==0&&j==0){</p><p>  printf("該迷宮矩陣無可通路徑!\n&qu

71、ot;);</p><p><b>  c=1;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  }while(1);</p><p>  if(i!=0&&j!=0)

72、</p><p><b>  輸出該通路徑</b></p><p>  return 0K;</p><p><b>  }</b></p><p><b>  系統(tǒng)調試</b></p><p>  4.1 調試過程中的錯誤</p><

73、;p> ?、?、輸入數(shù)據(jù)時,輸錯了數(shù)據(jù)的類型會造成死循環(huán),因此輸入時需要注意。</p><p> ?、凇⑷缦聢D所示,一開始主界面輸入非正確字母時,沒有提示錯誤。容易造成用戶誤解,在主函數(shù)的switch語句結束處加上default:cout<<"選擇錯誤,請從新選擇!";就可以了。</p><p>  圖4.1 輸入錯誤無提示</p><

74、;p>  4.2 具體調試過程</p><p><b>  主界面</b></p><p>  圖4.2 系統(tǒng)主界面</p><p><b>  迷宮矩陣輸入過程</b></p><p>  圖4.3 輸入矩陣</p><p><b>  系統(tǒng)求解過程&l

75、t;/b></p><p>  圖4.4 求解路徑并輸出</p><p><b>  結果分析 </b></p><p>  程序設計了一個棧的結構體,在設計的過程中,建立了較為清晰的層次,利用了C語言編程思想來完成系統(tǒng)的設計,做到了用戶根據(jù)具體情況來輸入迷宮矩陣并經(jīng)行求解。而且界面簡潔,容易操作。不足的地方就是程序稍微長了些,不夠簡練

76、,導致出現(xiàn)錯誤很難發(fā)現(xiàn)和修改;另外就是在輸入矩陣的時候,如果所求解的矩陣非常大的話,也容易導致用戶在輸入過程中出錯。</p><p><b>  總結</b></p><p>  首先,接到設計題目之后,在對本題目進行分析的時候,我懂得了一個很重要的道理,那就是說一個程序的產(chǎn)生需要一個對題目要求有一個正確全面的分析。其次,就該考慮程序算法的問題了,一個好的算法是一個好

77、程序的靈魂,也決定了一個程序的質量。</p><p>  兩個星期的課設雖然有些疲勞和困倦,但帶給我很多的收獲。數(shù)據(jù)結構已經(jīng)學了一個學期了,有許多知識都存在似懂非懂的現(xiàn)象,這種現(xiàn)象通過實際的上機操作,已經(jīng)減少了許多。對這些知識也有了更深的理解和很好的掌握。也有很多理論上說得過去的代碼,但到了實際操作,卻是行不通的。這種困惑,有許多已經(jīng)通過實際操作解決了,并能夠深刻認識,但也有很多沒有明白。只能避過這些方法,換方法

78、實現(xiàn)。在課程設計之前,因為有了綜合實驗的經(jīng)驗與教訓,明白了寫代碼這一步是非常重要的,因為當你把代碼輸入電腦,并用編譯器將其運行,發(fā)現(xiàn)通過不了,再來檢查找出問題,這是一件非常辛苦的事情,也很浪費時間。于是在課程設計的時候,我花了四天的時間來規(guī)劃與寫代碼,將要實現(xiàn)的內容分析清楚,才把代碼輸入電腦。我覺得寫程序,應該先找到該程序中的核心地方,用多種方法來實現(xiàn)該核心,這才可能避免等到發(fā)現(xiàn)邏輯上或者編譯器不支持上的錯誤,才來想補救的措施,這樣花費

79、時間在想補救措施是很不值得的。</p><p>  這次的課程設計,真是讓我充分的感覺到了要自己設計一個程序是多么的難,以及學習好數(shù)據(jù)結構是多么的重要。在這個程序的設計過程中,我清楚的意識到自己的水平有多么的薄弱,課程的知識學得有多么的不扎實。</p><p>  以后還會有很多的課程設計,一定要吸取這次的教訓,把知識學懂學透學精,真正的為我所用,這樣走上社會我才能真正的發(fā)揮所長。<

80、/p><p><b>  二、一元多項式計算</b></p><p><b>  系統(tǒng)需求分析</b></p><p>  1.1 系統(tǒng)設計的目的與意義</p><p>  在對一元多項式進行計算時,當未知數(shù)的系數(shù)較大或指數(shù)較大的時候,進行人工求解比較麻煩同時也容易出錯,因此需要一個一元多項式計算系統(tǒng)來

81、對迷宮矩陣進行求解。</p><p>  1.2 系統(tǒng)功能需求</p><p>  本系統(tǒng)定義了鏈表結點結構體類型,多項式計算結果輸出函數(shù),需要處理的多項式輸出函數(shù),結點插入函數(shù),多項式輸入函數(shù),結點刪除函數(shù),多項式相加函數(shù),多項式相減函數(shù)以及一個主函數(shù),通過主函數(shù)調用其他幾個函數(shù)最終實現(xiàn)多項式的加減計算。</p><p><b>  總體設計</b

82、></p><p>  2.1 系統(tǒng)功能分析</p><p>  系統(tǒng)通過調用函數(shù)來建立單鏈表、結點的插入和刪除,輸入多項式系數(shù)和指數(shù),對輸入的多項式進行加減運算,輸出運算結果等功能。 Print2()函數(shù)用來輸出計算結果;Print1()函數(shù)用來輸出用戶所輸入的多項式以檢查輸入是否正確;Insert()函數(shù)用來插入結點; Input()用來輸入多項式的系數(shù)和指數(shù);Delete()函

83、數(shù)用來刪除結點;AddPolyn()函數(shù)用來進行多項式相加;ReducPolyn()函數(shù)用來進行多項式相,主函數(shù)main()用于調用這些函數(shù)。 </p><p>  2.2 系統(tǒng)功能模塊劃分與設計</p><p>  本系統(tǒng)定義了鏈表結點結構體類型,定義了Print2()、Print1()、Insert()、Input()、Delete()、AddPolyn()、ReducPolyn()等

84、函數(shù)來實現(xiàn)系統(tǒng)所需功能。</p><p>  2.3 系統(tǒng)功能模塊圖</p><p>  圖2.1系統(tǒng)功能模塊</p><p><b>  詳細設計</b></p><p>  3.1 定義鏈表結點結構體</p><p>  該結構體定義了兩個整型變量分別用來存放系數(shù)和指數(shù),并定義了一個指針用來存

85、放下一個結點的位置。</p><p>  typedef struct term{ //定義鏈表結點結構體類型</p><p>  int coef; //系數(shù)</p><p>  int expn; //指數(shù)</p><p>  struct term *next;</p><p

86、>  }term,*polynomial; </p><p>  3.2 多項式計算結果輸出函數(shù)算法</p><p>  Status Print2(polynomial z){ </p><p>  //對多項式計算結果進行輸出</p><p><b>  while(z){</b></p>

87、<p>  if(z->coef!=0){</p><p>  輸出多項式的系數(shù)和指數(shù);}</p><p>  else printf("0");</p><p>  if(z->next) printf("+");</p><p>  z=z->next;&l

88、t;/p><p><b>  }//Print2</b></p><p>  3.3 需要處理的多項式輸出函數(shù)算法</p><p>  Status Print1(polynomial z){ </p><p>  //對需要處理的多項式進行輸出</p><p><b>  while

89、(z){</b></p><p>  分別輸出需要處理的多項式每一項的系數(shù)和指數(shù);</p><p>  z=z->next;</p><p><b>  }</b></p><p>  } //Print1 </p><p>  3.4 插入結點函數(shù)算法&l

90、t;/p><p>  Status Insert(polynomial L,int i){ </p><p>  //在帶頭結點的單鏈表L中第i個位置前插入一個結點</p><p>  j=0;k=0;p=L;</p><p>  while(p&&j<i-1){ p=p->next; ++j; k++

91、; }//尋找第i-1個結點</p><p>  if(!p||j>i-1) return ERROR;//i小于1或大于表長+1</p><p>  s=(polynomial)malloc(sizeof(term));//生成新結點</p><p>  scanf("%d",&s->coef); //輸入第k+1項的

92、系數(shù)</p><p>  scanf("%d",&s->expn); //輸入第k+1項的指數(shù)</p><p>  s->next=p->next;</p><p>  p->next=s;</p><p>  return OK;</p><p><b>

93、;  }//Insert</b></p><p>  3.5 多項式系數(shù)和指數(shù)輸入函數(shù)算法</p><p>  Status Input(polynomial A,polynomial B,polynomial y){ </p><p>  //對多項式系數(shù)和指數(shù)進行輸入</p><p><b>  i=0;<

94、;/b></p><p>  scanf("%d",&a);//輸入多項式A共有多少項</p><p>  for(i=0;i<a;i++){</p><p>  Insert(A,i+1);//將多項式A第i+1項的系數(shù)和指數(shù)存到鏈表結點中 }</p><p>  y=A->next;</

95、p><p>  Print1(y);//輸出剛所輸入的多項式A</p><p>  scanf("%d",&b);//輸入多項式B共有多少項</p><p>  for(i=0;i<b;i++){</p><p>  Insert(B,i+1);//將多項式B第i+1項的系數(shù)和指數(shù)存到鏈表結點中}</p&g

96、t;<p>  y=B->next;</p><p>  Print1(y);//輸出剛所輸入的多項式B</p><p><b>  }//Input</b></p><p>  3.6 結點刪除函數(shù)算法</p><p>  Status Delete(polynomial &L,int i)

97、{ </p><p>  //在帶頭結點的單鏈表L中刪除第i個結點</p><p>  j=0; p=L;</p><p>  while(p->next&&j<i-1){ //尋找第i-1個結點,并令p指向其直接前趨</p><p>  p=p->next;j++;</p><

98、p><b>  }</b></p><p>  if(!(p->next)||j>i-1)return ERROR;</p><p>  q=p->next;p->next=q->next;</p><p><b>  free(q);</b></p><p>

99、;  return OK;</p><p><b>  }//Delete</b></p><p>  3.7 多項式相加函數(shù)算法</p><p>  Status AddPolyn(polynomial &pa,polynomial &pb){</p><p>  //對輸入的多項式進行相加運算<

100、;/p><p>  pc=(polynomial)malloc(sizeof(term));//生成新頭結點</p><p>  pc->next=NULL;m=pc;</p><p>  p=pa->next;q=pb->next;</p><p><b>  do{</b></p>&

101、lt;p><b>  i=1; j=1;</b></p><p><b>  if(p){</b></p><p>  while(q&&p->expn!=q->expn){q=q->next; j++;</p><p>  }//判斷兩個多項式的其中一項指數(shù)是否相等</p&

102、gt;<p>  if(q&&p->expn==q->expn){ </p><p>  //如果指數(shù)相等,則系數(shù)相加,并存入新鏈表的結點中</p><p>  s=(polynomial)malloc(sizeof(term));//生成新結點</p><p>  s->coef=p->coef+q->

103、coef;</p><p>  s->expn=p->expn; s->next=NULL;</p><p>  m->next=s; m=m->next;</p><p>  Delete(pb,j); Delete(pa,i);//刪除使用過的結點</p><p><b>  j=1;<

104、/b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  //指數(shù)不相等,直接將a鏈表的第一個結點插入新鏈表中</p><p>  s=(polynomial)malloc(sizeof(term));</p><p

105、>  s->coef=p->coef; s->expn=p->expn;</p><p>  s->next=NULL; m->next=s;</p><p>  m=m->next;</p><p>  Delete(pa,i);//在a中刪除使用過的結點</p><p><b>

106、;  }</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  //若鏈表a已經(jīng)為空,鏈表b不為空,則將b鏈表插入新鏈表中</p><p>  m->next=pb->next;</p><p&

107、gt;<b>  break;</b></p><p><b>  }</b></p><p>  p=pa->next; q=pb->next;</p><p>  }while(p||q);</p><p>  return pc;</p><p>  }/

108、/AddPolyn</p><p>  3.8 多項式相減函數(shù)算法</p><p>  Status ReducPolyn(polynomial &pa,polynomial &pb) {</p><p>  //對輸入的多項式進行相減運算</p><p>  pc=(polynomial)malloc(sizeof(term

109、));/生成新頭結點</p><p>  pc->next=NULL;m=pc;</p><p>  p=pa->next;q=pb->next;</p><p><b>  do{</b></p><p>  i=1; j=1;</p><p><b>  if

110、(p){</b></p><p>  while(q&&p->expn!=q->expn){</p><p>  q=q->next;j++;</p><p>  }//判斷兩個多項式的其中某一項指數(shù)是否相等</p><p>  if(q&&p->expn==q->

111、expn){</p><p>  //如果指數(shù)相等,則系數(shù)相減,并存入新鏈表的結點中</p><p>  s=(polynomial)malloc(sizeof(term));//生成新結點</p><p>  s->coef=p->coef-q->coef;</p><p>  s->expn=p->expn;

112、s->next=NULL;m->next=s;</p><p>  m=m->next;</p><p>  Delete(pb,j);Delete(pa,i);//刪除使用過的結點</p><p><b>  j=1;</b></p><p><b>  }</b>&l

113、t;/p><p>  else{ //指數(shù)不相等,直接將a鏈表的第一個結點插入新鏈表中</p><p>  s=(polynomial)malloc(sizeof(term));</p><p>  s->coef=p->coef;s->expn=p->expn;</p><p>  s->next=NULL;

114、m->next=s;</p><p>  m=m->next;Delete(pa,i); //在a中刪除使用過的結點</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else{</b></p>

115、;<p>  //若鏈表a已經(jīng)為空,鏈表b不為空,則將b鏈表結點中所存的系數(shù)符號取反,并同指數(shù)一起存入結點,插入新鏈表中</p><p>  s=(polynomial)malloc(sizeof(term));//生成新結點</p><p>  s->coef=-q->coef;s->expn=q->expn;</p>&l

116、t;p>  s->next=NULL;m->next=s;</p><p>  m=m->next;Delete(pb,i);//在b中刪除使用過的結點</p><p><b>  }</b></p><p>  p=pa->next;q=pb->next;</p><p>  

117、}while(p||q);</p><p>  return pc;</p><p>  }//ReducPolyn</p><p><b>  系統(tǒng)調試</b></p><p>  4.1 調試過程中的錯誤</p><p>  .①、剛開始些程序時,是寫主函數(shù),然后在寫調用函數(shù)。這時就會出現(xiàn)下面

118、這種情況;所以必須在主函數(shù)前面先定義各調用函數(shù)。</p><p><b>  圖4.1錯誤提示</b></p><p> ?、凇⒃跇嫿ㄦ湵頃r,使用尾插法進行存入數(shù)據(jù)的,所以最后面返回的應是頭結點head而不是最后一個結點q;否則當調用該鏈表時,第一個結點變成原來的最后一個結點,會導致結果的錯誤。</p><p>  4.2 具體調試過程<

119、/p><p><b>  主界面</b></p><p>  圖4.2 系統(tǒng)主界面</p><p><b>  輸入多項式</b></p><p>  圖4.3 輸入多項式</p><p><b>  多項式相加</b></p><p&g

120、t;  圖4.4 多項式相加運算</p><p><b>  多項式相減</b></p><p>  圖4.5 多項式相減運算</p><p><b>  退出系統(tǒng)</b></p><p><b>  圖4.6 退出系統(tǒng)</b></p><p><

121、b>  結果分析 </b></p><p>  這個程序界面比較簡潔,操作簡單。程序做到了根據(jù)用戶的需求,自行輸入多項式,并對輸入的多項式進行加減運算。在設計的過程中,程序中設計了一個鏈表結點的結構體,利用了面向過程的C語言編程思想來完成系統(tǒng)的設計。但是程序還是有寫不足的地方,一個就是程序代碼長不簡練,導致出現(xiàn)錯誤很難發(fā)現(xiàn)和修改;另外一個就是在輸入多項式系數(shù)和指數(shù)的時候,如果要進行處理的多項式項

122、數(shù)比較大的話,容易使用戶在輸入過程中感到無聊從而導致出錯。</p><p><b>  總結</b></p><p>  從開始做數(shù)據(jù)結構課程設計,到現(xiàn)在已經(jīng)過去一周多了。我學到了很多知識,這些都是在課堂上很難單學習理論只是就能理解的。所以我對該課程設計很感興趣,也很認真的做實驗。我也很高興能夠和同學們一起做課設,一起探討,不會的話還可以求救于老師,趙老師也很樂意想我

123、們解釋難懂的地方,所以我感到很榮幸。做課設表面上看起來好像很簡單似的,其實從中我們可以學到很多東西,因為我們大家都知道數(shù)據(jù)結構是很重要的一門學科,也是一門很深奧的學科,里面有很多東西值得我們去深究。</p><p>  數(shù)據(jù)結構是計算機存儲、組織數(shù)據(jù)的方式。數(shù)據(jù)結構是指相互之間存在一種或多種特定關系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結構可以帶來更高的運行或者存儲效率。數(shù)據(jù)結構往往同高效的檢索算法和索引技

124、術有關。</p><p>  一般認為,一個數(shù)據(jù)結構是由數(shù)據(jù)元素依據(jù)某種邏輯聯(lián)系組織起來的。對數(shù)據(jù)元素間邏輯關系的描述稱為數(shù)據(jù)的邏輯結構;數(shù)據(jù)必須在計算機內存儲,數(shù)據(jù)的存儲結構是數(shù)據(jù)結構的實現(xiàn)形式,是其在計算機內的表示;此外討論一個數(shù)據(jù)結構必須同時討論在該類數(shù)據(jù)上執(zhí)行的運算才有意義。在許多類型的程序的設計中,數(shù)據(jù)結構的選擇是一個基本的設計考慮因素。許多大型系統(tǒng)的構造經(jīng)驗表明,系統(tǒng)實現(xiàn)的困難程度和系統(tǒng)構造的質量都嚴

125、重的依賴于是否選擇了最優(yōu)的數(shù)據(jù)結構。許多時候,確定了數(shù)據(jù)結構后,算法就容易得到了。有些時候事情也會反過來,我們根據(jù)特定算法來選擇數(shù)據(jù)結構與之適應。不論哪種情況,選擇合適的數(shù)據(jù)結構都是非常重要的。選擇了數(shù)據(jù)結構,算法也隨之確定,是數(shù)據(jù)而不是算法是系統(tǒng)構造的關鍵因素。這種洞見導致了許多種軟件設計方法和程序設計語言的出現(xiàn),面向對象的程序設計語言就是其中之一。</p><p>  通過本次數(shù)據(jù)結構的課程設計,我初步學會了

126、設計報告的基本方法,學會了怎樣去借鑒別人的方法和經(jīng)驗,知道了如何整合資料和處理這些資料的能力,這位以后做畢設的論文打下了基礎,使我感覺比較好的是有一種成功的喜悅,雖然在編譯的時候會經(jīng)常因為一些小的錯誤而心煩意亂,但是也不失為一件好事,失敗的越多積累的經(jīng)驗越豐富,對人的考驗也比較多,那么在最后編譯成功時的喜悅就越濃烈,也是自己的能力有了進一步的提高。由于知識和經(jīng)驗的不足,所以在以后還是需要較多的努力的,還是會在以后的學習過程中不斷地提高和

溫馨提示

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

評論

0/150

提交評論