版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 信息科學(xué)與技術(shù)學(xué)院</b></p><p> 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告</p><p> 題目名稱:循環(huán)單鏈表(附加頭結(jié)點(diǎn),引用)</p><p> 專業(yè)班級:計算機(jī)科學(xué)與技術(shù)2011級1班</p><p> 學(xué)生姓名:</p><p> 學(xué)生學(xué)號:</p&g
2、t;<p> 指導(dǎo)教師:</p><p> 目 錄</p><p> 1 課程設(shè)計的目的1</p><p> 1.1 課程設(shè)計的目的1</p><p> 1.2 課程設(shè)計的題目1</p><p> 1.3 題目要求1</p><p><
3、b> 2 概要設(shè)計1</b></p><p> 2.1 存儲結(jié)構(gòu)1</p><p> 2.2 基本操作1</p><p><b> 3 詳細(xì)設(shè)計2</b></p><p> 3.1 流程圖2</p><p> 3.2 源程序7</p>
4、;<p><b> 4 測試12</b></p><p> 5 課程設(shè)計總結(jié)19</p><p><b> 6參考書目:20</b></p><p> 1 課程設(shè)計的目的</p><p> 1.1 課程設(shè)計的目的</p><p> 更好
5、的掌握數(shù)據(jù)結(jié)構(gòu)這門課程,會用數(shù)據(jù)結(jié)構(gòu)的基本思想及算法解決實(shí)際問題。更好的掌握循環(huán)鏈表,能進(jìn)行各種基本的操作,提高編程能力。</p><p> 1.2 課程設(shè)計的題目</p><p> 循環(huán)單鏈表(附加頭結(jié)點(diǎn),引用)</p><p><b> 1.3 題目要求</b></p><p> 實(shí)現(xiàn)附加頭結(jié)點(diǎn)循環(huán)單鏈表
6、的基本操作:創(chuàng)建空表、輸出、求表長、取元素、查找、替換、插入、刪除、清空。</p><p><b> 2 概要設(shè)計</b></p><p><b> 2.1 存儲結(jié)構(gòu)</b></p><p><b> 存儲結(jié)構(gòu)</b></p><p> typedef struct
7、 node{</p><p> datatype data;/*數(shù)據(jù)域*/</p><p> struct node *next;/*指針域*/</p><p> }LNode,*LinkList;/*結(jié)點(diǎn)及結(jié)點(diǎn)的地址*/</p><p><b> 2.2 基本操作</b></p><p&g
8、t; 創(chuàng)建空表、輸出、求表長、取元素、查找、替換、插入、刪除、清空。</p><p><b> 3 詳細(xì)設(shè)計</b></p><p><b> 3.1 流程圖</b></p><p> 各個算法的設(shè)計如下:</p><p><b> 主函數(shù):</b></p&
9、gt;<p><b> 主菜單</b></p><p> 用于進(jìn)行指示進(jìn)行各種操作,是與每個函數(shù)都相聯(lián)系的一個函數(shù)</p><p><b> 3.顯示鏈表</b></p><p> 先讓指針指向首元結(jié)點(diǎn),在判斷該指針是否為頭指針,不是則輸入數(shù)據(jù),實(shí)則退出</p><p> p
10、 = head->next;</p><p><b> 圖3</b></p><p><b> 4.求表長</b></p><p> 先求表的初始長,在判斷鏈表是否為空,不是則len自加,否則結(jié)束</p><p><b> 取元素</b></p>&
11、lt;p> 先求表長,在判斷Index < 1 || Index > len,為否則循環(huán),一直活得該數(shù)據(jù)</p><p><b> 查找</b></p><p> 求表長,在判斷鏈表是否為空,是則結(jié)束,否則判斷要查找的數(shù)據(jù)是否在鏈表中,是則成功</p><p><b> 7.替換</b></
12、p><p> 判斷要替換的位置是否在鏈表范圍中,是則循環(huán)找到要替換的數(shù)據(jù)替換,否則結(jié)束</p><p><b> 8.插入</b></p><p> 判斷將要插入的位置是否在鏈表范圍內(nèi),是則循環(huán)將要插入的數(shù)據(jù)插入,否則結(jié)束</p><p><b> 9.刪除</b></p><
13、;p> 判斷鏈表是否為空,否則刪除該結(jié)點(diǎn),是則結(jié)束</p><p><b> 清空</b></p><p> 判斷聊表是夠?yàn)榭?,否則依次釋放空間,否則結(jié)束</p><p> p->next->data == data</p><p><b> 3.2 源程序</b>&l
14、t;/p><p> #include <iostream></p><p> using namespace std;</p><p> typedef int ElemType;</p><p> typedef struct node{</p><p> ElemType data;</p&
15、gt;<p> struct node *next;</p><p> }LNode,*LinkList,*pNODE;</p><p> // 創(chuàng)建一個有頭結(jié)點(diǎn)的空循環(huán)表。</p><p> LinkList InitList(void) </p><p><b> {</b></p>
16、;<p> pNODE head = new LNode; </p><p> head->next = head;</p><p> return head;</p><p><b> }</b></p><p> // 頭插法。將給定結(jié)點(diǎn)插在鏈表頭部。</p><p&
17、gt; void InsertHead(LinkList head,pNODE anode)</p><p><b> { </b></p><p> anode->next = head->next; </p><p> head->next = anode;</p><p><b>
18、; }</b></p><p> // 返回鏈表長度。</p><p> int ListLen(LinkList head)</p><p><b> { </b></p><p> int len = 0;</p><p> pNODE p = head;</p&
19、gt;<p> while(p->next != head)</p><p><b> { </b></p><p><b> ++len; </b></p><p> p = p->next;</p><p><b> } </b><
20、/p><p> return len;</p><p><b> }</b></p><p> // 查找。成功返回1,否則返回0。</p><p> int ListSearch(LinkList head, ElemType data)</p><p><b> {</b
21、></p><p> pNODE p = head;</p><p> while(p->next != head) </p><p><b> { </b></p><p> if(p->next->data == data) </p><p> return
22、 true; </p><p> p = p->next;</p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> // 獲取指定索引號的數(shù)據(jù)。&
23、lt;/p><p> void GetData(LinkList head,int Index,ElemType data)</p><p><b> { </b></p><p> pNODE p = head;</p><p> int i,len = ListLen(head);</p><
24、p> if(Index < 1 || Index > len)</p><p> cout <<"獲取失敗" <<endl;</p><p> for(i = 0; i <Index; ++i,p = p->next);</p><p> data = p->data; <
25、/p><p> cout <<"獲取成功,其值為:"<<data <<endl;</p><p><b> }</b></p><p> // 用給定結(jié)點(diǎn)替換指定索引的結(jié)點(diǎn)。</p><p> void NodeReplace(LinkList head, in
26、t Index, int data)</p><p><b> { </b></p><p> pNODE p = head; </p><p> int i,len = ListLen(head);</p><p> if(Index < 1 || Index > len)</p>&
27、lt;p> cout <<"錯誤" <<endl;</p><p> for(i = 0; i <Index; ++i,p = p->next);</p><p> p->data=data;</p><p> cout <<"替換成功" <<en
28、dl;</p><p><b> } </b></p><p><b> //插入結(jié)點(diǎn)</b></p><p> void ListInsert(LinkList head,int Index,int data)</p><p><b> {</b></p>
29、<p> pNODE s,p=head;int i,len = ListLen(head);</p><p> if(Index < 1 || Index > len)</p><p> cout <<"錯誤" <<endl;</p><p> for(i=1;i<Index;++i
30、,p=p->next);</p><p> s=new LNode;</p><p> s->data=data;</p><p> s->next=p->next;</p><p> p->next=s;</p><p> cout <<"插入成功&quo
31、t; <<endl;</p><p><b> }</b></p><p> // 刪除數(shù)據(jù)域?yàn)閐ata的結(jié)點(diǎn)。成功返回1,否則返回0。</p><p> int NodeErase(LinkList head,ElemType data)</p><p><b> {</b>&
32、lt;/p><p> pNODE q,p = head;</p><p> while(p->next != head) </p><p><b> {</b></p><p> if(p->next->data == data)</p><p><b> { &
33、lt;/b></p><p> q = p->next; </p><p> p->next = q->next;</p><p><b> delete q;</b></p><p><b> return 1;</b></p><p>&l
34、t;b> }</b></p><p> p = p->next;</p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p><
35、b> // 釋放鏈表</b></p><p> void ListDestroy(LinkList head)</p><p><b> { </b></p><p> pNODE q,p = head;</p><p> while(p->next != head)</p>
36、<p><b> {</b></p><p> q = p->next;</p><p> p->next = q->next;</p><p><b> delete q;</b></p><p><b> }</b></p&g
37、t;<p> delete head;</p><p> cout <<"釋放成功" <<endl;</p><p><b> }</b></p><p><b> // 顯示鏈表</b></p><p> void ListSho
38、w(LinkList head)</p><p><b> { </b></p><p> pNODE p = head->next;</p><p> while(p != head)</p><p><b> {</b></p><p> cout <
39、;<" "<<p->data;</p><p> p = p->next;</p><p><b> }</b></p><p> cout <<endl;</p><p><b> }</b></p><p&
40、gt; void Menu(LinkList head)</p><p><b> {</b></p><p> cout <<"***********************************循環(huán)鏈表*************************************" <<endl;</p>
41、<p> cout <<"********************************************************************************" <<endl;</p><p> cout <<"*****************1顯示鏈表2求表長3取元素4查找5替換6插入7刪除8清空9
42、退出**********" <<endl;</p><p> cout <<"********************************************************************************" <<endl;</p><p> cout<<"請選擇您需
43、要的操作:"<<endl;</p><p> int xz,Index,data;</p><p><b> cin >>xz;</b></p><p> switch(xz)</p><p><b> {</b></p><p>&
44、lt;b> case 1: </b></p><p> ListShow(head);</p><p> system("pause");</p><p> system("cls");</p><p> Menu(head);</p><p><
45、;b> break;</b></p><p><b> case 2:</b></p><p> cout <<"鏈表長度為:" <<ListLen(head) <<endl;</p><p> system("pause");</p&g
46、t;<p> system("cls");</p><p> Menu(head);</p><p><b> break;</b></p><p><b> case 3:</b></p><p> cout <<"請輸入要獲取的數(shù)
47、據(jù)的位置:" <<endl;</p><p> cin >>Index;</p><p> GetData(head,Index,data);</p><p> system("pause");</p><p> system("cls");</p>
48、<p> Menu(head);</p><p><b> break;</b></p><p><b> case 4:</b></p><p> cout <<"請輸入要查找的數(shù)據(jù) : " <<endl;</p><p> ci
49、n >>data;</p><p> if(ListSearch(head, data))</p><p> cout <<"找到了" <<endl;</p><p><b> else</b></p><p> cout <<"對不起
50、,沒找到" <<data <<endl;</p><p> system("pause");</p><p> system("cls");</p><p> Menu(head);</p><p><b> break;</b></
51、p><p><b> case 5:</b></p><p> cout <<"請輸入要替換的位置,其值為:" <<endl;</p><p> cin >>Index >>data;</p><p> NodeReplace(head,Index,
52、data);</p><p> system("pause");</p><p> system("cls");</p><p> Menu(head);</p><p><b> break;</b></p><p><b> case
53、 6:</b></p><p> cout <<"請輸入插入的位置及數(shù)值:" <<endl;</p><p> cin >>Index >>data;</p><p> ListInsert(head,Index,data);</p><p> syste
54、m("pause");</p><p> system("cls");</p><p> Menu(head);</p><p><b> break;</b></p><p><b> case 7:</b></p><p>
55、 cout <<"請輸入要刪除結(jié)點(diǎn)的數(shù)據(jù) : " <<endl;</p><p> cin >>data;</p><p> if(NodeErase(head,data))</p><p> cout <<"成功刪除" <<data <<endl
56、;</p><p><b> else</b></p><p> cout <<"沒有找到" <<data <<endl;</p><p> system("pause");</p><p> system("cls"
57、);</p><p> Menu(head);</p><p><b> break;</b></p><p><b> case 8:</b></p><p> ListDestroy(head);</p><p> system("pause"
58、;);</p><p> system("cls");</p><p> Menu(head);</p><p><b> break;</b></p><p><b> case 0:</b></p><p><b> exit(1)
59、;</b></p><p><b> }</b></p><p><b> }</b></p><p> int main()</p><p><b> {</b></p><p> LinkList head = InitLis
60、t();</p><p> pNODE anode;</p><p> int i,n = 10,a[] = {0,1,2,3,4,5,6,7,8,9};</p><p> for(i = 0; i < n; ++i)</p><p> { // 頭插法 </p><p> anode =new LN
61、ode;</p><p> anode->data = a[i];</p><p> InsertHead(head,anode);</p><p><b> }</b></p><p> Menu(head);</p><p><b> return 0;</b&
62、gt;</p><p><b> }</b></p><p><b> 4 測試</b></p><p><b> 菜單界面</b></p><p> 顯示各種功能需進(jìn)行的各種操作,界面如下:</p><p> 選擇1時,顯示鏈表中的數(shù)據(jù),
63、如圖:</p><p> 選擇2時,可以得到鏈表長度,如圖:</p><p> 選擇3時,輸入要獲取的數(shù)據(jù)的位置,成功則如圖:</p><p> 選擇4時,可以查找元素是否在該鏈表中,但該功能不能顯示出查找到的數(shù)據(jù)的位置,有所不足,如圖:</p><p> 選擇5時,可以替換你指定位置的數(shù)據(jù),如圖:</p><p&
64、gt; 選擇1,顯示替換指定位置數(shù)據(jù)后鏈表中的所有數(shù)據(jù),如圖:</p><p> 選擇6時,可以選擇要插入的位置及數(shù)值,插入成功,如圖:</p><p> 選擇1,插入后,鏈表中所有的數(shù)據(jù),如圖:</p><p> 選擇7時,可以刪除你要刪除的數(shù)據(jù),成功刪除則如圖:</p><p> 選擇7,刪除失敗,如圖:</p>
65、<p> 選擇8時,可以清空鏈表,如圖:</p><p><b> 5 課程設(shè)計總結(jié)</b></p><p> 通過這次課程設(shè)計,我又收獲到很多,平時的在做作業(yè)時,因?yàn)轭}形與結(jié)構(gòu)都是很簡單的,并且每一章的內(nèi)容都是有相應(yīng)的例題可以參考,所以在做題時沒有遇到過很麻煩的問題,而這次不同了,一個課題拿到手時,給我的感覺是無從下手,而且要求很多,使得題目要求更
66、大了.通過本次課程設(shè)計,我最大的收獲就是自己的動手能力得到了很大的提升,我發(fā)現(xiàn)只有自己動手才能更好的了解到自己的知識漏洞,很多小問題可能對代碼的編寫都有很大影響,像在編寫過程中我有時漏掉半撇括號,而在查找時就相當(dāng)費(fèi)力,所以多敲代碼很重要啊。對語言也得到了更深的了解。語言等于算法加數(shù)據(jù)結(jié)構(gòu),這句話確實(shí)很有道理,數(shù)據(jù)結(jié)構(gòu)給了我一種更好的思路,一種更好的思想,掌握一種思想遠(yuǎn)比會很多語言來的重要,只有我們有了思路,有了更好的算法,我們的程序才會
67、更加優(yōu)秀,空間復(fù)雜度,時間復(fù)雜度才會更加少。在設(shè)計過程中我遇到了很多錯誤或是難題,其中耗時最多的就是考慮存儲結(jié)構(gòu),只有有了一個好的存儲結(jié)構(gòu)對數(shù)據(jù)的操作才更加便利。</p><p> 我將整個程序分塊完成的.將整個大的程序的實(shí)現(xiàn)分8個功能,每個功能都通過一個相應(yīng)的函數(shù)來實(shí)現(xiàn).在調(diào)試時分別進(jìn)行調(diào)試,使得調(diào)試更方便些.在編寫各個函數(shù)只是按著題目要求的去完成,后來經(jīng)指導(dǎo)老師指導(dǎo)后,發(fā)現(xiàn)了很多自己欠缺的地方,又一次將程序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--雙向循環(huán)鏈表的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---雙向鏈表
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--鏈表
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---鏈表操作
- 單鏈表的基本操作迷宮問題數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)(單鏈表)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---城市鏈表的設(shè)計與實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--雙向循環(huán)鏈表的創(chuàng)建及相關(guān)操作的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---鏈表的創(chuàng)建、插入、刪除、修改
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--單鏈表兩個集合相加減的算法
- 實(shí)現(xiàn)兩個鏈表的合并數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-雙鏈表創(chuàng)建與演示設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---實(shí)現(xiàn)兩個鏈表的合并
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 《數(shù)據(jù)結(jié)構(gòu)與算法分析》課程設(shè)計順序表、單鏈表、順序棧、查找、排序算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--鏈表的維護(hù)與文件形式的保存
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
評論
0/150
提交評論