數據結構課程設計---鏈表的創(chuàng)建、插入、刪除、修改_第1頁
已閱讀1頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設計報告</b></p><p>  課程設計題目:鏈表的創(chuàng)建、插入、刪除、修改</p><p><b>  學生姓名 </b></p><p>  專 業(yè) 信息工程</p><p>  班 級 </p><p&

2、gt;  學 號 </p><p><b>  指導教師 </b></p><p><b>  2013年1月9日</b></p><p><b>  一、實驗題目:</b></p><p>  實現鏈表的創(chuàng)建、插入、刪除和修改</p>&l

3、t;p>  任務:實現鏈表的創(chuàng)建、插入、刪除、修改和輸出 </p><p>  要求:建立一個簡單的人機對話,創(chuàng)建、插入、刪除、修改和輸出功能可以根據需要選擇使用。</p><p>  二、實驗時間、地點:</p><p>  2011-12-26~ 2011-12-30、信工樓302</p><p><b>  三、實驗目的

4、</b></p><p>  本次課程設計的主要目的是綜合運用所學的數據結構知識解決一個比較實際問題,側重對鏈表、數組、字符串、圖、樹等相關內容的綜合應用,使同學們能進一步熟悉掌握數據結構的基礎知識,進一步提升自己的解決問題和編程調試能力,為后續(xù)專業(yè)課程的學習打下良好的基礎。</p><p><b>  四、實驗要求</b></p><

5、p>  1. 了解數據結構及其分類、數據結構與算法的密切關系; 2. 熟悉各種基本數據結構及其操作,學會根據實際問題來選擇數據結構; 3. 掌握設計算法的步驟和分析方法; 4. 掌握數據結構在排序和查找等常用算法中的應用。</p><p><b>  5. 獨立完成;</b></p><p>  6. 每個人需按照選題規(guī)則確定好自己的題目(注意不是多人完成

6、一題,每人獨立完成一題),不得以任何理由選擇其他的題目,當然在完成自己的題目之后根據個人興趣可以繼續(xù)選做其他的題目;</p><p>  7.課程設計完成后嚴格按照報告格式撰寫課程設計報告,并于結束后的第三天上交到學習委員統(tǒng)一交給老師;</p><p>  8.課程設計的成績由兩部分組成:程序檢查成績(40%,每個功能占程序分的20%)+報告檢查成績(40%)+平時考核(20%)</

7、p><p><b>  五、實現思路</b></p><p>  鏈表是一種動態(tài)數據結構,他的特點是用一組任意的存儲單元(可以是連續(xù)的,也可以是不連續(xù)的)存放數據元素。</p><p>  鏈表中每一個元素成為“結點”,每一個結點都是由數據域和指針域組成的,每個結點中的指針域指向下一個結點。Head是“頭指針”,表示鏈表的開始,用來指向第一個結點,

8、而最后一個指針的指針域為NULL(空地址),表示鏈表的結束。</p><p>  可以看出鏈表結構必須利用指針才能實現,即一個結點中必須包含一個指針變</p><p>  量,用來存放下一個結點的地址。</p><p>  實際上,鏈表中的每個結點可以用若干個數據和若干個指針。結點中只有一個指針的鏈表稱為單鏈表,這是最簡單的鏈表結構。</p><

9、p>  再c++中實現一個單鏈表結構比較簡單。例如,可定義單鏈表結構的最簡單形式如下</p><p>  class link</p><p><b>  {</b></p><p><b>  public:</b></p><p>  elemtype data;</p>&

10、lt;p>  link *next;</p><p><b>  };</b></p><p>  這里用到了結構體類型。其中,*next是指針域,用來指向該結點的下一個結點;Data是一個整形變量,用來存放結點中的數據。當然,Data可以是任何數據類型,包括結構體類型或類類型。</p><p>  在此基礎上,我們在定義一個鏈表類lis

11、t,其中包含鏈表結點的插入,刪除,輸出等功能的成員函數。</p><p>  void print(link*head) ;//鏈表結點的輸出</p><p>  link*Locate(link*head,elemtype x);//鏈表的的查詢</p><p>  void insert(link*head,elemtype x,elemtype y);//鏈表

12、結點的插入</p><p>  void deletel(link*head,elemtype x);//鏈表結點的刪除</p><p><b>  v</b></p><p>  oid change(link*p,elemtype x,elemtype y);//鏈表的修改</p><p>  由于鏈表中的各個結點是

13、由指針鏈接在一起的,其存儲單元文筆是連續(xù)的,因此,對其中任意結點的地址無法向數組一樣,用一個簡單的公式計算出來,進行隨機訪問。只能從鏈表的頭指針(即head)開始,用一個指針p先指向第一個結點,然后根據結點p找到下一個結點。以此類推,直至找到所要訪問的結點或到最后一個結點(指針為空)為止。</p><p><b>  流程圖:</b></p><p><b>

14、;  Public:</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b&g

15、t;  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y

16、</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  主函數流程圖</b></p><p><b>  N</b></p><p><b>  Y

17、</b></p><p><b>  N</b></p><p><b>  3…</b></p><p><b>  4…</b></p><p><b>  5…</b></p><p><b>  6…&

18、lt;/b></p><p><b>  7…</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  …….</b></p><p><b>  …….&

19、lt;/b></p><p><b>  …….</b></p><p><b>  六、實現過程</b></p><p>  #include<iostream.h></p><p>  #include<windows.h></p><p>

20、  #include<stdlib.h></p><p>  #define elemtype int</p><p>  class link</p><p><b>  {</b></p><p><b>  public:</b></p><p>  ele

21、mtype data;</p><p>  link *next;</p><p><b>  };</b></p><p>  class linklist</p><p><b>  {</b></p><p>  protected:</p><p&

22、gt;  link*head;</p><p><b>  public:</b></p><p>  link*rcreat()</p><p><b>  {</b></p><p>  link*s,*p,*r;</p><p>  elemtype i;</p&

23、gt;<p>  cout<<"輸入多個結點數值(用空格分隔),為0是算法結束";</p><p><b>  cin>>i;</b></p><p>  p=r=new link;</p><p>  p->next=NULL;</p><p><b

24、>  while(i)</b></p><p><b>  {</b></p><p>  s=new link;</p><p>  s->data=i;</p><p>  r->next=s;</p><p><b>  r=s;</b>&

25、lt;/p><p><b>  cin>>i;</b></p><p><b>  }</b></p><p>  r->next=NULL;</p><p><b>  return p;</b></p><p><b>  }

26、</b></p><p>  void print(link*head)</p><p><b>  {</b></p><p><b>  link*p;</b></p><p>  p=head->next;</p><p>  while(p->

27、next!=NULL)</p><p><b>  {</b></p><p>  cout<<p->data<<"->";</p><p>  p=p->next;</p><p><b>  }</b></p><

28、p>  cout<<p->data;</p><p>  cout<<endl;</p><p><b>  }</b></p><p>  link*Locate(link*head,int x)</p><p><b>  {</b></p>&

29、lt;p><b>  link*p;</b></p><p><b>  p=head;</b></p><p><b>  int j=0;</b></p><p>  while((p!=NULL)&&(j<x))</p><p>  { p=p

30、->next;j++;}</p><p><b>  return p;</b></p><p><b>  }</b></p><p>  void deletel(link*head,elemtype x)</p><p><b>  {</b></p>

31、<p>  link*p,*q;</p><p><b>  q=head;</b></p><p>  p=head->next;</p><p>  while((p!=NULL)&&(p->data!=x))</p><p><b>  {</b><

32、;/p><p><b>  q=p;</b></p><p>  p=p->next;</p><p><b>  }</b></p><p>  if(p==NULL)cout<<"要刪除的結點不存在";</p><p><b>

33、  else</b></p><p><b>  {</b></p><p>  q->next=p->next;</p><p>  delete(p);</p><p><b>  }</b></p><p><b>  }</b&

34、gt;</p><p>  void insert(link*head,int x,elemtype y)</p><p><b>  {</b></p><p>  link*p,*s;</p><p>  s=new link;</p><p>  s->data=y;</p>

35、;<p>  if(head->next==NULL)</p><p><b>  {</b></p><p>  head->next=s;</p><p>  s->next=NULL;</p><p><b>  }</b></p><p&g

36、t;  p=Locate(head,x);</p><p>  if(p==NULL)</p><p>  cout<<"插入位置非法";</p><p><b>  else</b></p><p><b>  {</b></p><p> 

37、 s->next=p->next;</p><p>  p->next=s;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void change(link*p,elemtype x,elemtype y)</p>

38、<p><b>  {</b></p><p><b>  link*q;</b></p><p>  q=p->next;</p><p>  while(q!=NULL)</p><p><b>  {</b></p><p>  

39、if(q->data==x)q->data=y;</p><p>  q=q->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  int count(link*h)</p><p><b&g

40、t;  {</b></p><p>  link*p;int n=0;</p><p>  p=h->next;</p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  n++;p=p->next;</p>

41、<p><b>  }</b></p><p><b>  return n;</b></p><p><b>  }</b></p><p><b>  };</b></p><p>  void main()</p><

42、p><b>  {</b></p><p>  int n,act;</p><p><b>  char m;</b></p><p>  elemtype x,y;</p><p>  link*p,*q; linklist a;</p><p>  p=a.rcr

43、eat();</p><p>  a.print(p);</p><p>  loop1:cout<<"請選擇要進行的操作:\n e:查找; f:刪除; g:插入; h:修改; i:統(tǒng)計; q:退出; c:清屏。\n";</p><p><b>  cin>>m;</b></p

44、><p>  if(m=='e') //根據提示選擇操作</p><p><b>  {act=1;}</b></p><p>  if(m=='f')</p><p><b>  {act=2;}</b></p><p> 

45、 if(m=='g')</p><p><b>  {act=3;}</b></p><p>  if(m=='h')</p><p><b>  {act=4;}</b></p><p>  if(m=='i')</p><p&g

46、t;<b>  {act=5;}</b></p><p>  if(m=='q')</p><p><b>  {act=6;}</b></p><p>  if(m=='c')</p><p><b>  {act=7;}</b></p&

47、gt;<p>  switch(act)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  cout<<"請輸入要查找的元素值";</p><p><b>  cin>>

48、x;</b></p><p>  q=a.Locate(p,x);</p><p>  if(q==NULL)cout<<x<<"不在表中。找不到!"<<endl;</p><p>  else cout<<x<<"在表中,已找到!"<<end

49、l;</p><p>  goto loop1;</p><p><b>  break;</b></p><p>  case 2:cout<<"請輸入要刪除的元素";</p><p><b>  cin>>y;</b></p><

50、p>  a.deletel(p,y);</p><p>  a.print(p);</p><p>  goto loop1;</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  cout<&l

51、t;"請輸入插入位置的元素(將待插元素插入到它的后面)";</p><p><b>  cin>>x;</b></p><p>  cout<<"請輸入待插元素值";</p><p><b>  cin>>y;</b></p><

52、;p>  a.insert(p,x,y);</p><p>  a.print(p);</p><p>  goto loop1;</p><p><b>  break;</b></p><p>  case 4:cout<<"請輸入要修改前后的元素值";</p>&

53、lt;p>  cin>>x>>y;</p><p>  a.change(p,x,y);</p><p>  a.print(p);</p><p>  goto loop1;</p><p><b>  break;</b></p><p>  case 5:n=a

54、.count(p);</p><p>  cout<<"鏈表中結點個數為:"<<n<<endl;</p><p>  goto loop1;</p><p><b>  break;</b></p><p>  case 6:system("CLS&quo

55、t;); //清屏</p><p>  goto loop2;</p><p><b>  break;</b></p><p>  case 7:system("CLS"); //清屏</p><p>  a.print(p);</p><p>  goto loop1;&l

56、t;/p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  loop2:;</b></p><p><b>  }</b></p><p>  七、實驗總結(分析程序的得與失)

57、</p><p>  1、經過運行本程序能夠進行鏈表的創(chuàng)建、插入、刪除、修改、統(tǒng)計等功能,已具備鏈表試驗的功能,基本達到了題目的要求。</p><p>  2、在編寫程序的過程中,對字符的判斷做標記,用switch語句選擇運用,使結構更加清晰,能夠用goto語句進行循環(huán)。使程序的可執(zhí)行性更強。</p><p>  3、本程序還是有一定缺陷,比如運行界面不夠美觀、但基

58、本達到了人機交互的功能達到要求</p><p>  4、對本程序自我感覺人機交互做的比較好,能夠做到根據選擇進行操作,主要依靠循環(huán)進行實現,同時我也加入了清屏功能,使操作更加人性化。</p><p>  5、本程序的但還是比較單一,功能不是很完善,可以對界面進行設計,是其更加美觀。</p><p><b>  八、心得體會</b></p&

59、gt;<p>  課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現,提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程。通過本次為期一周的課程設計課,我有很多感觸,從我拿到題目開始到完全做出程序,我經歷了一個波折的一周,但是這周我受益匪淺,明白把理論用到實踐中的不容易。</p><p>  這是第二次做C的課程設計,比第一次稍微好一點,遇到問題都自己花時間去查找資料,

溫馨提示

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

評論

0/150

提交評論