數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--鏈表_第1頁(yè)
已閱讀1頁(yè),還剩12頁(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>  班級(jí):</b></p><p><b>  姓名:</b></p><p><b>  學(xué)號(hào):</b></p><p><b>  設(shè)計(jì)時(shí)間:</b></p><p>  一、應(yīng)用程序的名稱:鏈表</p><

2、;p>  二、應(yīng)用程序的主題與設(shè)計(jì)目的:實(shí)現(xiàn)一個(gè)鏈表的建立、輸出,并且完成節(jié)點(diǎn)的插入、刪除操作。</p><p><b>  三、應(yīng)用程序簡(jiǎn)介:</b></p><p><b>  1、基本結(jié)構(gòu) </b></p><p><b>  A、功能模塊圖</b></p><p&g

3、t;<b>  B、各模塊流程圖</b></p><p> ?。?) 鏈表的建立:</p><p>  開(kāi)辟一個(gè)新節(jié)點(diǎn),使p1、P2指向它</p><p>  讀入一個(gè)學(xué)生數(shù)據(jù)給p1所指的結(jié)點(diǎn)</p><p><b>  Y</b></p><p><b>  N&

4、lt;/b></p><p>  輸出p指向的節(jié)點(diǎn)并且p</p><p><b>  指向下一個(gè)節(jié)點(diǎn)</b></p><p> ?。?) 鏈表結(jié)點(diǎn)的刪除</p><p><b>  Y</b></p><p><b>  N</b></p&g

5、t;<p><b>  P2后移一個(gè)位置</b></p><p><b>  P1后移一個(gè)位置</b></p><p><b>  N</b></p><p><b>  Y</b></p><p>  Np1是要?jiǎng)h除的結(jié)點(diǎn)</p&g

6、t;<p><b>  Y</b></p><p>  (4) 鏈表節(jié)點(diǎn)的插入</p><p><b>  YN</b></p><p><b>  N</b></p><p><b>  Y</b></p><p>

7、;  2、基本內(nèi)容:(源代碼及注釋)</p><p>  #include<stdio.h></p><p>  #include<malloc.h></p><p>  #define LEN sizeof(struct student)</p><p><b>  int n;</b><

8、/p><p>  struct student</p><p><b>  {int num;</b></p><p>  int score;</p><p>  struct student *next;};</p><p>  struct student *creat(void) /*

9、定義函數(shù),此函數(shù)帶回一個(gè)指向鏈表頭的指針*/</p><p>  {struct student *head;</p><p>  struct student *p1,*p2;</p><p><b>  n=0;</b></p><p>  p1=p2=(struct student *)malloc(LEN);

10、 /*開(kāi)辟一個(gè)新單元*/</p><p>  scanf("%d,%d",&p1->num,&p1->score);</p><p>  head=NULL;</p><p>  while(p1->num!=0)</p><p><b>  { n=n+1;</b&g

11、t;</p><p>  if(n==1)head=p1;</p><p>  else p2->next=p1; /*把p1所指的結(jié)點(diǎn)連接在p2所指的結(jié)點(diǎn)后面*/</p><p><b>  p2=p1;</b></p><p>  p1=(struct student*)malloc(LEN);<

12、;/p><p>  scanf("%d,%d",&p1->num,&p1->score);}</p><p>  p2->next=NULL;</p><p>  return(head); /*函數(shù)返回head的值,即鏈表中第一個(gè)節(jié)點(diǎn)的起始地址*/</p><p><b>

13、  }</b></p><p>  void print(struct student*head)</p><p>  {struct student*p;</p><p>  printf("\nNow,these %d records are:\n",n);</p><p><b>  p=hea

14、d;</b></p><p>  if(head!=NULL)</p><p><b>  do</b></p><p>  { printf("%d %d\n",p->num,p->score);</p><p>  p=p->next;</p><

15、p>  }while(p!=NULL);</p><p><b>  }</b></p><p>  struct student*del(struct student*head,int num)</p><p>  {struct student*p1,*p2;</p><p>  if(head==NULL)&

16、lt;/p><p>  {printf("\nlist null! \n");</p><p>  return head;</p><p><b>  }</b></p><p><b>  p1=head;</b></p><p>  while(num!

17、=p1->num && p1->next!=NULL) /*p1指向的不是所要找的節(jié)點(diǎn),且后有節(jié)點(diǎn)*/</p><p><b>  { p2=p1;</b></p><p>  p1=p1->next;</p><p>  } /*p1后移一個(gè)節(jié)點(diǎn)*/</p><p>

18、  if(num==p1->num) /*找到了*/</p><p>  { if(p1==head)head=p1->next; /*若p1指向的首節(jié)點(diǎn),把第二個(gè)節(jié)點(diǎn)地址賦予head*/</p><p>  else p2->next=p1->next; /*否則將下一個(gè)節(jié)點(diǎn)地址賦給前一節(jié)點(diǎn)地址*/</p><p>  p

19、rintf("delete:%d\n",num);</p><p><b>  n=n-1;</b></p><p><b>  }</b></p><p>  else printf("%d not beed found!\n",num); /*找不到該節(jié)點(diǎn)*/</p

20、><p>  return(head);</p><p><b>  }</b></p><p>  struct student*insert(struct student*head,struct student*stud)</p><p>  {struct student*p0,*p1,*p2;</p>

21、<p>  p1=head; /*使p1指向第一個(gè)節(jié)點(diǎn)*/</p><p>  p0=stud; /*p0指向要插入的節(jié)點(diǎn)*/</p><p>  if(head==NULL) /*原來(lái)的鏈表是空表*/</p><p><b>  {head=p0;</b></p><p>  p0-

22、>next=NULL;</p><p>  } /*使p0指向的節(jié)點(diǎn)作為頭結(jié)點(diǎn)*/</p><p><b>  else</b></p><p>  {while((p0->num>p1->num) && (p1->next!=NULL))</p><p>

23、;  { p2=p1; /*使p2指向剛才p1指向的節(jié)點(diǎn)*/</p><p>  p1=p1->next; /*p1后移一個(gè)節(jié)點(diǎn)*/</p><p><b>  }</b></p><p>  if(p0->num<=p1->num)</p><p>  {if(head=

24、=p1)</p><p>  head=p0; /*插到原來(lái)第一個(gè)節(jié)點(diǎn)之前*/</p><p>  else p2->next=p0; /*插到p2指向的節(jié)點(diǎn)之后*/</p><p>  p0->next=p1;</p><p><b>  }</b></p><p&g

25、t;<b>  else</b></p><p>  { p1->next=p0;</p><p>  p0->next=NULL;</p><p>  } /*插到最后的節(jié)點(diǎn)之后*/</p><p><b>  }</b></p><p>  n=n+

26、1; /*節(jié)點(diǎn)數(shù)加1*/</p><p>  return(head);</p><p><b>  }</b></p><p>  void main() /*作主調(diào)函數(shù)*/</p><p>  { struct student *head,stu;</p><p>  lon

27、g del_num;</p><p>  printf("input records:\n"); </p><p>  head=creat(); /*建立鏈表,返回頭指針*/</p><p>  print(head); /*輸出全部節(jié)點(diǎn)*/</p><p>  printf("\nin

28、put the deleted number:");</p><p>  scanf("%1d",&del_num); /*輸入要?jiǎng)h除的學(xué)號(hào)*/</p><p>  head=del(head,del_num); /*刪除后鏈表的頭地址*/</p><p>  print(head); /*輸出全部節(jié)點(diǎn)

29、*/</p><p>  printf("\ninput thr inserted record:"); /*輸入要插入的節(jié)點(diǎn)*/</p><p>  scanf("%d,%d",&stu.num,&stu.score);</p><p>  head=insert(head,&stu);

30、 /*插入一個(gè)節(jié)點(diǎn),返回頭結(jié)點(diǎn)地址*/</p><p>  print(head); /*輸出全部節(jié)點(diǎn)*/</p><p><b>  }</b></p><p>  四、主要運(yùn)行界面的介紹:(在vc環(huán)境下)</p><p>  1、連接運(yùn)行后,輸入數(shù)據(jù)(以兩組為例),組之間以逗號(hào)間隔,最后以數(shù)字0結(jié)束。

31、如圖所示,輸入后可顯示數(shù)據(jù)。</p><p>  2、選擇輸入要?jiǎng)h除的數(shù)據(jù),即第幾組;然后就可顯示刪除后的記錄。</p><p>  3、輸入要添加的信息,將新數(shù)據(jù)列入數(shù)據(jù)列全部輸出,并且新數(shù)據(jù)將取代之前被刪除的數(shù)據(jù)的位置。</p><p>  五、課程設(shè)計(jì)中的得意之處:</p><p>  首先能夠如所要求的那樣完成鏈表的建立與輸出以及鏈表

32、中結(jié)點(diǎn)的刪除與插入,再次,在此程序中,在接連著完成刪除與插入后,實(shí)際的效果還相當(dāng)于兩數(shù)據(jù)間的替代。</p><p>  六、目前存在的問(wèn)題:</p><p>  不能隨意選擇——只進(jìn)行刪除或者是只進(jìn)行插入,另外每次只能刪除或者插入一個(gè)數(shù)據(jù),而不能完成多個(gè)數(shù)據(jù)同時(shí)進(jìn)行的操作。</p><p>  七、課程設(shè)計(jì)存在的目的:</p><p>  開(kāi)

33、展課程設(shè)計(jì),有利于同學(xué)們對(duì)基礎(chǔ)知識(shí)的理解,從實(shí)踐中真實(shí)地體驗(yàn)程序設(shè)計(jì)的“神奇之處”,更好地鞏固所學(xué)的知識(shí)。課程設(shè)計(jì)還有利于邏輯思維的鍛煉,從任務(wù)分析、確定算法、界面布局、編寫代碼到調(diào)試運(yùn)行,整個(gè)過(guò)程都需要有條理地去構(gòu)思。</p><p><b>  八、自我感受:</b></p><p>  短短的一周時(shí)間,要完成課程設(shè)計(jì)的確不容易,畢竟是第一次做的。在編程的整個(gè)過(guò)程

溫馨提示

  • 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)論