

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 《數(shù)據(jù)結(jié)構(gòu)》</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 題 目: 鏈表操作 </p><p><b> 目 錄</b></p><p> 設(shè)計(jì)題目………………
2、……………………………</p><p> 設(shè)計(jì)目的……………………………………………</p><p> 設(shè)計(jì)內(nèi)容和要求……………………………………</p><p> 運(yùn)行環(huán)境(軟和硬件)……………………………</p><p> 算法設(shè)計(jì)的思想……………………………………</p><p> 算法流程圖……………
3、……………………………</p><p> 算法設(shè)計(jì)分析………………………………………</p><p> 源代碼………………………………………………</p><p> 運(yùn)行結(jié)果及分析……………………………………</p><p> 收獲及體會(huì)………………………………………</p><p><b> 設(shè)計(jì)
4、題目</b></p><p><b> 鏈表的基本操作</b></p><p><b> 設(shè)計(jì)目的</b></p><p> 1.掌握線性鏈表的建立。 </p><p> 2.掌握線性鏈表的基本操作。</p><p><b> 設(shè)計(jì)內(nèi)容和要求&
5、lt;/b></p><p> 利用鏈表的插入運(yùn)算建立線性鏈表,然后實(shí)現(xiàn)鏈表的查找、刪除、計(jì)數(shù)、輸出、排序、逆置等運(yùn)算,插入、刪除、查找、計(jì)數(shù)、輸出、排序、逆置要單獨(dú)寫成函數(shù),并能在屏幕上輸出操作前后的結(jié)果。</p><p> 運(yùn)行環(huán)境(軟、硬件環(huán)境)</p><p> Visual C++6.0</p><p> Win9x/
6、NT/2000/XP/2003/7環(huán)境下均可以運(yùn)行。</p><p><b> 算法設(shè)計(jì)的思想</b></p><p><b> 1.數(shù)據(jù)結(jié)構(gòu)</b></p><p> 定義了一個(gè)lian的結(jié)構(gòu)體int num;struct lian *next;。</p><p> 2.鏈表的建立是利用尾
7、插法來(lái)完成的;</p><p> q=(llink)malloc(sizeof(node));q->num=array[i];q->next=NULL;p->next=q;p=p->next;</p><p> 3.遍歷算法是從頭開始遍歷,找到了就輸出該數(shù),沒有就顯示沒有找到;</p><p> 4.計(jì)數(shù)鏈表中的節(jié)點(diǎn)個(gè)數(shù)是用一個(gè)循環(huán)p-
8、>next!=NULL時(shí)就繼續(xù)計(jì)數(shù);</p><p> 5.鏈表的輸出,通過p=p->next一個(gè)個(gè)進(jìn)行遍歷輸出。</p><p> 6.鏈表的排序算法,從小到大進(jìn)行排序,通過循環(huán)來(lái)達(dá)到。保持head結(jié)點(diǎn)不變,p指向第一個(gè)結(jié)點(diǎn),q=p->next,p所指結(jié)點(diǎn)依次和后面的結(jié)點(diǎn)比較,比它大則交換,否則繼續(xù)后移動(dòng)q=q->next;</p><p&
9、gt; for(i=0;i<len;i++)</p><p><b> {</b></p><p> p=p->next;</p><p> q=p->next;</p><p> for(j=i+1;j<len;j++)</p><p><b> {
10、</b></p><p> if(q->num>p->num)</p><p><b> {</b></p><p> temp=p->num;</p><p> p->num=q->num;</p><p> q->num=temp
11、;</p><p><b> }</b></p><p> q=q->next;</p><p><b> }</b></p><p> 7.鏈表的插入llink insert(llink head,llink ptr,int m)和刪除llink delet(llink head,
12、llink ptr)設(shè)計(jì)比較簡(jiǎn)單沒什么技巧</p><p> 8.鏈表的倒置輸出,保持head頭結(jié)點(diǎn)不動(dòng),p指針指向第一個(gè)結(jié)點(diǎn),p向后流動(dòng),q指針指向p的后一個(gè)結(jié)點(diǎn),把q所指結(jié)點(diǎn)插在head和p之間。</p><p> p=llist->next;llist->next=NULL;</p><p> while(p!=NULL)</p>
13、<p> { q=p->next;</p><p> p->next=llist->next;</p><p> llist->next=p;</p><p><b> p=q;</b></p><p><b> }</b></p>
14、<p><b> 算法的流程圖</b></p><p><b> main函數(shù)</b></p><p><b> 算法設(shè)計(jì)分析</b></p><p> 算法設(shè)計(jì)較為簡(jiǎn)單,時(shí)間復(fù)雜度O(n*n);</p><p><b> 源代碼</b>
15、;</p><p> #include<stdio.h></p><p> #include<stdlib.h></p><p> #include<string.h></p><p> typedef struct lian</p><p> {
16、 /*單個(gè)鏈表節(jié)點(diǎn)的結(jié)構(gòu)體*/</p><p><b> int num;</b></p><p> struct lian *next;</p><p><b> }node;</b></p><p> typedef node *llink;</p><p&
17、gt; /*建立鏈表函數(shù)*/</p><p> llink Creat(int array[],int len)</p><p><b> {</b></p><p> llink head;</p><p> llink p,q;</p><p><b> int i;&l
18、t;/b></p><p> head=(llink)malloc(sizeof(node));</p><p> head->next=NULL;</p><p><b> p=head;</b></p><p> for(i=0;i<len;i++)</p><p>
19、<b> {</b></p><p> q=(llink)malloc(sizeof(node));</p><p> q->num=array[i];</p><p> q->next=NULL;</p><p> p->next=q;</p><p> p=p-&
20、gt;next;</p><p><b> }</b></p><p> return head;</p><p><b> }</b></p><p> /*遍歷操作函數(shù)*/</p><p> void Print(llink head)</p>&
21、lt;p><b> { </b></p><p><b> llink p;</b></p><p> p=head->next;</p><p> printf("\n輸出鏈表: ");</p><p> while(p!=NULL)</p&
22、gt;<p><b> {</b></p><p> printf("%5d",p->num);</p><p> p=p->next;</p><p><b> }</b></p><p> printf("\n")
23、;</p><p><b> }</b></p><p> /*計(jì)數(shù)輸出函數(shù)*/</p><p> count(llink llist)</p><p><b> {</b></p><p><b> int i=0;</b></p>
24、;<p><b> llink p;</b></p><p><b> p=llist;</b></p><p><b> Print(p);</b></p><p> while((p->next)!=NULL)</p><p><b>
25、 { </b></p><p><b> i++;</b></p><p> p=p->next;</p><p><b> }</b></p><p> printf("鏈表的節(jié)點(diǎn)個(gè)數(shù)為%d",i);</p><p> p
26、rintf("\n");</p><p><b> }</b></p><p> llink Daozhi(llink llist)</p><p><b> {</b></p><p> llink p,q;</p><p> p=llist
27、->next;</p><p> llist->next=NULL;</p><p> while(p!=NULL)</p><p><b> {</b></p><p> q=p->next;</p><p> p->next=llist->next;&l
28、t;/p><p> llist->next=p;</p><p><b> p=q;</b></p><p><b> }</b></p><p> return llist;</p><p><b> }</b></p>&l
29、t;p> llink search(llink head,int m) </p><p><b> {</b></p><p><b> llink p;</b></p><p><b> p=head;</b></p><p> while(p!=NULL)
30、</p><p><b> {</b></p><p> if(p->num==m)</p><p><b> return p;</b></p><p> p=p->next;</p><p><b> }</b></p&
31、gt;<p><b> return p;</b></p><p><b> }</b></p><p> llink delet(llink head,llink ptr)</p><p><b> {</b></p><p> llink pevio
32、us;</p><p> if(ptr==head)</p><p> return head->next;</p><p><b> else</b></p><p><b> {</b></p><p> pevious=head;</p>
33、<p> while(pevious->next!=ptr)</p><p> pevious=pevious->next;</p><p> if(ptr->next==NULL)</p><p> pevious->next=NULL;</p><p><b> else</b&
34、gt;</p><p> pevious->next=ptr->next; </p><p><b> }</b></p><p> free(ptr);</p><p> return head;</p><p><b> }</b></p
35、><p> llink insert(llink head,llink ptr,int m)</p><p><b> {</b></p><p><b> llink p1;</b></p><p> p1=(llink)malloc(sizeof(node));</p><
36、;p><b> if(!p1)</b></p><p> return p1;</p><p> p1->num=m;</p><p> p1->next=NULL;</p><p> if(ptr==NULL)</p><p><b> {</b&g
37、t;</p><p> p1->next=head;</p><p> return p1;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>&
38、lt;p> if(ptr->next==NULL)</p><p> ptr->next=p1;</p><p><b> else</b></p><p><b> {</b></p><p> p1->next=ptr->next;</p>
39、<p> ptr->next=p1;</p><p><b> }</b></p><p><b> }</b></p><p> return head;</p><p><b> }</b></p><p> llink
40、sort(llink llist,int len)</p><p><b> {</b></p><p> llink p,q;</p><p> int i,j,temp;</p><p><b> p=llist;</b></p><p> Print(llis
41、t);</p><p> for(i=0;i<len;i++)</p><p><b> {</b></p><p> p=p->next;</p><p> q=p->next;</p><p> for(j=i+1;j<len;j++)</p>
42、<p><b> {</b></p><p> if(q->num>p->num)</p><p><b> {</b></p><p> temp=p->num;</p><p> p->num=q->num;</p><
43、p> q->num=temp;</p><p><b> }</b></p><p> q=q->next;</p><p><b> }</b></p><p><b> }</b></p><p> return ll
44、ist;</p><p> printf("輸出排序后的鏈表");</p><p> printf("\n");</p><p><b> }</b></p><p> int main()</p><p><b> {</b>
45、;</p><p> llink p,llist,ptr;</p><p> int choice,m,n;</p><p> int array[5]={5,4,1,6,3};</p><p> p=Creat(array,5);</p><p> while(choice!=0)</p>&
46、lt;p><b> {</b></p><p> printf(" ----------------------------------------------------------- \n\n");</p><p> printf(" | _________________________________
47、________________ | \n\n");</p><p> printf("| | 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) | \n\n");</p><p> printf("| | 0:退出 1:輸出元素
48、 | \n\n");</p><p> printf("| | 2:刪除元素 3:插入元素 | \n\n");</p><p> printf("| | 4:排序元素 5:查找元素
49、 | \n\n");</p><p> printf("| | 6:計(jì)數(shù) 7:倒置 | \n\n"); </p><p> printf("| _____________________________________________
50、___ \n\n");</p><p> printf(" | | \n\n");</p><p> printf(" --------------------------------------------
51、------------- \n\n");</p><p> printf("請(qǐng)選擇功能:");</p><p> scanf("%d",&choice);</p><p> switch(choice)</p><p><b> {</b><
52、;/p><p><b> case 0:</b></p><p><b> break;</b></p><p><b> case 1: </b></p><p><b> Print(p);</b></p><p><
53、b> break;</b></p><p><b> case 2:</b></p><p> printf("請(qǐng)輸入要?jiǎng)h除的數(shù)據(jù)");</p><p> scanf("%d",&m);</p><p><b> if(m!=0)<
54、;/b></p><p><b> {</b></p><p> ptr=search(p,m);</p><p><b> if(!ptr)</b></p><p> printf("沒有找到!\n");</p><p><b>
55、 else</b></p><p> llist=delet(p,ptr);</p><p> printf("刪除后的鏈表為");</p><p> Print(llist);</p><p><b> }</b></p><p><b>
56、break;</b></p><p><b> case 3: </b></p><p> printf("請(qǐng)輸入要插入的數(shù)據(jù)位置");</p><p> scanf("%d",&n);</p><p><b> if(n>=0)<
57、;/b></p><p><b> {</b></p><p> ptr=search(p,n);</p><p> printf("請(qǐng)輸入要插入的數(shù)據(jù)");</p><p> scanf("%d",&m);</p><p><b
58、> if(!p)</b></p><p> printf("沒有找到!\n");</p><p><b> else</b></p><p> llist=insert(p,ptr,m);</p><p> printf("插入后的鏈表為");</
59、p><p> Print(llist);</p><p><b> }</b></p><p><b> break;</b></p><p><b> case 4:</b></p><p> llist=sort(p,5);</p>
60、<p> Print(llist);</p><p><b> break;</b></p><p><b> case 5:</b></p><p> printf("請(qǐng)輸入要查找的數(shù)據(jù)");</p><p> scanf("%d",
61、&m);</p><p><b> if(m!=0)</b></p><p><b> {</b></p><p> ptr=search(p,m);</p><p><b> if(!ptr)</b></p><p> printf(
62、"沒有找到!\n");</p><p><b> else</b></p><p> printf("%d",ptr->num);</p><p><b> }</b></p><p> printf("\n");</p
63、><p><b> break;</b></p><p> /*對(duì)鏈表進(jìn)行計(jì)數(shù)輸出*/</p><p><b> case 6:</b></p><p><b> count(p);</b></p><p><b> break;<
64、/b></p><p> /*對(duì)鏈表進(jìn)行倒置輸出函數(shù)*/</p><p><b> case 7:</b></p><p> llist=Daozhi(p);</p><p> Print(llist);</p><p><b> break;</b><
65、;/p><p><b> }</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> 運(yùn)行結(jié)果及分析</b></p><p> 主菜單中顯示各個(gè)功能塊,提示
66、用戶選擇相應(yīng)的序號(hào)進(jìn)行操作。</p><p> 功能1實(shí)現(xiàn)輸出創(chuàng)建的鏈表的各個(gè)結(jié)點(diǎn),從主函數(shù)輸入的數(shù)組元素,通過鏈表的創(chuàng)建函數(shù),最后由輸出函數(shù)輸出。</p><p> 功能2實(shí)現(xiàn)刪除鏈表中的結(jié)點(diǎn)</p><p> 功能3實(shí)現(xiàn)向鏈表中插入數(shù)據(jù)結(jié)點(diǎn)。</p><p> 功能4實(shí)現(xiàn)對(duì)鏈表的結(jié)點(diǎn)進(jìn)行排序,從小到大,最后輸出排序后的鏈表。<
67、;/p><p> 功能5實(shí)現(xiàn)查找某一個(gè)結(jié)點(diǎn),若找到將輸出此結(jié)點(diǎn),若沒有則顯示沒有找到!</p><p> 功能6實(shí)現(xiàn)對(duì)鏈表中結(jié)點(diǎn)個(gè)數(shù)進(jìn)行統(tǒng)計(jì),輸出統(tǒng)計(jì)個(gè)數(shù)。</p><p> 功能7實(shí)現(xiàn)對(duì)鏈表中結(jié)點(diǎn)進(jìn)行倒置輸出。</p><p><b> 收獲及體會(huì)</b></p><p> 總體來(lái)說(shuō),該程
68、序?qū)崿F(xiàn)了課程設(shè)計(jì)的算法和功能,鏈表相關(guān)的基本操作。我覺得首先得把基本算法弄懂,這是基礎(chǔ),然后建立結(jié)構(gòu)體的模型。對(duì)于指針和地址的傳遞得好好弄清楚,每個(gè)細(xì)節(jié)弄清楚,弄明白。</p><p> 在程序調(diào)試過程遇到了一些問題。但是我并沒有氣壘,在實(shí)驗(yàn)中發(fā)現(xiàn)問題,自己進(jìn)行測(cè)試看是在哪兒出現(xiàn)了問題,獨(dú)立思考,最終解決問題,從而也就加深我對(duì)理論知識(shí)的理解,達(dá)到了“雙贏”的效果。</p><p> 我
69、覺得自己獨(dú)立的思考過程很重要,否則要自己寫程序、 寫算法的時(shí)候根本寫不出來(lái),所以我想如果真的想學(xué)好數(shù)據(jù)結(jié)構(gòu)的話,最好是能夠自己思考問題,不要?jiǎng)傁肓艘粫?huì)就覺得做不出來(lái),然后就去問其他人,我絕對(duì)相信我們自己能夠獨(dú)自想出算法,雖有可能會(huì)比較長(zhǎng)時(shí)間吧,但是這樣肯定會(huì)比問其他人學(xué)到更多的東西。當(dāng)然我并不是說(shuō)不要問同學(xué),有時(shí)候就是腦筋轉(zhuǎn)不過來(lái),一問別人就懂了,當(dāng)然問了別人不能只是我知道了這個(gè)算法,還應(yīng)該去想如何思考才能得到這個(gè)算法,這樣水平會(huì)提高很
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(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)論