版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 1 選題背景1</b></p><p><b> 2 方案與論證1</b></p><p> 2.1 鏈表的概念和作用1</p><p> 2.2 實(shí)驗(yàn)的基本要求(軟硬件)1</p>
2、;<p> 2.3 算法的設(shè)計(jì)思想1</p><p> 2.4 相關(guān)圖例2</p><p> 2.4.1 單鏈表的結(jié)點(diǎn)結(jié)構(gòu)2</p><p> 2.4.2 算法流程圖2</p><p><b> 3 過程論述3</b></p><p> 3.1 鏈表的建立3
3、</p><p> 3.2 取出鏈表中的元素4</p><p> 3.3 插入元素4</p><p> 3.4 刪除元素5</p><p> 3.5 查找元素6</p><p><b> 4 結(jié)果分析6</b></p><p> 4.1 單鏈表的結(jié)構(gòu)
4、6</p><p><b> 4.2 單鏈表6</b></p><p> 4.2.1 順鏈操作技術(shù)6</p><p> 4.2.2 指針保留技術(shù)7</p><p><b> 5 結(jié)論與總結(jié)7</b></p><p><b> 參考文獻(xiàn)8</
5、b></p><p><b> 附錄代碼:9</b></p><p><b> 1 選題背景</b></p><p> 陳火旺院士把計(jì)算機(jī)60多年的發(fā)展成就概括為五個(gè)“一”:開辟一個(gè)新時(shí)代----信息時(shí)代,形成一個(gè)新產(chǎn)業(yè)----信息產(chǎn)業(yè),產(chǎn)生一個(gè)新科學(xué)----計(jì)算機(jī)科學(xué)與技術(shù),開創(chuàng)一種新的科研方法----計(jì)算
6、方法,開辟一種新文化----計(jì)算機(jī)文化,這一概括深刻影響了計(jì)算機(jī)對(duì)社會(huì)發(fā)展所產(chǎn)生的廣泛而深遠(yuǎn)的影響。</p><p> 數(shù)據(jù)結(jié)構(gòu)和算法是計(jì)算機(jī)求解問題過程的兩大基石。著名的計(jì)算機(jī)科學(xué)家P.Wegner指出,“在工業(yè)革命中其核心作用的是能量,而在計(jì)算機(jī)革命中其核心作用的是信息”。計(jì)算機(jī)科學(xué)就是“一種關(guān)于信息結(jié)構(gòu)轉(zhuǎn)換的科學(xué)”。信息結(jié)構(gòu)(數(shù)據(jù)結(jié)構(gòu))是計(jì)算機(jī)科學(xué)研究的基本課題,數(shù)據(jù)結(jié)構(gòu)又是算法研究的基礎(chǔ)。</p&
7、gt;<p><b> 2 方案與論證</b></p><p> 2.1 鏈表的概念和作用 </p><p> 鏈表是一種鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),鏈表屬于線性表,采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),也是常用的動(dòng)態(tài)存儲(chǔ)方法。為了克服順序表的缺陷,可以采用鏈?zhǔn)椒绞酱鎯?chǔ)線性表。通常將采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的線性表稱為線性鏈表。單鏈表的結(jié)構(gòu)包括數(shù)據(jù)域和指針域,這兩部分總稱為結(jié)點(diǎn)(Node)
8、。單鏈表中每個(gè)結(jié)點(diǎn)的存儲(chǔ)地址放在其前驅(qū)結(jié)點(diǎn)的指針域中,由于線性表中的第一個(gè)結(jié)點(diǎn)無前驅(qū),所以應(yīng)設(shè)一個(gè)頭指針H指向第一個(gè)結(jié)點(diǎn)。由于線性表的最后一個(gè)節(jié)點(diǎn)沒有直接后繼,則制定單鏈表的最后一個(gè)結(jié)點(diǎn)的指針域?yàn)榭眨∟ULL)。它可以和隨意的在其任意一個(gè)位置進(jìn)行插入和刪除操作,這對(duì)于動(dòng)態(tài)的數(shù)據(jù)處理十分的有利。利用頭插建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表,并用算法實(shí)現(xiàn)該單鏈表的插入、刪除查找、輸出、求前驅(qū)和后繼、再把此單鏈表逆置,然后在屏幕上顯示每次操作的結(jié)果當(dāng)所有
9、操作完成后能撤銷該單鏈表。</p><p> 2.2 實(shí)驗(yàn)的基本要求(軟硬件)</p><p> 用VC++6.0軟件平臺(tái),操作系統(tǒng):Windows XP 硬件:內(nèi)存要求:內(nèi)存大小在256MB,其他配置一般就行。 </p><p> 2.3 算法的設(shè)計(jì)思想</p><p> (1)定義一個(gè)創(chuàng)建鏈表的函數(shù),通過該函數(shù)可以創(chuàng)建一個(gè)鏈
10、表,并為下面的函數(shù)應(yīng)用做好準(zhǔn)備。</p><p> ?。?)定義輸出鏈表的算法,通過對(duì)第一步已經(jīng)定義好的創(chuàng)建鏈表函數(shù)的調(diào)用,在這一步通過調(diào)用輸出鏈表的函數(shù)算法來實(shí)現(xiàn)對(duì)鏈表的輸出操作。</p><p> ?。?)定義一個(gè)遍歷查找的算法,通過此算法可以查找到鏈表中的每一個(gè)節(jié)點(diǎn)是否存在。</p><p> ?。?)定義查找鏈表的每一個(gè)前驅(qū)和后繼,通過定義這個(gè)算法,可以很容
11、易的實(shí)現(xiàn)對(duì)鏈表的前驅(qū)和后繼的查找工作。 </p><p> (5)定義插入節(jié)點(diǎn)的算法,通過定義這個(gè)算法,并結(jié)合這查找前驅(qū)和后繼的算法便可以在連鏈表的任意位置進(jìn)行插入一個(gè)新節(jié)點(diǎn)。</p><p> ?。?)定義刪除節(jié)點(diǎn)的操作,這個(gè)算法用于對(duì)鏈表中某個(gè)多余節(jié)點(diǎn)的刪除工作。</p><p><b> 2.4 相關(guān)圖例</b></p>
12、<p> 2.4.1 單鏈表的結(jié)點(diǎn)結(jié)構(gòu)</p><p> 如圖2-1所示,為單鏈表的結(jié)點(diǎn)結(jié)構(gòu)示意圖:</p><p> 圖2-1 單鏈表的結(jié)點(diǎn)結(jié)構(gòu)</p><p> 2.4.2 算法流程圖</p><p> 如圖2-2所示,為此算法流程圖:</p><p> 圖2-2 算法流程圖</p&g
13、t;<p><b> 3 過程論述</b></p><p><b> 3.1 鏈表的建立</b></p><p> 圖 3-1 鏈表的建立</p><p> 圖 3-2 建立鏈表并打印鏈表中的元素</p><p> 3.2 取出鏈表中的元素</p><p&
14、gt; 圖3-3 取出鏈表中的元素</p><p><b> 3.3 插入元素</b></p><p><b> 圖3-4 插入元素</b></p><p><b> 3.4 刪除元素</b></p><p><b> 圖3-5 刪除元素</b>
15、</p><p> 圖3-6 刪除元素后打印鏈表</p><p><b> 3.5 查找元素</b></p><p> 圖3-7 查找位置為6的元素</p><p><b> 4 結(jié)果分析</b></p><p> 4.1 單鏈表的結(jié)構(gòu)</p><
16、;p> 一般情況下,使用鏈表,只關(guān)心鏈表中結(jié)點(diǎn)間的邏輯順序,并不關(guān)心每個(gè)結(jié)點(diǎn)的實(shí)際存儲(chǔ)位置,因此通常情況下用箭頭來表示鏈域中的指針,于是鏈表就可以更直觀的畫成用箭頭鏈接起來的結(jié)點(diǎn)序列,如下圖所示:</p><p><b> H</b></p><p> 圖4-1 單鏈表的示例圖</p><p><b> 4.2 單鏈表&
17、lt;/b></p><p> 4.2.1 順鏈操作技術(shù)</p><p> 從“頭”開始,訪問單鏈表L中的結(jié)點(diǎn)i(p指向該節(jié)點(diǎn))時(shí),由于第i個(gè)結(jié)點(diǎn)的地址在第i-1個(gè)結(jié)點(diǎn)(pre指向該結(jié)點(diǎn),為p的前驅(qū))的指針域中存放,查找必須從單鏈表的“首結(jié)點(diǎn)”開始(p=L);通過p=p->next并輔助計(jì)數(shù)器來實(shí)現(xiàn)。</p><p> 4.2.2 指針保留技術(shù)&l
18、t;/p><p> 通過對(duì)第i個(gè)結(jié)點(diǎn)進(jìn)行插入、刪除等操作時(shí),需要對(duì)第i-1個(gè)結(jié)點(diǎn)的指針域進(jìn)行鏈址操作(pre->next),因此在處理過程中始終需要維持當(dāng)前指針p與其前驅(qū)指針pre的關(guān)系,將這種技術(shù)稱為“指針保留技術(shù)”。</p><p><b> 5 結(jié)論與總結(jié)</b></p><p> 通過這十幾天的時(shí)間,最后終于完成了這次數(shù)據(jù)結(jié)構(gòu)課
19、程設(shè)計(jì)任務(wù),內(nèi)心激動(dòng)的同時(shí),也是十分的辛苦的,從選題、審題、查資料到開始構(gòu)思,這個(gè)過程是最慢的,也是最難的。通過這次的課程設(shè)計(jì),我們對(duì)數(shù)據(jù)結(jié)構(gòu)中單鏈表的應(yīng)用有了更深的理解,并且使我們深刻的認(rèn)識(shí)到實(shí)踐的重要性,只有理論與實(shí)踐相結(jié)合才能達(dá)到很好的學(xué)習(xí)效果,學(xué)到很多東西,同時(shí)也發(fā)現(xiàn)僅僅書本的知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,需要把知識(shí)運(yùn)用到實(shí)踐中去,能力才能得到提高。由于剛開始對(duì)單鏈表的應(yīng)用總體結(jié)構(gòu)不熟悉,對(duì)書本知識(shí)的學(xué)習(xí)不夠扎實(shí),剛拿到題目的時(shí)候,還不好下
20、手,就請(qǐng)教了一些學(xué)習(xí)成績好一點(diǎn)的同學(xué),并認(rèn)真查找了一些資料,才對(duì)這次課程設(shè)計(jì)有了初步的了解。</p><p> 根據(jù)對(duì)數(shù)據(jù)結(jié)構(gòu)的了解,我們覺得我們對(duì)單鏈表的認(rèn)識(shí)要深一點(diǎn)。因此我們選擇了單鏈表的實(shí)驗(yàn),作為線性表的一種存儲(chǔ)結(jié)構(gòu),它的特點(diǎn)是可以從分利用存儲(chǔ)單元來存儲(chǔ)數(shù)據(jù),并且可以方便的實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行插入、刪除、輸出等操作。在我們進(jìn)行課程設(shè)計(jì)時(shí),雖然在大體上算法是正確的,但時(shí)常會(huì)出現(xiàn)一些小問題,使我們不得不花一些時(shí)間來
21、查找、修改錯(cuò)誤。</p><p> 通過這次課程設(shè)計(jì),讓我們充分認(rèn)識(shí)到數(shù)據(jù)結(jié)構(gòu)在編寫程序方面的重要地位。由于我們?cè)谡n程設(shè)計(jì)中編寫的是對(duì)單鏈表的基本操作,因此我們?cè)谶@次課程設(shè)計(jì)中收獲了很多關(guān)于單鏈表的應(yīng)用方面的知識(shí)。由于課程設(shè)計(jì)的題目還有很多,因此沒有對(duì)其他的題目進(jìn)行深入的了解而感到遺憾,因此我們希望在以后的學(xué)習(xí)過程中,能夠多多的學(xué)習(xí)這方面沒知識(shí)來彌補(bǔ)不足。</p><p> 最后,通過
22、本次數(shù)據(jù)結(jié)構(gòu)課設(shè),我學(xué)會(huì)了如何與別人共同探討、解決問題;當(dāng)發(fā)現(xiàn)問題時(shí),能學(xué)會(huì)利用身邊一切資料,包括圖書、網(wǎng)上資料等等來解決問題,并最終完成任務(wù)。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]耿國華.數(shù)據(jù)結(jié)構(gòu)--用C語言描述[M].北京:高等教育出版社,2011.6.</p><p> [2]譚浩強(qiáng).C程序設(shè)計(jì)[M]
23、.北京:清華大學(xué)出版社,2004.6.</p><p><b> 附錄代碼:</b></p><p> #include <stdio.h></p><p> #include<stdlib.h></p><p> typedef struct node//定義node結(jié)點(diǎn)</p&g
24、t;<p><b> { </b></p><p><b> int data;</b></p><p> struct node *next;</p><p> }linklist;</p><p> void setnull(linklist *H)//清空單鏈表<
25、/p><p><b> {</b></p><p> H->next=NULL;</p><p><b> }</b></p><p> void creatlist(linklist *H)//創(chuàng)建單鏈表</p><p><b> {</b>
26、;</p><p> linklist *p,*s;int x;</p><p><b> p=H;</b></p><p> printf("please input x:");</p><p> scanf("%d",&x);</p><p&
27、gt; while(x!=-1){</p><p> s=(linklist *)malloc(sizeof(linklist));</p><p> s->data=x;</p><p> s->next =p->next;</p><p> p->next =s;</p><p>
28、 p=p->next ;</p><p> printf("please input x:");</p><p> scanf("%d",&x);</p><p><b> }</b></p><p> p->next=NULL ;</p>
29、<p><b> }</b></p><p> void Leng(linklist *H)//求單鏈表長度</p><p><b> { </b></p><p> linklist *p;</p><p><b> int k;</b></p&
30、gt;<p><b> p=H;k=0;</b></p><p> while(p->next!=NULL){</p><p> p=p->next;</p><p><b> k++;</b></p><p><b> }</b></
31、p><p> printf("The linklist is:%d\n",k);</p><p><b> }</b></p><p> int GetElem(linklist *H,int i)//取單鏈表中的某個(gè)元素</p><p><b> {</b></p&g
32、t;<p> linklist *p;</p><p><b> int k;</b></p><p><b> p=H;k=0;</b></p><p> while(p->next!=NULL&&k<i){</p><p> p=p->n
33、ext;</p><p><b> k++;</b></p><p><b> }</b></p><p> if(k==i&&p!=NULL)</p><p> printf("i position data is %d\n",p->data);&
34、lt;/p><p><b> else</b></p><p> printf("No find!\n");</p><p><b> }</b></p><p> void Insert(linklist *H,int i,int x)//向單鏈表中插入某個(gè)元素</p
35、><p><b> {</b></p><p> linklist *p;int k;linklist *s;</p><p><b> p=H;k=0;</b></p><p> while(p->next!=NULL&&k<i-1){</p><
36、;p> p=p->next;k++;</p><p><b> }</b></p><p> if(k==i-1&&p->next!=NULL){</p><p> s=(linklist *)malloc(sizeof(linklist));</p><p> s->d
37、ata=x;</p><p> s->next=p->next;</p><p> p->next=s;</p><p><b> }</b></p><p><b> else</b></p><p> printf("插入錯(cuò)誤r\n&
38、quot;);</p><p><b> }</b></p><p> void Delete(linklist *H,int x)//刪除元素</p><p><b> {</b></p><p> linklist *p,*q;int k;</p><p><
39、;b> p=H;k=0;</b></p><p> while(p->next!=NULL&&p->next->data!=x){</p><p> p=p->next;</p><p><b> k++;</b></p><p><b> }
40、</b></p><p> if(p->next->data==x) { </p><p> q=p->next;</p><p> p->next=q->next;</p><p><b> free(q);</b></p><p><b&
41、gt; }</b></p><p> else printf("no find!\n");</p><p><b> }</b></p><p> void print(linklist *H)//輸出單鏈表</p><p><b> {</b></p
42、><p> linklist *p;int k;</p><p><b> p=H;k=0;</b></p><p> if(p->next==NULL)</p><p> printf("鏈表為空!");</p><p> while(p->next!=NU
43、LL){</p><p><b> k++;</b></p><p> p=p->next;</p><p> printf("%3d",p->data);</p><p><b> }</b></p><p><b> }
44、</b></p><p> int Locate(linklist *H,int x)//查找元素</p><p><b> {</b></p><p> linklist *p;int k;</p><p><b> p=H;k=0;</b></p><p&
45、gt; while(p->next!=NULL&&p->data!=x){ </p><p> p=p->next;</p><p><b> k++;</b></p><p><b> }</b></p><p> if(p->data==x)&l
46、t;/p><p> printf("要查詢?cè)氐奈恢檬?d\n",k);</p><p><b> else</b></p><p> printf("沒有找到!\n");</p><p><b> }</b></p><p>&l
47、t;b> /*</b></p><p> void destroylist(linklist *H)//銷毀單鏈表</p><p><b> { </b></p><p> H->next=NULL;</p><p> H->data=NULL;</p><
48、p><b> }</b></p><p><b> */</b></p><p> void main()</p><p><b> { </b></p><p> linklist *H;int k,x,i;int f;</p><p>
49、; H=(linklist *)malloc(sizeof(linklist));</p><p> setnull(H);</p><p> printf("\n請(qǐng)選擇以下操作數(shù),選擇-1為結(jié)束");</p><p> printf("\n1:creatlinklist(H)");</p><p&
50、gt; printf("\n2:leng(H)");</p><p> printf("\n3:GetElem(H,i)");</p><p> printf("\n4:Insert(H,i,x)");</p><p> printf("\n5:Delete(H,x)");<
51、;/p><p> printf("\n6:print(H)");</p><p> printf("\n7:Locate(H,x)\n");</p><p> scanf("%d",&f);</p><p> while(f!=-1){ </p><
52、p> switch (f)</p><p><b> { </b></p><p> case 1:creatlist(H);break;</p><p> case 2:Leng(H);break;</p><p> case 3:printf("\n請(qǐng)輸入要得到元素的位置:");&
53、lt;/p><p> scanf("%d",&i);</p><p> GetElem(H,i);break;</p><p> case 4:printf("\n請(qǐng)輸入的插入位置、長度以及元素:");</p><p> scanf("%d,%d",&i,&
54、;x);</p><p> Insert(H,i,x);break;</p><p> case 5:printf("\n請(qǐng)輸入要?jiǎng)h除的位置及元素:");</p><p> scanf("%d",&x);</p><p> Delete(H,x);break;</p>&l
55、t;p> case 6: print(H);break;</p><p> case 7:printf("請(qǐng)輸入要查找的元素:");</p><p> scanf("%d",&x);</p><p> Locate(H,x);break;</p><p><b> }&
56、lt;/b></p><p> printf("\n請(qǐng)選擇以下操作數(shù),選擇-1為結(jié)束");</p><p> printf("\n1:creatlinklist(H)");</p><p> printf("\n2:leng(H)");</p><p> printf(
57、"\n3:GetElem(H,i)");</p><p> printf("\n4:Insert(H,i,x)");</p><p> printf("\n5:Delete(H,x)");</p><p> printf("\n6:print(H)");</p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---雙向鏈表
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--鏈表
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 循環(huán)單鏈表
- 單鏈表的基本操作迷宮問題數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--雙向循環(huán)鏈表的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---城市鏈表的設(shè)計(jì)與實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---鏈表的創(chuàng)建、插入、刪除、修改
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-雙鏈表創(chuàng)建與演示設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--雙向循環(huán)鏈表的創(chuàng)建及相關(guān)操作的實(shí)現(xiàn)
- 實(shí)現(xiàn)兩個(gè)鏈表的合并數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---實(shí)現(xiàn)兩個(gè)鏈表的合并
- 數(shù)據(jù)結(jié)構(gòu)中鏈表及常見操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--稀疏矩陣的操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--鏈表的維護(hù)與文件形式的保存
- 數(shù)據(jù)結(jié)構(gòu)(單鏈表)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---skiplist基本操作
評(píng)論
0/150
提交評(píng)論