數(shù)據(jù)結(jié)構(gòu)課程設計報告--鏈表_第1頁
已閱讀1頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  班級:</b></p><p><b>  姓名:</b></p><p><b>  學號:</b></p><p><b>  設計時間:</b></p><p>  一、應用程序的名稱:鏈表</p><

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

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

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

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

6、t;<p><b>  Y</b></p><p> ?。?) 鏈表節(jié)點的插入</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ù)帶回一個指向鏈表頭的指針*/</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、 /*開辟一個新單元*/</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é)點連接在p2所指的結(jié)點后面*/</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的值,即鏈表中第一個節(jié)點的起始地址*/</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é)點,且后有節(jié)點*/</p><p><b>  { p2=p1;</b></p><p>  p1=p1->next;</p><p>  } /*p1后移一個節(jié)點*/</p><p>

18、  if(num==p1->num) /*找到了*/</p><p>  { if(p1==head)head=p1->next; /*若p1指向的首節(jié)點,把第二個節(jié)點地址賦予head*/</p><p>  else p2->next=p1->next; /*否則將下一個節(jié)點地址賦給前一節(jié)點地址*/</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é)點*/</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指向第一個節(jié)點*/</p><p>  p0=stud; /*p0指向要插入的節(jié)點*/</p><p>  if(head==NULL) /*原來的鏈表是空表*/</p><p><b>  {head=p0;</b></p><p>  p0-

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

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

24、=p1)</p><p>  head=p0; /*插到原來第一個節(jié)點之前*/</p><p>  else p2->next=p0; /*插到p2指向的節(jié)點之后*/</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é)點之后*/</p><p><b>  }</b></p><p>  n=n+

26、1; /*節(jié)點數(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é)點*/</p><p>  printf("\nin

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論