數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---鏈表操作_第1頁(yè)
已閱讀1頁(yè),還剩15頁(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)》</b></p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  題 目: 鏈表操作 </p><p><b>  目 錄</b></p><p>  設(shè)計(jì)題目………………

2、……………………………</p><p>  設(shè)計(jì)目的……………………………………………</p><p>  設(shè)計(jì)內(nèi)容和要求……………………………………</p><p>  運(yùn)行環(huán)境(軟和硬件)……………………………</p><p>  算法設(shè)計(jì)的思想……………………………………</p><p>  算法流程圖……………

3、……………………………</p><p>  算法設(shè)計(jì)分析………………………………………</p><p>  源代碼………………………………………………</p><p>  運(yùn)行結(jié)果及分析……………………………………</p><p>  收獲及體會(huì)………………………………………</p><p><b>  設(shè)計(jì)

4、題目</b></p><p><b>  鏈表的基本操作</b></p><p><b>  設(shè)計(jì)目的</b></p><p>  1.掌握線性鏈表的建立。 </p><p>  2.掌握線性鏈表的基本操作。</p><p><b>  設(shè)計(jì)內(nèi)容和要求&

5、lt;/b></p><p>  利用鏈表的插入運(yùn)算建立線性鏈表,然后實(shí)現(xiàn)鏈表的查找、刪除、計(jì)數(shù)、輸出、排序、逆置等運(yùn)算,插入、刪除、查找、計(jì)數(shù)、輸出、排序、逆置要單獨(dú)寫成函數(shù),并能在屏幕上輸出操作前后的結(jié)果。</p><p>  運(yùn)行環(huán)境(軟、硬件環(huán)境)</p><p>  Visual C++6.0</p><p>  Win9x/

6、NT/2000/XP/2003/7環(huán)境下均可以運(yùn)行。</p><p><b>  算法設(shè)計(jì)的思想</b></p><p><b>  1.數(shù)據(jù)結(jié)構(gòu)</b></p><p>  定義了一個(gè)lian的結(jié)構(gòu)體int num;struct lian *next;。</p><p>  2.鏈表的建立是利用尾

7、插法來(lái)完成的;</p><p>  q=(llink)malloc(sizeof(node));q->num=array[i];q->next=NULL;p->next=q;p=p->next;</p><p>  3.遍歷算法是從頭開始遍歷,找到了就輸出該數(shù),沒有就顯示沒有找到;</p><p>  4.計(jì)數(shù)鏈表中的節(jié)點(diǎn)個(gè)數(shù)是用一個(gè)循環(huán)p-

8、>next!=NULL時(shí)就繼續(xù)計(jì)數(shù);</p><p>  5.鏈表的輸出,通過p=p->next一個(gè)個(gè)進(jìn)行遍歷輸出。</p><p>  6.鏈表的排序算法,從小到大進(jìn)行排序,通過循環(huán)來(lái)達(dá)到。保持head結(jié)點(diǎn)不變,p指向第一個(gè)結(jié)點(diǎn),q=p->next,p所指結(jié)點(diǎn)依次和后面的結(jié)點(diǎn)比較,比它大則交換,否則繼續(xù)后移動(dòng)q=q->next;</p><p&

9、gt;  for(i=0;i<len;i++)</p><p><b>  {</b></p><p>  p=p->next;</p><p>  q=p->next;</p><p>  for(j=i+1;j<len;j++)</p><p><b>  {

10、</b></p><p>  if(q->num>p->num)</p><p><b>  {</b></p><p>  temp=p->num;</p><p>  p->num=q->num;</p><p>  q->num=temp

11、;</p><p><b>  }</b></p><p>  q=q->next;</p><p><b>  }</b></p><p>  7.鏈表的插入llink insert(llink head,llink ptr,int m)和刪除llink delet(llink head,

12、llink ptr)設(shè)計(jì)比較簡(jiǎn)單沒什么技巧</p><p>  8.鏈表的倒置輸出,保持head頭結(jié)點(diǎn)不動(dòng),p指針指向第一個(gè)結(jié)點(diǎn),p向后流動(dòng),q指針指向p的后一個(gè)結(jié)點(diǎn),把q所指結(jié)點(diǎn)插在head和p之間。</p><p>  p=llist->next;llist->next=NULL;</p><p>  while(p!=NULL)</p>

13、<p>  { q=p->next;</p><p>  p->next=llist->next;</p><p>  llist->next=p;</p><p><b>  p=q;</b></p><p><b>  }</b></p>

14、<p><b>  算法的流程圖</b></p><p><b>  main函數(shù)</b></p><p><b>  算法設(shè)計(jì)分析</b></p><p>  算法設(shè)計(jì)較為簡(jiǎn)單,時(shí)間復(fù)雜度O(n*n);</p><p><b>  源代碼</b>

15、;</p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p>  #include<string.h></p><p>  typedef struct lian</p><p>  {

16、 /*單個(gè)鏈表節(jié)點(diǎn)的結(jié)構(gòu)體*/</p><p><b>  int num;</b></p><p>  struct lian *next;</p><p><b>  }node;</b></p><p>  typedef node *llink;</p><p&

17、gt;  /*建立鏈表函數(shù)*/</p><p>  llink Creat(int array[],int len)</p><p><b>  {</b></p><p>  llink head;</p><p>  llink p,q;</p><p><b>  int i;&l

18、t;/b></p><p>  head=(llink)malloc(sizeof(node));</p><p>  head->next=NULL;</p><p><b>  p=head;</b></p><p>  for(i=0;i<len;i++)</p><p>

19、<b>  {</b></p><p>  q=(llink)malloc(sizeof(node));</p><p>  q->num=array[i];</p><p>  q->next=NULL;</p><p>  p->next=q;</p><p>  p=p-&

20、gt;next;</p><p><b>  }</b></p><p>  return head;</p><p><b>  }</b></p><p>  /*遍歷操作函數(shù)*/</p><p>  void Print(llink head)</p>&

21、lt;p><b>  { </b></p><p><b>  llink p;</b></p><p>  p=head->next;</p><p>  printf("\n輸出鏈表: ");</p><p>  while(p!=NULL)</p&

22、gt;<p><b>  {</b></p><p>  printf("%5d",p->num);</p><p>  p=p->next;</p><p><b>  }</b></p><p>  printf("\n")

23、;</p><p><b>  }</b></p><p>  /*計(jì)數(shù)輸出函數(shù)*/</p><p>  count(llink llist)</p><p><b>  {</b></p><p><b>  int i=0;</b></p>

24、;<p><b>  llink p;</b></p><p><b>  p=llist;</b></p><p><b>  Print(p);</b></p><p>  while((p->next)!=NULL)</p><p><b>

25、  { </b></p><p><b>  i++;</b></p><p>  p=p->next;</p><p><b>  }</b></p><p>  printf("鏈表的節(jié)點(diǎn)個(gè)數(shù)為%d",i);</p><p>  p

26、rintf("\n");</p><p><b>  }</b></p><p>  llink Daozhi(llink llist)</p><p><b>  {</b></p><p>  llink p,q;</p><p>  p=llist

27、->next;</p><p>  llist->next=NULL;</p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  q=p->next;</p><p>  p->next=llist->next;&l

28、t;/p><p>  llist->next=p;</p><p><b>  p=q;</b></p><p><b>  }</b></p><p>  return llist;</p><p><b>  }</b></p>&l

29、t;p>  llink search(llink head,int m) </p><p><b>  {</b></p><p><b>  llink p;</b></p><p><b>  p=head;</b></p><p>  while(p!=NULL)

30、</p><p><b>  {</b></p><p>  if(p->num==m)</p><p><b>  return p;</b></p><p>  p=p->next;</p><p><b>  }</b></p&

31、gt;<p><b>  return p;</b></p><p><b>  }</b></p><p>  llink delet(llink head,llink ptr)</p><p><b>  {</b></p><p>  llink pevio

32、us;</p><p>  if(ptr==head)</p><p>  return head->next;</p><p><b>  else</b></p><p><b>  {</b></p><p>  pevious=head;</p>

33、<p>  while(pevious->next!=ptr)</p><p>  pevious=pevious->next;</p><p>  if(ptr->next==NULL)</p><p>  pevious->next=NULL;</p><p><b>  else</b&

34、gt;</p><p>  pevious->next=ptr->next; </p><p><b>  }</b></p><p>  free(ptr);</p><p>  return head;</p><p><b>  }</b></p

35、><p>  llink insert(llink head,llink ptr,int m)</p><p><b>  {</b></p><p><b>  llink p1;</b></p><p>  p1=(llink)malloc(sizeof(node));</p><

36、;p><b>  if(!p1)</b></p><p>  return p1;</p><p>  p1->num=m;</p><p>  p1->next=NULL;</p><p>  if(ptr==NULL)</p><p><b>  {</b&g

37、t;</p><p>  p1->next=head;</p><p>  return p1;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>&

38、lt;p>  if(ptr->next==NULL)</p><p>  ptr->next=p1;</p><p><b>  else</b></p><p><b>  {</b></p><p>  p1->next=ptr->next;</p>

39、<p>  ptr->next=p1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  return head;</p><p><b>  }</b></p><p>  llink

40、sort(llink llist,int len)</p><p><b>  {</b></p><p>  llink p,q;</p><p>  int i,j,temp;</p><p><b>  p=llist;</b></p><p>  Print(llis

41、t);</p><p>  for(i=0;i<len;i++)</p><p><b>  {</b></p><p>  p=p->next;</p><p>  q=p->next;</p><p>  for(j=i+1;j<len;j++)</p>

42、<p><b>  {</b></p><p>  if(q->num>p->num)</p><p><b>  {</b></p><p>  temp=p->num;</p><p>  p->num=q->num;</p><

43、p>  q->num=temp;</p><p><b>  }</b></p><p>  q=q->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  return ll

44、ist;</p><p>  printf("輸出排序后的鏈表");</p><p>  printf("\n");</p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b>

45、;</p><p>  llink p,llist,ptr;</p><p>  int choice,m,n;</p><p>  int array[5]={5,4,1,6,3};</p><p>  p=Creat(array,5);</p><p>  while(choice!=0)</p>&

46、lt;p><b>  {</b></p><p>  printf(" ----------------------------------------------------------- \n\n");</p><p>  printf(" | _________________________________

47、________________ | \n\n");</p><p>  printf("| | 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) | \n\n");</p><p>  printf("| | 0:退出 1:輸出元素

48、 | \n\n");</p><p>  printf("| | 2:刪除元素 3:插入元素 | \n\n");</p><p>  printf("| | 4:排序元素 5:查找元素

49、 | \n\n");</p><p>  printf("| | 6:計(jì)數(shù) 7:倒置 | \n\n"); </p><p>  printf("| _____________________________________________

50、___ \n\n");</p><p>  printf(" | | \n\n");</p><p>  printf(" --------------------------------------------

51、------------- \n\n");</p><p>  printf("請(qǐng)選擇功能:");</p><p>  scanf("%d",&choice);</p><p>  switch(choice)</p><p><b>  {</b><

52、;/p><p><b>  case 0:</b></p><p><b>  break;</b></p><p><b>  case 1: </b></p><p><b>  Print(p);</b></p><p><

53、b>  break;</b></p><p><b>  case 2:</b></p><p>  printf("請(qǐng)輸入要?jiǎng)h除的數(shù)據(jù)");</p><p>  scanf("%d",&m);</p><p><b>  if(m!=0)<

54、;/b></p><p><b>  {</b></p><p>  ptr=search(p,m);</p><p><b>  if(!ptr)</b></p><p>  printf("沒有找到!\n");</p><p><b>

55、  else</b></p><p>  llist=delet(p,ptr);</p><p>  printf("刪除后的鏈表為");</p><p>  Print(llist);</p><p><b>  }</b></p><p><b>  

56、break;</b></p><p><b>  case 3: </b></p><p>  printf("請(qǐng)輸入要插入的數(shù)據(jù)位置");</p><p>  scanf("%d",&n);</p><p><b>  if(n>=0)<

57、;/b></p><p><b>  {</b></p><p>  ptr=search(p,n);</p><p>  printf("請(qǐng)輸入要插入的數(shù)據(jù)");</p><p>  scanf("%d",&m);</p><p><b

58、>  if(!p)</b></p><p>  printf("沒有找到!\n");</p><p><b>  else</b></p><p>  llist=insert(p,ptr,m);</p><p>  printf("插入后的鏈表為");</

59、p><p>  Print(llist);</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  llist=sort(p,5);</p>

60、<p>  Print(llist);</p><p><b>  break;</b></p><p><b>  case 5:</b></p><p>  printf("請(qǐng)輸入要查找的數(shù)據(jù)");</p><p>  scanf("%d",

61、&m);</p><p><b>  if(m!=0)</b></p><p><b>  {</b></p><p>  ptr=search(p,m);</p><p><b>  if(!ptr)</b></p><p>  printf(

62、"沒有找到!\n");</p><p><b>  else</b></p><p>  printf("%d",ptr->num);</p><p><b>  }</b></p><p>  printf("\n");</p

63、><p><b>  break;</b></p><p>  /*對(duì)鏈表進(jìn)行計(jì)數(shù)輸出*/</p><p><b>  case 6:</b></p><p><b>  count(p);</b></p><p><b>  break;<

64、/b></p><p>  /*對(duì)鏈表進(jìn)行倒置輸出函數(shù)*/</p><p><b>  case 7:</b></p><p>  llist=Daozhi(p);</p><p>  Print(llist);</p><p><b>  break;</b><

65、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  運(yùn)行結(jié)果及分析</b></p><p>  主菜單中顯示各個(gè)功能塊,提示

66、用戶選擇相應(yīng)的序號(hào)進(jìn)行操作。</p><p>  功能1實(shí)現(xiàn)輸出創(chuàng)建的鏈表的各個(gè)結(jié)點(diǎn),從主函數(shù)輸入的數(shù)組元素,通過鏈表的創(chuàng)建函數(shù),最后由輸出函數(shù)輸出。</p><p>  功能2實(shí)現(xiàn)刪除鏈表中的結(jié)點(diǎn)</p><p>  功能3實(shí)現(xiàn)向鏈表中插入數(shù)據(jù)結(jié)點(diǎn)。</p><p>  功能4實(shí)現(xiàn)對(duì)鏈表的結(jié)點(diǎn)進(jìn)行排序,從小到大,最后輸出排序后的鏈表。<

67、;/p><p>  功能5實(shí)現(xiàn)查找某一個(gè)結(jié)點(diǎn),若找到將輸出此結(jié)點(diǎn),若沒有則顯示沒有找到!</p><p>  功能6實(shí)現(xiàn)對(duì)鏈表中結(jié)點(diǎn)個(gè)數(shù)進(jìn)行統(tǒng)計(jì),輸出統(tǒng)計(jì)個(gè)數(shù)。</p><p>  功能7實(shí)現(xiàn)對(duì)鏈表中結(jié)點(diǎn)進(jìn)行倒置輸出。</p><p><b>  收獲及體會(huì)</b></p><p>  總體來(lái)說(shuō),該程

68、序?qū)崿F(xiàn)了課程設(shè)計(jì)的算法和功能,鏈表相關(guān)的基本操作。我覺得首先得把基本算法弄懂,這是基礎(chǔ),然后建立結(jié)構(gòu)體的模型。對(duì)于指針和地址的傳遞得好好弄清楚,每個(gè)細(xì)節(jié)弄清楚,弄明白。</p><p>  在程序調(diào)試過程遇到了一些問題。但是我并沒有氣壘,在實(shí)驗(yàn)中發(fā)現(xiàn)問題,自己進(jìn)行測(cè)試看是在哪兒出現(xiàn)了問題,獨(dú)立思考,最終解決問題,從而也就加深我對(duì)理論知識(shí)的理解,達(dá)到了“雙贏”的效果。</p><p>  我

69、覺得自己獨(dú)立的思考過程很重要,否則要自己寫程序、 寫算法的時(shí)候根本寫不出來(lái),所以我想如果真的想學(xué)好數(shù)據(jù)結(jié)構(gòu)的話,最好是能夠自己思考問題,不要?jiǎng)傁肓艘粫?huì)就覺得做不出來(lái),然后就去問其他人,我絕對(duì)相信我們自己能夠獨(dú)自想出算法,雖有可能會(huì)比較長(zhǎng)時(shí)間吧,但是這樣肯定會(huì)比問其他人學(xué)到更多的東西。當(dāng)然我并不是說(shuō)不要問同學(xué),有時(shí)候就是腦筋轉(zhuǎn)不過來(lái),一問別人就懂了,當(dāng)然問了別人不能只是我知道了這個(gè)算法,還應(yīng)該去想如何思考才能得到這個(gè)算法,這樣水平會(huì)提高很

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論