版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p><b> 約</b></p><p><b> 瑟</b></p><p><b> 夫</b></p><p><b> 環(huán)</b></p><p><b&
2、gt; 目 錄</b></p><p> 1.設(shè)計(jì)題目(約瑟夫環(huán))</p><p> 2.運(yùn)行環(huán)境(軟、硬件環(huán)境)</p><p><b> 3.需求分析</b></p><p><b> 4.概要設(shè)計(jì)</b></p><p><b
3、> 1)抽象數(shù)據(jù)類型</b></p><p> 2)算法設(shè)計(jì)的思想</p><p> 3)程序總體及主要算法的流程圖</p><p> 5.源代碼(帶詳細(xì)注釋)</p><p><b> 6.運(yùn)行結(jié)果分析</b></p><p> 7.收獲、體會(huì)及意見&l
4、t;/p><p><b> 設(shè)計(jì)題目</b></p><p> 約瑟夫環(huán),編號(hào)為1,2···n的n個(gè)人按順時(shí)針方向圍坐一圈,每人持有一個(gè)密碼(正整數(shù))。一開始任選一個(gè)正整數(shù)作為報(bào)數(shù)的上限值m,從第一個(gè)人開始按順時(shí)針方向自1開始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù),報(bào)m的人出列,將他的密碼作為新的m值,從他的順時(shí)針方向的下一個(gè)開始重新從1報(bào)數(shù),如此下
5、去,直至所有的人全部出列為止,設(shè)計(jì)一個(gè)程序求出出列順序。</p><p><b> 運(yùn)行環(huán)境</b></p><p><b> DevC++</b></p><p><b> 需求分析</b></p><p> 使用單循環(huán)鏈表作為儲(chǔ)存結(jié)構(gòu),并模擬該過程;</p&g
6、t;<p> 從鍵盤輸入開始時(shí)的總?cè)藬?shù)、初始報(bào)數(shù)上限值m及每個(gè)人的密碼;</p><p> 按照出列順序輸出各人的編號(hào)。</p><p><b> 概要設(shè)計(jì)</b></p><p><b> 抽象數(shù)據(jù)類型</b></p><p> struct node</p>
7、<p><b> {</b></p><p><b> int mm;</b></p><p><b> int num;</b></p><p> struct node *next;</p><p><b> };</b><
8、/p><p> typedef struct node Linklist;</p><p> Linklist *createlist(Linklist *L) //根據(jù)人數(shù)創(chuàng)建鏈表</p><p><b> { </b></p><p><b> int t;</b></p>
9、;<p> Linklist *p,*q;</p><p> printf("請(qǐng)輸入總?cè)藬?shù) : ");</p><p> scanf("%d",&num);</p><p> printf("請(qǐng)輸入初始上限值 : "); </p><p> scanf
10、("%d",&m);</p><p> for(t=1;t<=num;t++)</p><p><b> {</b></p><p> p=(node*)malloc(sizeof(node));</p><p> printf("請(qǐng)輸入第%d個(gè)人的密碼 : "
11、;,t);</p><p> scanf("%d",&p->mm);</p><p><b> p->num=t;</b></p><p> if(L==NULL)</p><p><b> L=q=p;</b></p><p>
12、;<b> else </b></p><p><b> {</b></p><p> q->next=p;</p><p><b> q=p;</b></p><p><b> }</b></p><p><
13、b> }</b></p><p> p->next=L;</p><p><b> return L;</b></p><p><b> }</b></p><p><b> 算法設(shè)計(jì)的思想</b></p><p>
14、程序執(zhí)行的命令包括:</p><p><b> ?。?)構(gòu)造鏈表;</b></p><p><b> ?。?)輸入數(shù)據(jù);</b></p><p> (3)執(zhí)行報(bào)數(shù),儲(chǔ)存出列人的序號(hào),刪除出列人的信息以及把出列人的密碼賦給m;</p><p><b> (4)結(jié)束。</b>&
15、lt;/p><p> 本程序應(yīng)包括三個(gè)模塊:</p><p> (1)信息錄入(構(gòu)造鏈表)模塊。此模塊將對(duì)數(shù)據(jù)進(jìn)行初始化,構(gòu)造鏈表,并錄入數(shù)據(jù)以便后續(xù)程序的使用。</p><p> ?。?)結(jié)果輸出模塊。此模塊將根據(jù)前面所輸入的數(shù)據(jù)對(duì)數(shù)據(jù)進(jìn)行處理,輸出報(bào)數(shù)號(hào)碼,刪除報(bào)數(shù)節(jié)點(diǎn),并繼續(xù)進(jìn)行處理。</p><p> ?。?)主程序模塊。此模塊實(shí)現(xiàn)整
16、個(gè)程序的進(jìn)入和退出,及各種初始化處理。</p><p> 程序總體及主要算法的流程圖</p><p> 1.此部分為createlist函數(shù)。首先初始化變量,再輸出提示性語句,等待用戶輸入數(shù)據(jù),將總?cè)藬?shù)和初始上限值分別存入num和m。以num為上限值建立單循環(huán)鏈表,最后返回L。 </p><p> 2.此部分為printlist函數(shù)部分。定義變量temp=m,
17、從第一個(gè)人開始進(jìn)行報(bào)數(shù),指針q和p指向第一個(gè)人L,當(dāng)q->next=p時(shí),q=q->next;否則當(dāng)q->next!=q時(shí)—temp,直到—temp!=0時(shí)輸出p所指向的節(jié)點(diǎn)的num;重復(fù)以上處理直到q->next!=q為假時(shí)結(jié)束該函數(shù)。 </p><p> 3.此部分為主程序部分。分別調(diào)用函數(shù)createlist和printlist,所有人輸出,程序結(jié)束。并通過while循環(huán)對(duì)程序進(jìn)行
18、重復(fù)使用。</p><p><b> 源代碼</b></p><p> #include<stdio.h></p><p> #include<malloc.h></p><p> int m=0,num=0;</p><p> struct node</p
19、><p><b> {</b></p><p><b> int mm;</b></p><p><b> int num;</b></p><p> struct node *next;</p><p><b> };</b>
20、;</p><p> typedef struct node Linklist;</p><p> Linklist *createlist(Linklist *L) //根據(jù)人數(shù)創(chuàng)建鏈表</p><p><b> { </b></p><p><b> int t;</b><
21、/p><p> Linklist *p,*q;</p><p> printf("請(qǐng)輸入總?cè)藬?shù) : ");</p><p> scanf("%d",&num);</p><p> printf("請(qǐng)輸入初始上限值 : "); </p><p>
22、scanf("%d",&m);</p><p> for(t=1;t<=num;t++)</p><p><b> {</b></p><p> p=(node*)malloc(sizeof(node));</p><p> printf("請(qǐng)輸入第%d個(gè)人的密碼 :
23、",t);</p><p> scanf("%d",&p->mm);</p><p><b> p->num=t;</b></p><p> if(L==NULL)</p><p><b> L=q=p;</b></p><
24、;p><b> else </b></p><p><b> {</b></p><p> q->next=p;</p><p><b> q=p;</b></p><p><b> }</b></p><p>
25、;<b> }</b></p><p> p->next=L;</p><p><b> return L;</b></p><p><b> }</b></p><p> void printlist(Linklist *L) //輸
26、出鏈表</p><p><b> { </b></p><p> int temp=m;</p><p> Linklist *p,*q;</p><p> printf("出列順序是: \n");</p><p><b> p=q=L;</b>
27、</p><p> while(q->next!=p)</p><p> q=q->next;</p><p> while(q->next!=q)</p><p><b> {</b></p><p> while(--temp)</p><p&g
28、t;<b> {</b></p><p><b> q=p;</b></p><p> p=p->next;</p><p><b> }</b></p><p> printf("%d ",p->num);</p>&l
29、t;p> temp=p->mm;</p><p> q->next=p->next;</p><p><b> free(p);</b></p><p> p=q->next ;</p><p><b> }</b></p><p>
30、 printf("%d\n",q->num); //輸出最后一個(gè)結(jié)點(diǎn)</p><p><b> return;</b></p><p><b> }</b></p><p> int main()</p><p><b> {int s=1;</b
31、></p><p> while(s!=0){</p><p> Linklist *L=NULL;</p><p> L=createlist(L);</p><p> printlist(L);</p><p> printf("繼續(xù)?(1.yes or 0.no)");<
32、/p><p> scanf("%d",&s);</p><p> printf("************************\n");}</p><p> printf("謝謝使用!\n");</p><p><b> return 0;</b>
33、;</p><p><b> }</b></p><p><b> 運(yùn)行結(jié)果分析</b></p><p><b> 輸入總?cè)藬?shù):5</b></p><p><b> 輸入上限值:2</b></p><p> 輸入第一個(gè)人的
34、密碼:1</p><p> 輸入第二個(gè)人的密碼:2</p><p> 輸入第三個(gè)人的密碼:3</p><p> 輸入第四個(gè)人的密碼:4</p><p> 輸入第五個(gè)人的密碼:5</p><p><b> 出列順序是:</b></p><p><b>
35、2 4 5 1 3</b></p><p> 繼續(xù)(1.yes or 0.no)?1</p><p> *********************</p><p><b> 輸入總?cè)藬?shù):3</b></p><p><b> 輸入上限值:4</b></p><p
36、> 輸入第一個(gè)人的密碼:1</p><p> 輸入第二個(gè)人的密碼:2</p><p> 輸入第三個(gè)人的密碼:3</p><p><b> 出列順序是:</b></p><p><b> 1 2 3</b></p><p> 繼續(xù)(1.yes or 0.no)
37、?0</p><p> *********************</p><p><b> 謝謝使用!</b></p><p><b> 運(yùn)行時(shí)的界面顯示</b></p><p><b> 收獲、體會(huì)及意見</b></p><p> 通過本次
38、課程設(shè)計(jì)使我更加清楚了自己的水平以及以后要努力的方向。本次課程設(shè)計(jì)涉及到的范圍很廣,讓本人能夠比較系統(tǒng)的對(duì)C語言和數(shù)據(jù)結(jié)構(gòu)進(jìn)行一次整理和復(fù)習(xí)。同時(shí)有了很多的體會(huì)和經(jīng)驗(yàn)。</p><p> 我的課設(shè)的題目是約瑟夫環(huán),根據(jù)題目的內(nèi)容與要求,首先得到的是用單鏈表作為全體人數(shù)與每個(gè)人的密碼的存儲(chǔ)結(jié)構(gòu)。設(shè)置結(jié)構(gòu)體指針,并定義了兩個(gè)指針類型的指針p與q;并編寫了兩個(gè)函數(shù),鏈表構(gòu)造函數(shù)和輸出函數(shù)。</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ì)“約瑟夫環(huán)”
- 約瑟夫環(huán)課程設(shè)計(jì)----數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--- 約瑟夫(joseph)環(huán)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--- 約瑟夫環(huán)問題
- 數(shù)據(jù)結(jié)構(gòu)約瑟夫環(huán)模擬課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告(約瑟夫環(huán))
- 數(shù)據(jù)結(jié)構(gòu)--約瑟夫環(huán)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--約瑟夫環(huán)問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---約瑟夫環(huán)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--約瑟夫環(huán)
- 數(shù)據(jù)結(jié)構(gòu)約瑟夫環(huán)的課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---約瑟夫(joseph)環(huán)問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)約瑟夫(joseph)環(huán)問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告約瑟夫環(huán)完整版[1]
- 數(shù)據(jù)結(jié)構(gòu)約瑟夫環(huán)問題
- 數(shù)據(jù)結(jié)構(gòu)約瑟夫環(huán)問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---joseph環(huán)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---joseph環(huán)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 約瑟夫環(huán)-課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論