數(shù)據(jù)結(jié)構課程設計---學生成績管理系統(tǒng)(部分)_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  數(shù)據(jù)結(jié)構課程設計</b></p><p>  題 目 單鏈表的基本操作-建立和遍歷 </p><p>  學生成績管理系統(tǒng)-排列 </p><p>  排序問題-選擇排序,直接插入排序</p><p>  完成日期 2012年1月6日</p>&

2、lt;p><b>  課程設計任務書</b></p><p><b>  一、任務及要求</b></p><p>  設計(研究)內(nèi)容和要求</p><p>  研究內(nèi)容:單鏈表的基本操作,學生成績管理系統(tǒng),二叉樹的運算</p><p><b>  任務和要求:</b>&

3、lt;/p><p> ?。?)學習數(shù)據(jù)結(jié)構基礎知識,掌握數(shù)據(jù)結(jié)構典型的算法的使用。</p><p> ?。?)對指導教師下達的題目進行任務分析。</p><p> ?。?)根據(jù)分析結(jié)果完成設計。</p><p> ?。?)編程:在計算機上實現(xiàn)題目的代碼實現(xiàn)。</p><p> ?。?)完成對程序的測試和調(diào)試。</p&

4、gt;<p> ?。?)提交課程設計報告(約二十頁),含程序代碼及運行結(jié)果。</p><p><b>  2. 原始依據(jù)</b></p><p>  結(jié)合數(shù)據(jù)結(jié)構課程中的基本理論和基本算法,正確分析出數(shù)據(jù)的邏輯結(jié)構,合理地選擇相應的存儲結(jié)構,并能設計出解決問題的有效算法。提高程序設計和調(diào)試能力。學生通過上機實習,驗證自己設計的算法的正確性。學會有效利用基

5、本調(diào)試方法,迅速找出程序代碼中的錯誤并且修改。</p><p><b>  二、工作量</b></p><p>  2周(10個工作日)時間。</p><p><b>  三、計劃安排</b></p><p>  第1個工作日-第2個工作日:查找相關資料、書籍,閱讀示例文檔,選擇題目。</p&

6、gt;<p>  第3個工作日:題目分析,設計算法。</p><p>  第4個工作日-5個工作日: 功能模塊的劃分和設計。</p><p>  第6個工作日:實現(xiàn)具體數(shù)據(jù)結(jié)構和模塊。</p><p>  第7個工作日-第8個工作日:程序設計與調(diào)試,編寫課程設計報告。</p><p>  第9個工作日:上交課程設計報告。<

7、/p><p>  第10個工作日:軟件驗收、答辯,成績評定。</p><p><b>  指導教師簽字:</b></p><p>  2011年12月26日</p><p><b>  目 錄</b></p><p>  題目一:單鏈表的基本操作1</p>

8、<p><b>  1 需求分析1</b></p><p>  1.1 問題描述1</p><p>  1.2 實現(xiàn)要求1</p><p><b>  2.概要設計1</b></p><p>  2.1邏輯結(jié)構設計1</p><p>  2.2功能結(jié)構設計

9、2</p><p>  2.3物理結(jié)構設計2</p><p>  3 算法設計與實現(xiàn)3</p><p><b>  3.1算法設計3</b></p><p>  3.2算法實現(xiàn)與調(diào)試3</p><p>  題目二:線性表的應用——學生成績管理4</p><p>

10、<b>  1 需求分析4</b></p><p>  1.1 問題描述4</p><p>  1.2 實現(xiàn)要求4</p><p><b>  2.概要設計4</b></p><p>  2.1邏輯結(jié)構設計4</p><p>  2.2功能結(jié)構設計5</p&

11、gt;<p>  2.3物理結(jié)構設計5</p><p>  3 算法設計與實現(xiàn)6</p><p><b>  3.1算法設計6</b></p><p>  3.2算法實現(xiàn)與調(diào)試7</p><p>  題目三:排序問題8</p><p><b>  1 需求分析8

12、</b></p><p>  1.1 問題描述8</p><p>  1.2 實現(xiàn)要求8</p><p><b>  2.概要設計8</b></p><p>  2.1邏輯結(jié)構設計8</p><p>  2.2功能結(jié)構設計8</p><p>  2.3

13、物理結(jié)構設計9</p><p>  3 算法設計與實現(xiàn)9</p><p><b>  3.1算法設計9</b></p><p>  3.2算法實現(xiàn)與調(diào)試11</p><p><b>  總 結(jié)13</b></p><p><b>  參考文獻14<

14、;/b></p><p>  附錄 全部代碼15</p><p><b>  題目一15</b></p><p><b>  題目二22</b></p><p><b>  題目三30</b></p><p>  題目一:單鏈表的基本操作&

15、lt;/p><p><b>  1 需求分析</b></p><p><b>  1.1 問題描述</b></p><p>  用學過的方法建立單鏈表,掌握單鏈表的建立、插入,查找、刪除、逆置等基本算</p><p>  法和操作。掌握指針類型的應用和結(jié)構體的具體操作,初步掌握采用自底向上,分模塊進行的

16、程序的調(diào)試與測試。</p><p><b>  1.2 實現(xiàn)要求</b></p><p><b>  (1)建立單鏈表</b></p><p>  用尾插法建立帶頭結(jié)點的單鏈表h,從鍵盤輸入各整型數(shù)據(jù)元素,以“-1”</p><p>  作為輸入結(jié)束標志符。 </p><

17、p>  (2) 遍歷單鏈表h</p><p>  依次輸出鏈表中各數(shù)據(jù)元素。 </p><p><b>  (3) 按序號查找</b></p><p>  查找單鏈表h中第i個元素并輸出該元素。</p><p><b>  (4) 插入</b></p><p>  在

18、單鏈表h的第i個元素位置上插入x數(shù)據(jù)元素 </p><p><b>  并遍歷單鏈表h</b></p><p><b>  (5) 刪除</b></p><p>  刪除單鏈表h的第i個數(shù)據(jù)元素,并返回第i個元素</p><p><b>  同時遍歷單鏈表h</b></p

19、><p><b>  (6)求表長</b></p><p>  求單鏈表的表長并輸出表長</p><p><b>  (7) 逆置單鏈表</b></p><p>  逆置帶頭結(jié)點的單鏈表h,逆置后的單鏈表利用原表中的結(jié)點空間,不重新申請空間,逆置后進行遍歷。</p><p>  

20、(8) 將一個元素插入到有序表中使表仍然有序</p><p>  帶頭結(jié)點的單鏈表中的數(shù)據(jù)元素是整型數(shù)且有序。將x插入到順序表的適當位置上,保持表的有序性,將兩個遞增的有序表歸并成一個遞減的有序表,利用原表空間,不能重新申請空間</p><p><b>  2.概要設計</b></p><p><b>  2.1邏輯結(jié)構設計<

21、/b></p><p>  邏輯結(jié)構: 線性結(jié)構</p><p><b>  二元組圖式</b></p><p><b>  G=(D,S)</b></p><p>  D=(q,a,z,w,s,x)</p><p><b>  S={r}</b>

22、</p><p>  R={<q,a>,<a,z>,<z,w>,<w,s>,<s,x>}</p><p><b>  2.2功能結(jié)構設計</b></p><p><b>  圖1功能設計圖</b></p><p>  本人在該小組中主要負責

23、完成建立和遍歷模塊的功能實現(xiàn)</p><p><b>  2.3物理結(jié)構設計</b></p><p>  物理結(jié)構(1) 鏈式存儲示意圖如下:</p><p>  圖2鏈式存儲示意圖 </p><p>  (2) c語言描述如下:</p><p>  #include <stdio

24、.h></p><p>  /*denition of datatype*/(</p><p>  T ypedef char datatype;</p><p>  typedef struct node</p><p>  {datatype data;</p><p>  struct node *nex

25、t;</p><p>  }linklist;</p><p><b>  3 算法設計與實現(xiàn)</b></p><p><b>  3.1算法設計</b></p><p>  1.用于定義單鏈表的存儲結(jié)構的函數(shù) LinkList()。</p><p>  2.用帶頭結(jié)點的尾插

26、法創(chuàng)建鏈表的函數(shù) createList()。</p><p>  3.用于查找第i位元素的函數(shù) get ()。</p><p>  4.用于遍歷單鏈表的函數(shù) visit()。</p><p>  5.用于獲得表長的函數(shù)lengthList()。</p><p>  6.用于在第i位元素后插入新元素的函數(shù) insert ()。</p>

27、;<p>  7.用于刪除第i位元素的函數(shù) delete ()。</p><p>  8.用于逆置單鏈表的函數(shù) reverse ()。</p><p>  9.用于在程序開始輸出歡迎和提示信息的函數(shù) start()。</p><p>  10.用于在程序結(jié)束時輸出提示信息的函數(shù) end()。</p><p>  11.用于調(diào)用上

28、述函數(shù)的主函數(shù)main(),主函數(shù)中對各函數(shù)的調(diào)用次序及方法為:定義了必要的變量后,先使用system()函數(shù)設置操作臺背景色;再調(diào)用程序開始時的輸出函數(shù)start();然后調(diào)用創(chuàng)建單鏈表的函數(shù)createList()并用相應類型的變量接 收它返回的頭結(jié)點地址;然后詢問是否遍歷(詢問步驟下同),需要的話將剛接收的頭結(jié)點地址作為參數(shù)調(diào)用遍歷函數(shù)visit();遍歷后傳遞頭結(jié)點的地址調(diào)

29、用查找函數(shù)get (),該函數(shù)具有判斷查找位置合法性的功能;查找操作結(jié)束后傳遞頭結(jié)點地址給inser ()調(diào)用它(插入操作帶有判斷插入位置是否合法的功能,故還要調(diào)用lengthList()獲得表長作為插入函數(shù)的另一個參數(shù))插入操作完成后將再次調(diào)用遍歷函數(shù)visit()顯示插入結(jié)果;結(jié)束插入后將頭結(jié)點地址作為參數(shù)調(diào)用刪除函數(shù)delete (),刪除成功后將調(diào)用遍歷函數(shù)顯示刪除后的結(jié)果(插入函數(shù)也具有判斷位置合法性的功能);最后是調(diào)用逆置函

30、數(shù)reverse (),同樣是以頭結(jié)點為參數(shù)。</p><p>  3.2算法實現(xiàn)與調(diào)試</p><p> ?。?)建立單鏈表: 123456</p><p><b>  圖3建立單鏈表</b></p><p><b> ?。?)遍歷單鏈表</b></p><p><b

31、>  圖4遍歷單鏈表</b></p><p>  題目二:線性表的應用——學生成績管理</p><p><b>  1 需求分析</b></p><p><b>  1.1 問題描述</b></p><p>  編寫一個簡單的學生信息管理程序,能實現(xiàn)對學生信息的簡單管理。編寫一個簡

32、單的學生信息管理程序,能實現(xiàn)對學生信息的簡單管理。</p><p><b>  1.2 實現(xiàn)要求</b></p><p> ?。?)創(chuàng)建成績鏈表,學生數(shù)據(jù)包含學生的學號、姓名和成績。</p><p>  (2)可以在指定學號學生前插入學生成績數(shù)據(jù)。</p><p>  (3)可以刪除指定學號的學生數(shù)據(jù)。</p>

33、;<p>  (4)可以計算學生的總數(shù)。</p><p>  (5)可以按學號和姓名查找學生。</p><p>  (6)可以顯示所有學生的成績。</p><p>  (7)可以把學生成績按從高到低的順序排列。</p><p><b>  2.概要設計</b></p><p><

34、;b>  2.1邏輯結(jié)構設計</b></p><p>  邏輯結(jié)構,線性結(jié)構二元組圖式如下:</p><p><b>  G=(D,S)</b></p><p>  D=(q,a,z,w,s,x)</p><p><b>  S={r}</b></p><p&

35、gt;  R={<q,a>,<a,z>,<z,w>,<w,s>,<s,x>}</p><p><b>  圖5二元組圖式</b></p><p><b>  2.2功能結(jié)構設計</b></p><p><b>  圖6功能結(jié)構設計圖</b>&

36、lt;/p><p>  本人在該小組中主要負責完成排列功能實現(xiàn)</p><p><b>  2.3物理結(jié)構設計</b></p><p>  物理結(jié)構:鏈式存儲, c語言描述如下:</p><p>  #include <string.h></p><p>  #include <ma

37、lloc.h></p><p>  #include <stdlib.h></p><p>  #include <stdio.h></p><p>  typedef struct Student</p><p>  { int score;</p><p>  char sno[5

38、],sname[8];</p><p><b>  }Student;</b></p><p>  typedef struct Node</p><p>  { Student studentInfo;</p><p>  struct Node * next;</p><p>  }Li

39、nkList;</p><p><b>  3 算法設計與實現(xiàn)</b></p><p><b>  3.1算法設計</b></p><p>  定義學生數(shù)據(jù)類型 stu。</p><p>  定義結(jié)點存儲類型 LinkList。</p><p><b>  函數(shù)聲明

40、部分。</b></p><p>  學生信息的輸入函數(shù) input()。</p><p>  用帶頭結(jié)點的尾插法建立單鏈表來存儲學生信息的函數(shù)createTailList()。</p><p>  遍歷單鏈表顯示出學生數(shù)據(jù)的函數(shù) showList(),此函數(shù)由羅聰同學編寫。</p><p>  按學號查找學生信息的函數(shù)getEle

41、m(),此函數(shù)由賈利洋同學編寫。</p><p>  顯示單個學生信息的函數(shù)showElem(),此函數(shù)由羅聰同學編寫。</p><p>  按姓名查找學生信息的函數(shù)locateElem(),此函數(shù)由賈利洋同學編寫。</p><p>  求學生總?cè)藬?shù)(即表長)的函數(shù)lengthList(),此函數(shù)由華政同學編寫。</p><p>  在指定學

42、號前插入學生數(shù)據(jù)的函數(shù)insertElem(),此函數(shù)由孟繁章同學編寫。</p><p>  刪除指定學號學生信息的函數(shù)deleteElem(),此函數(shù)由華政同學編寫。</p><p>  用直接插入法按分數(shù)從高到底排序的函數(shù)SIS()。此函數(shù)由本人編寫。</p><p>  程序開始時的顯示函數(shù) start()。</p><p>  程序結(jié)

43、束時的顯示函數(shù) end()。</p><p>  調(diào)用上述各函數(shù)的主函數(shù) main(),調(diào)用順序及方法是:首先定義必要的變量;調(diào)用程序開始時的顯示函數(shù)start();選擇后循環(huán)語句嵌套選擇語句;接著是循環(huán)語句中嵌套選擇語句和判斷語句,根據(jù)用戶的選擇,賦予適當?shù)膮?shù)來調(diào)用各個功能函數(shù);結(jié)束時調(diào)用程序結(jié)束時的顯示函數(shù)end()。</p><p>  3.2算法實現(xiàn)與調(diào)試</p>

44、<p><b> ?。?)開始的菜單</b></p><p><b>  圖7開始界面</b></p><p>  (2)當前學生成績從高到低排序</p><p><b>  圖8排序</b></p><p><b>  題目三:排序問題</b>

45、</p><p><b>  1 需求分析</b></p><p><b>  1.1 問題描述</b></p><p>  排序是數(shù)據(jù)處理中最常見,最基本的操作。在解決很多實際問題是,都離不開排序。排序還是另一種基本操作——查找操作的基礎,排序可以提高查找的效率。因此,學習和 研究排序方法是計算機程序人員課題之一。

46、 </p><p><b>  1.2 實現(xiàn)要求</b></p><p>  利用直接插入和選擇排序的方法對一組無序的序列進行排序,使其能正確的按順序輸出</p><p><b>  2.概要設計</b></p><p><b>  2.1邏輯結(jié)構設計</b></p&g

47、t;<p>  選擇排序:在要排序的一組數(shù)中,選出最小的一個數(shù)與第一個位置的數(shù)交換,然后在剩下的數(shù)當中再找最小的與第二個位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個數(shù)和最后一個數(shù)比較為止。</p><p>  直接插入排序:將一個待排序記錄按照排序碼的大小插入到一個有序序列的適當位置,使得插入后的序列仍然有序,直到所有的記錄全部插入到有序序列中。</p><p><b>  

48、2.2功能結(jié)構設計</b></p><p><b>  圖9功能結(jié)構設計圖</b></p><p>  關鍵碼序列為(42,20,17,27,13,8,17*,48),用直接插入排序算法進行排序。排序過程如圖所示。 </p><p><b>  2.3物理結(jié)構設計</b></p><p&g

49、t;  選擇排序 </p><p>  第i趟排序開始時,當前有序區(qū)和無序區(qū)分別為R[1..i-1]和R(1≤i≤n-1)。該趟排序從當前無序區(qū)中選出關鍵字最小的記錄 R[k],將它與無序區(qū)的第1個記錄R交換,使R[1..i]和R分別變?yōu)橛涗泜€數(shù)增加1個的新有序區(qū)和記錄個數(shù)減少1個的新無序區(qū)。 </p><p>  這樣,n個記錄的文件的直接選擇

50、排序可經(jīng)過n-1趟直接選擇排序得到有序結(jié)果。 </p><p><b>  直接插入排序</b></p><p>  用函數(shù)實現(xiàn)直接插入排序,并輸出每趟排序的結(jié)果.</p><p><b>  輸入格式</b></p><p>  第一行:鍵盤輸入待排序關鍵的個數(shù)n</

51、p><p>  第二行:輸入n個待排序關鍵字,用空格分隔數(shù)據(jù)</p><p><b>  輸出格式</b></p><p>  每行輸出一趟排序結(jié)果,數(shù)據(jù)之間用一個空格分隔</p><p><b>  輸入樣例</b></p><p><b>  10</b>

52、;</p><p>  5 4 8 0 9 3 2 6 7 1</p><p><b>  輸出樣例</b></p><p>  4 5 8 0 9 3 2 6 7 1</p><p>  4 5 8 0 9 3 2 6 7 1</p><p>  0 4 5 8 9 3 2 6 7 1</

53、p><p>  0 4 5 8 9 3 2 6 7 1</p><p>  0 3 4 5 8 9 2 6 7 1</p><p>  0 2 3 4 5 8 9 6 7 1</p><p>  0 2 3 4 5 6 8 9 7 1</p><p>  0 2 3 4 5 6 7 8 9 1</p><

54、;p>  0 1 2 3 4 5 6 7 8 9</p><p><b>  3 算法設計與實現(xiàn)</b></p><p><b>  3.1算法設計</b></p><p><b>  功能:選擇排序</b></p><p>  輸入:數(shù)組名稱(也就是數(shù)組首地址)、數(shù)組中

55、元素個數(shù)</p><p><b>  */</b></p><p>  void select_sort(int *x, int n)</p><p><b>  {</b></p><p>  int i, j, min, t;</p><p>  for (i=0; i&

56、lt;n-1; i++) /*要選擇的次數(shù):0~n-2共n-1次*/</p><p><b>  {</b></p><p>  min = i; /*假設當前下標為i的數(shù)最小,比較后再調(diào)整*/</p><p>  for (j=i+1; j<n; j++)/*循環(huán)找出最小的數(shù)的下標是哪個*/</p><p>&l

57、t;b>  {</b></p><p>  if (*(x+j) < *(x+min))</p><p><b>  { </b></p><p>  min = j; /*如果后面的數(shù)比前面的小,則記下它的下標*/</p><p><b>  }</b></p&g

58、t;<p><b>  } </b></p><p>  if (min != i) /*如果min在循環(huán)中改變了,就需要交換數(shù)據(jù)*/</p><p><b>  {</b></p><p>  t = *(x+i);</p><p>  *(x+i) = *(x+min);<

59、/p><p>  *(x+min) = t;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  功能:直接插入排序</b></p&g

60、t;<p>  輸入:數(shù)組名稱(也就是數(shù)組首地址)、數(shù)組中元素個數(shù)</p><p><b>  */</b></p><p>  void insert_sort(int *x, int n)</p><p><b>  {</b></p><p>  int i, j, t;<

61、/p><p>  for (i=1; i<n; i++) /*要選擇的次數(shù):1~n-1共n-1次*/</p><p><b>  {</b></p><p><b>  /*</b></p><p>  暫存下標為i的數(shù)。注意:下標從1開始,原因就是開始時</p><p>

62、  第一個數(shù)即下標為0的數(shù),前面沒有任何數(shù),單單一個,認為</p><p>  它是排好順序的。 */</p><p>  t=*(x+ I );</p><p>  for (j=i-1; j>=0 && t<*(x+j); j--) /*注意:j=i-1,j--,這里就是下標為i的數(shù),在它前面有序列中找插入位置。*/</p>

63、;<p><b>  {</b></p><p>  *(x+j+1) = *(x+ j ); /*如果滿足條件就往后挪。最壞的情況就是t比下標為0的數(shù)都小,它要放在最前面,j==-1,退出循環(huán)*/</p><p><b>  }</b></p><p>  *(x+j+1) = t; /*找到下標為i的數(shù)的

64、放置位置*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  3.2算法實現(xiàn)與調(diào)試</p><p><b>  1直接插入排序</b></p><p> ?。?)第一行:鍵盤輸入待排序關鍵的個數(shù)n<

65、;/p><p><b>  圖10輸入界面</b></p><p>  ( 2 )第二行:輸入n個待排序關鍵字,用空格分隔數(shù)據(jù)</p><p><b>  圖11排序演示圖</b></p><p> ?。?)每行輸出一趟排序結(jié)果,數(shù)據(jù)之間用一個空格分隔</p><p><b

66、>  2直接選擇排序</b></p><p> ?。?)輸入幾個字符串,直到輸入"!"結(jié)束</p><p><b>  圖12輸入數(shù)字</b></p><p>  (2)分別以升序和降序排列字符串數(shù)組。</p><p><b>  圖13排序結(jié)果</b><

67、/p><p><b>  總 結(jié)</b></p><p>  通過這次兩周的數(shù)據(jù)結(jié)構課程設計,我學會了許多知識并且提高了自己的動收能力與團隊合作能力,在完成這次課程設計的過程中,我認真查找資料。和隊友配合,共同努力完成了這次課程設計。</p><p>  本次課程設計的主題分為三個,分別為單鏈表的基本操作,學生成績管理系統(tǒng) 排序問題,通過上機實踐

68、,我對這些知識有了更進一步的了解,通過這次課程設計,我的專業(yè)知識也豐富了許多。</p><p>  在程序調(diào)試階段,一個小小的錯誤就會讓程序無法運行,我在這個過程中認真查找錯誤,最后通過我的不懈努力終于把程序調(diào)試成功了。</p><p>  這次課程設計的過程讓我學會了很多,成長了很多,同時也讓我看到了自己身上的不足,許多看似簡單的問題在自己操作的時候發(fā)現(xiàn)并不那么簡單。以后我要繼續(xù)努力學習

69、專業(yè)知識,提高自己的動手能力,不斷的豐富自己,完善自己。 </p><p><b>  參考文獻</b></p><p>  [1] 趙波,霍利等編著.《數(shù)據(jù)結(jié)構實用教程》(C語言版)清華大學出版社,2009.9</p><p>  [2] 唐策善,李龍澍,黃劉生.《數(shù)據(jù)結(jié)構用C語言描述》[M] 北京:高等教育出版社.1999</p

70、><p>  [3] 嚴蔚敏, 吳偉民著.《據(jù)結(jié)構(C語言版),清華大學出版,1999</p><p>  [4] 陳一華等編.數(shù)據(jù)結(jié)構---使用C 語言,電子科技大學出版社, 1998</p><p>  [5] 譚浩強.C語言程序設計(第二版).北京:高等教育出版社,2002</p><p>  [6]《標準C語言程序設計及應用》 周純杰 ,

71、劉正林等 編著 華中科技大學 </p><p>  [7]《C語言課程設計案例精編》 姜靈芝,余健 編著 清華大學出版社</p><p><b>  附錄 全部代碼</b></p><p><b>  題目一</b></p><p>  #include <stdio.h></

72、p><p>  #include <malloc.h></p><p>  #include <stdlib.h></p><p>  /*denition of datatype*/</p><p>  typedef int datatype; </p><p>  typedef s

73、truct node</p><p>  {datatype data;</p><p>  struct node *next;</p><p>  }linklist;</p><p>  /*function of create*/</p><p>  linklist *create()</p>

74、<p><b>  {int x;</b></p><p>  linklist *head,*s,*r;</p><p>  head = (linklist*)malloc(sizeof(linklist));</p><p><b>  r=head;</b></p><p> 

75、 scanf("%d",&x);</p><p>  while(x!=-1)</p><p>  { s = (linklist*)malloc(sizeof(linklist));</p><p>  s->data=x;</p><p>  r->next = s;</p><

76、p><b>  r = s;</b></p><p>  scanf("%d",&x);</p><p><b>  }</b></p><p>  r->next = NULL;</p><p>  return head;</p><p

77、><b>  }</b></p><p>  /*function of visit*/</p><p>  void visit(linklist *head)</p><p><b>  {</b></p><p>  linklist *p;</p><p>  

78、p=head->next;</p><p><b>  while(p)</b></p><p>  { printf(" %d",p->data);</p><p>  p=p->next;</p><p><b>  }</b></p><

79、;p>  printf("\n");</p><p><b>  }</b></p><p>  void main()</p><p>  {linklist *h1,*q,*h2;</p><p>  int i,b=1;</p><p><b>  in

80、t x;</b></p><p>  int in,de,ins;</p><p>  datatype *e;</p><p><b>  while(b)</b></p><p><b>  {int a;</b></p><p>  printf(&quo

81、t;\n\n");</p><p>  printf(" --------------------菜單------------------------\n");</p><p>  printf(" ------------------------------------------------\n");</p><p&

82、gt;  printf(" (1)創(chuàng)建(帶頭尾插) (2)遍歷 (3)查找\n");</p><p>  printf(" (4)插入(無序) (5)刪除 (6)求表長\n");</p><p>  printf(" (7)逆置 (8)插入(有序) (9

83、)歸并\n");</p><p>  printf(" (10)退出 \n");</p><p>  printf(" ------------------------------------------------");</p><p>  printf("\n請輸入功能選項: ");</

84、p><p>  scanf("%d",&a);</p><p><b>  switch(a)</b></p><p><b>  {case 1:</b></p><p>  printf("Creat linklist h1:\n");</p&

85、gt;<p>  h1=create();</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  printf("visit LinkList h1:\n");</p><p>  visit(h1

86、);</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  printf("please input the station of locate:");</p><p>  scanf("%d"

87、;,&i); </p><p>  q=get(h1,i); </p><p>  if (q) printf("%d",q->data); </p><p>  else printf("location is error"); <

88、;/p><p>  printf("\n");</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  printf("please input the station and data of insert:

89、");</p><p>  scanf("%d,%d",&i,&x); </p><p>  in=insert(h1,i,x); </p><p>  printf("\n");</p><p>  if (in

90、==0) printf("location is error"); </p><p>  else visit(h1); </p><p>  printf("\n");</p><p><b>  break;</b></p><

91、;p><b>  case 5:</b></p><p>  printf("please input the staion of delete:");</p><p>  scanf("%d",&i); </p><p>  e=(

92、datatype *) malloc(sizeof(datatype)); </p><p>  de=delete(h1,i,e); </p><p>  if (de==0) printf("location is error"); </p&g

93、t;<p>  else {visit(h1); printf("the dele is %d",*e);} </p><p>  printf("\n");</p><p><b>  break;</b></p><p><b>  case 6:</b><

94、;/p><p>  printf("\n the table long: %d \n",lengthList(h1));</p><p><b>  break;</b></p><p><b>  case 7:</b></p><p>  reverse(h1);</

95、p><p>  visit(h1);</p><p><b>  break; </b></p><p><b>  case 8:</b></p><p>  printf("please input the data of insertSort:");</p>&l

96、t;p>  scanf("%d",&x);</p><p>  ins=insertSort(h1,x);</p><p>  printf("\n");</p><p>  visit(h1);</p><p>  printf("\n");</p>&

97、lt;p><b>  break;</b></p><p><b>  case 9:</b></p><p>  h1=create();</p><p>  visit(h1);</p><p>  h2=create();</p><p>  visit(h2);

98、</p><p>  visit(meger(h1,h2));</p><p><b>  break;</b></p><p><b>  case 10:</b></p><p>  printf("\n退出\n");</p><p><b>

99、;  b=0;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b

100、>  題目二</b></p><p>  #include<string.h></p><p>  #include<malloc.h></p><p>  #include <stdlib.h></p><p>  #include <stdio.h></p>

101、<p>  typedef struct Student{ /*學生類型定義*/</p><p>  int score; /*成績*/</p><p>  char sno[5],sname[8]; /*學號,姓名*/</p><p>  } Student;</p>

102、;<p>  typedef struct Node{ /*結(jié)點類型定義*/</p><p>  Student studentInfo; /*學生信息*/</p><p>  struct Node *next; /*指向后繼元素的指針域*/ </p><p>  } LinkList;&

103、lt;/p><p>  void insertSort(LinkList *L) /*用直接插入排序思想把學生的成績按從高到低排序,</p><p>  結(jié)果保存在新有序鏈表中,原鏈表不變*/</p><p><b>  {</b></p><p>  LinkList *L1,*p;

104、 /*L1有序鏈表的表頭,p插入位置前結(jié)點*/</p><p>  LinkList *q,*s; /*q欲插入L1中的結(jié)點*/</p><p><b>  int len;</b></p><p>  len=lengthList (L) ;</p><p>  L1=( LinkLis

105、t *)malloc(sizeof (LinkList)); /*建立頭結(jié)點,申請結(jié)點存儲空間*/</p><p>  if (L->next) /*鏈表L非空*/</p><p>  { /*生成有序鏈表的第一個結(jié)點*/</p><p>  s=( LinkList *)malloc(sizeof (LinkList)); /*建立結(jié)點,申請結(jié)點存

106、儲空間*/</p><p>  strcpy(s->studentInfo .sno ,L->next->studentInfo.sno);</p><p>  strcpy(s->studentInfo .sname,L->next->studentInfo.sname);</p><p>  s->studentInfo

107、 .score =L->next->studentInfo.score;</p><p>  s->next =NULL;</p><p>  L1->next=s; /*只有原單鏈表的第一個結(jié)點的有序鏈表L1*/</p><p>  q=L->next->next; /*原單鏈表的第二個結(jié)點,q即要

108、插入有序鏈表L1中的結(jié)點*/</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("\nthe student link list is empty!!!!\n

109、");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  while(q) /*鏈表L中有結(jié)點*/</p><p><b>  {</b></p><p&g

110、t;  p=L1 ; /*從鏈表L1的第一個結(jié)點開始比較*/</p><p>  while((p->next) && (p->next->studentInfo.score>=q->studentInfo.score))</p><p>  p=p->next ; /*查找插入位置前結(jié)點*/ &

111、lt;/p><p>  /*生成欲插入有序鏈表中的結(jié)點*/</p><p>  s=( LinkList *)malloc(sizeof (LinkList)); /*建立結(jié)點,申請結(jié)點存儲空間*/</p><p>  strcpy(s->studentInfo .sno ,q->studentInfo.sno);</p><p>

112、;  strcpy(s->studentInfo .sname ,q->studentInfo.sname);</p><p>  s->studentInfo .score =q->studentInfo.score;</p><p>  if(!p->next) /*p是有序鏈表的最后一個結(jié)點*/<

113、;/p><p><b>  {</b></p><p>  s->next =NULL ;</p><p>  p->next =s;</p><p><b>  }</b></p><p><b>  else</b></p>&

114、lt;p><b>  {</b></p><p>  s->next =p->next ;</p><p>  p->next =s;</p><p><b>  }</b></p><p>  q=q->next;

115、 /*下一個欲插入有序鏈表的結(jié)點*/</p><p>  }/*while(!q)*/</p><p>  displayAll(L1); /*顯示生成的有序鏈表*/</p><p><b>  }</b></p><p>  void main()</p

116、><p><b>  {</b></p><p>  LinkList *L;</p><p>  char ch[5];</p><p>  char sname[8];</p><p><b>  int b=1;</b></p><p>  prin

117、tf("=============================================\n\n");</p><p>  printf(" 帶頭結(jié)點的學生成績管理程序\n\n");</p><p>  printf("=============================================\n\n

118、");</p><p><b>  while(b)</b></p><p><b>  {</b></p><p><b>  int a;</b></p><p>  printf("\n\n");</p><p>  

119、printf(" <1>創(chuàng)建(帶頭尾插) <2>指定學號前插入 <3>按學號刪除\n ");</p><p>  printf("<4>計算學生總數(shù) <5> 按學號查找 <6> 按姓名查找\n");</p><p>  printf(" &l

120、t;7>顯示所有學生 <8>成績排序 <9> 退出\n");</p><p>  printf("\n請輸入功能選項:");</p><p>  scanf("%d",&a);</p><p>  switch(a){</p><p

121、><b>  case 1:</b></p><p>  L=CreateTailList();</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  printf("\n輸入欲在哪個學號前插入

122、數(shù)據(jù):");</p><p>  scanf("%s",ch);</p><p>  insertElem(L, ch);</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  

123、printf("\n輸入欲刪除學生的學號:");</p><p>  scanf("%s",ch);</p><p>  deleteElem(L, ch);</p><p><b>  break;</b></p><p><b>  case 4:</b>

124、</p><p>  printf(" \n學生總數(shù)為: %d \n",lengthList (L) );</p><p><b>  break;</b></p><p><b>  case 5:</b></p><p>  printf("\n輸入欲查找學生

125、的學號:");</p><p>  scanf("%s",ch);</p><p>  locateElemByno(L, ch) ;break;</p><p><b>  case 6:</b></p><p>  printf("\n輸入欲查找學生的姓名:");&l

126、t;/p><p>  scanf("%s",sname);</p><p>  locateElemByname(L, sname);break;</p><p><b>  case 7:</b></p><p>  displayAll(L);</p><p><b>

127、;  break;</b></p><p><b>  case 8:</b></p><p>  insertSort(L);</p><p><b>  break;</b></p><p><b>  case 9:</b></p><p&

128、gt;  printf("\n已退出\n");</p><p>  b=0;break;</p><p><b>  };</b></p><p><b>  }</b></p><p><b>  } </b></p><p>

129、<b>  題目三</b></p><p><b>  選擇排序</b></p><p>  #include <stdio.h></p><p>  #include <string.h></p><p>  #include <conio.h></p&g

130、t;<p>  void shengxu(char x[][12],int i);</p><p>  void jiangxu(char x[][12],int i);</p><p>  void main()</p><p><b>  {</b></p><p>  int i=0,n=0;<

131、/p><p>  char x[10][12];</p><p><b>  do{</b></p><p>  printf("string %d:",n+1);</p><p>  scanf("%s",x[n]);i++;</p><p>  }while

132、(strcmp(x[n++],"!"));</p><p>  shengxu(x,i);</p><p>  jiangxu(x,i);</p><p><b>  }</b></p><p>  void shengxu(char x[][12],int i)</p><p&g

133、t;<b>  {</b></p><p>  int n=i-1;</p><p><b>  int item;</b></p><p>  char temp[12];</p><p>  for(item=0;item<n-1;item++)</p><p>&

134、lt;b>  {</b></p><p>  for(i=item+1;i<n;i++)</p><p><b>  {</b></p><p>  if(strcmp(x[item],x[i])>0)</p><p><b>  {</b></p>&l

135、t;p>  strcpy(temp,x[item]);</p><p>  strcpy(x[item],x[i]);</p><p>  strcpy(x[i],temp);</p><p><b>  }</b></p><p><b>  }</b></p><p&g

136、t;<b>  }</b></p><p>  printf("recorded ascnd of strings:\n");</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  printf("\n

137、string %d is %s",i+1,x[i]);</p><p><b>  }</b></p><p>  printf("\n\n");</p><p><b>  }</b></p><p>  void jiangxu(char x[][12],int i

138、)</p><p><b>  {</b></p><p>  int n=i-1;</p><p><b>  int item;</b></p><p>  char temp[12];</p><p>  for(item=0;item<n-1;item++)&l

139、t;/p><p><b>  {</b></p><p>  for(i=item+1;i<n;i++)</p><p><b>  {</b></p><p>  if(strcmp(x[item],x[i])<0)</p><p><b>  {<

140、/b></p><p>  strcpy(temp,x[i]);</p><p>  strcpy(x[i],x[item]);</p><p>  strcpy(x[item],temp);</p><p><b>  }</b></p><p><b>  }</b>

141、;</p><p><b>  }</b></p><p>  printf("recorded ascnd of strings:\n");</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p&g

142、t;  printf("\n string %d is %s",i+1,x[i]);</p><p><b>  }</b></p><p>  printf("\n\n");</p><p><b>  }</b></p><p><b>  直接

143、插入排序</b></p><p>  #include"stdio.h"</p><p>  #define MAXSIZE 20//一個用作示例的小順序表的最大長度</p><p>  int Insertsort(int r[],int n)</p><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

提交評論