![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告約瑟夫環(huán)完整版[1]_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/24/211b7bca-7c2d-4686-851e-a0b380bc5672/211b7bca-7c2d-4686-851e-a0b380bc56721.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告約瑟夫環(huán)完整版[1]_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/24/211b7bca-7c2d-4686-851e-a0b380bc5672/211b7bca-7c2d-4686-851e-a0b380bc56722.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告約瑟夫環(huán)完整版[1]_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/24/211b7bca-7c2d-4686-851e-a0b380bc5672/211b7bca-7c2d-4686-851e-a0b380bc56723.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告約瑟夫環(huán)完整版[1]_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/24/211b7bca-7c2d-4686-851e-a0b380bc5672/211b7bca-7c2d-4686-851e-a0b380bc56724.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告約瑟夫環(huán)完整版[1]_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/24/211b7bca-7c2d-4686-851e-a0b380bc5672/211b7bca-7c2d-4686-851e-a0b380bc56725.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、*實(shí)踐教學(xué)*蘭州理工大學(xué)軟件職業(yè)技術(shù)學(xué)院2011 年春季學(xué)期算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目:專(zhuān)業(yè)班級(jí):姓名:學(xué)號(hào):指導(dǎo)教師:成績(jī):約瑟夫環(huán)摘要約瑟夫環(huán)問(wèn)題是典型的線(xiàn)性表的應(yīng)用實(shí)例, 其開(kāi)發(fā)主要包括后臺(tái)數(shù)據(jù)庫(kù)的建立和維護(hù)以及前端應(yīng)用程序的開(kāi)發(fā)兩個(gè)方面。 對(duì)于前者要求建立起數(shù)據(jù)一致性和完整性強(qiáng)、數(shù)據(jù)安全性好的庫(kù)。 而對(duì)于后者則要求應(yīng)用程序功能完備, 易使用等特點(diǎn)。經(jīng)過(guò)分析,我們使用 MICROSOFT 公司的 Microsoft Visual C+6.0 開(kāi)發(fā)工具,利用其提供的各種面向?qū)ο蟮拈_(kāi)發(fā)工具, 尤其是數(shù)據(jù)窗口這一能方便而簡(jiǎn)潔操縱數(shù)據(jù)庫(kù)的智能化對(duì)象, 首先在短時(shí)間內(nèi)建立系統(tǒng)應(yīng)用原型, 然后,對(duì)初
2、始原型系統(tǒng)進(jìn)行需求迭代,不斷修正和改進(jìn),直到形成用戶(hù)滿(mǎn)意的可行系統(tǒng)。關(guān)鍵詞: 單循環(huán)鏈表; c 語(yǔ)言;約瑟夫環(huán);1序言數(shù)據(jù)結(jié)構(gòu)是研究數(shù)據(jù)元素之間的邏輯關(guān)系的一門(mén)課程, 以及數(shù)據(jù)元素及其關(guān)系在計(jì)算機(jī)中的存儲(chǔ)表示和對(duì)這些數(shù)據(jù)所施加的運(yùn)算。 該課程設(shè)計(jì)的目的是通過(guò)課程設(shè)計(jì)的綜合訓(xùn)練, 培養(yǎng)分析和編程等實(shí)際動(dòng)手能力, 系統(tǒng)掌握數(shù)據(jù)結(jié)構(gòu)這門(mén)課程的主要內(nèi)容。本次課程設(shè)計(jì)的內(nèi)容是用單循環(huán)鏈表模擬約瑟夫環(huán)問(wèn)題, 循環(huán)鏈表是一種首尾相接鏈表, 其特點(diǎn)是無(wú)須增加存儲(chǔ)容量, 僅對(duì)表的鏈接方式稍作改變, 使表處理更加靈活,約瑟夫環(huán)問(wèn)題就是用單循環(huán)鏈表處理的一個(gè)實(shí)際應(yīng)用。 通過(guò)這個(gè)設(shè)計(jì)實(shí)例,了解單鏈表和單循環(huán)鏈表的相同
3、與不同之處, 進(jìn)一步加深對(duì)鏈表結(jié)構(gòu)類(lèi)型及鏈表操作的理解。通過(guò)該課程設(shè)計(jì), 能運(yùn)用所學(xué)知識(shí), 能上機(jī)解決一些實(shí)際問(wèn)題, 了解并初步掌握設(shè)計(jì)、實(shí)現(xiàn)較大程序的完整過(guò)程,包括系統(tǒng)分析、編碼設(shè)計(jì)、系統(tǒng)集成、以及調(diào)試分析,熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計(jì)、實(shí)現(xiàn)以及操作方法,為進(jìn)一步的應(yīng)用開(kāi)發(fā)打好基礎(chǔ)。2目錄摘要1序言2目錄3正文4一、問(wèn)題描述4二、邏輯設(shè)計(jì)5三、詳細(xì)設(shè)計(jì)7四、程序代碼13五、程序調(diào)試與測(cè)試13設(shè)計(jì)總結(jié)18參考文獻(xiàn)19致謝20附錄213正文一、問(wèn)題描述約瑟夫環(huán)問(wèn)題描述的是:設(shè)編號(hào)為1,2, n 的 n(n>0)個(gè)人按順時(shí)針?lè)较驀蝗Γ?每個(gè)人持有一正整數(shù)密碼。 開(kāi)始時(shí)選擇一個(gè)正整數(shù)作為報(bào)
4、數(shù)上限m,從第一個(gè)人開(kāi)始順時(shí)針?lè)较蜃?1 起順序報(bào)數(shù),報(bào)到 m 時(shí)停止報(bào)數(shù),報(bào) m 的人出圈,將他的密碼作為新的 m 值,從他在順時(shí)針?lè)较蛏系南乱粋€(gè)人起重新從 1報(bào)數(shù)。如此下去,直到所有人都出圈為止。令n 最大值為 100。要求設(shè)計(jì)一個(gè)程序模擬此過(guò)程,求出出圈的編號(hào)序列。如下圖分析:這是第一個(gè)人,他的密碼是“ 1”,個(gè)他輸一個(gè) m 值,如果 m=3,則從他開(kāi)始向下走3個(gè)1092345這就是第二步的位置,這時(shí)他的密碼作為新的 m 值,即 m=4,同時(shí)得到的第一個(gè)密碼為4; 4 號(hào)出去向下走4,到 9 這兒;(這這一步完了剩余的為:1,2,3,5,6 , 7,8,9,0,)8這就是第三步的位置,
5、這時(shí)他的密碼作為新的m值,即m=9 ,同時(shí)得到的第二個(gè)密碼為9;9 號(hào)出去向下走9,到 0 這兒;繼續(xù)走就行了(這兒剩余的就是: 1,2,3,5,6,7,8,0)67圖 1 約瑟夫環(huán)問(wèn)圖解4第三步:約瑟夫環(huán)原理演示圖第二次, 1 號(hào)出列12345673172484第一步: 給第一個(gè)人第四步:第三次,第二部:第一次停下的位置, 此4 號(hào)出列賦初始密碼為: 20則時(shí) 6 號(hào)出列,并將他的值作為新從它開(kāi)始向下走20的 m 值,即:新的 m=8;從 7次,到 6 號(hào)位置好開(kāi)始繼續(xù)向下走 8 次,到 1 號(hào)最后排序后的密碼序列:的位置(本圖只演示前兩步)83241746147235圖 2約瑟夫環(huán)原理演示
6、圖二、邏輯設(shè)計(jì)1、循環(huán)鏈表抽象數(shù)據(jù)類(lèi)型定義typedef struct LNode/定義單循環(huán)鏈表中節(jié)點(diǎn)的結(jié)構(gòu)int num;/編號(hào)int pwd;/passwordstruct LNode *next;/ 指向下一結(jié)點(diǎn)的指針LNode;2、本程序包含一下幾個(gè)模塊( 1)構(gòu)造結(jié)點(diǎn)模塊LNode *createNode(int m_num,int m_pwd)5LNode *p;p=(LNode *)malloc(sizeof(LNode);/ 生成一個(gè)結(jié)點(diǎn)p->num=m_num;/把實(shí)參賦給相應(yīng)的數(shù)據(jù)域p->pwd=m_pwd;p->next=NULL;/ 指針域?yàn)榭誶et
7、urn p;( 2)創(chuàng)建鏈表模塊void createList(LNode *ppHead,int n)( 3)出隊(duì)處理模塊void jose(LNode *ppHead,int m_pwd)( 4)約瑟夫環(huán)說(shuō)明輸出模塊void instruction()( 5)菜單模塊void menu()( 6)主函數(shù)模塊int main()函數(shù)的調(diào)用關(guān)系圖如下:6主函數(shù)調(diào)用函數(shù);菜單函數(shù);main()void menu()圖 3 約瑟夫環(huán)函數(shù)調(diào)用關(guān)系圖三、詳細(xì)設(shè)計(jì)1. 主函數(shù)Case 1:一個(gè)簡(jiǎn)單的輸出函數(shù),用于說(shuō)明約瑟夫環(huán);void instruction()Case 2:建立的約瑟夫環(huán) ,并輸出已建
8、立的約瑟夫環(huán):createList(LNode *ppHead,int n)輸出該約瑟夫環(huán)的每個(gè)人的出列順序 :jose(LNode *ppHead,int m_pwd)Case 0:default : 輸入 0,退出 exit(0) ;7Main() 開(kāi)始選擇要執(zhí)行的操作Menu() 功能菜單約瑟夫功能 2:按要求功能 3:退出系功能 1:環(huán)說(shuō)明求解約瑟夫環(huán)統(tǒng)輸入總?cè)藬?shù)n輸入開(kāi)始上線(xiàn)數(shù):m輸入每個(gè)玩家的密碼調(diào)用: createList(&ppHead,n);jose(ppHead,m); 函 數(shù) 求 解 所 需的密碼序列圖 4 主函數(shù)數(shù)據(jù)流程圖根據(jù)流程圖,主函數(shù)程序如下:intmai
9、n()int n,m,x;LNode *ppHead=NULL;menu();for(;)printf("n 請(qǐng)選擇要執(zhí)行的操作:");scanf("%d",&x);system("cls");switch(x)case 1:printf("* *n");程序運(yùn)行完,自動(dòng)返回到功能菜單8printf(" 約瑟夫環(huán) :n");printf("編號(hào)為 1,2,3,4,n 的 n 個(gè)人按順時(shí)針?lè)较驀蝗?每人持有一個(gè)密n");printf(" 碼(正整數(shù) ).一
10、開(kāi)始任選一個(gè)正整數(shù)作為報(bào)數(shù)的上限值m,從第一個(gè)人開(kāi)始n");printf(" 按順時(shí)針?lè)较蜃? 開(kāi)始順序報(bào)數(shù) ,報(bào)到 m 時(shí)停止 .報(bào) m 的人出列,將他的密碼 n");printf("m 作為新的 m 值 ,從他在順時(shí)針?lè)较蛏系南乱蝗碎_(kāi)始重新從1 報(bào)數(shù) ,如此下去 ,n");printf(" 直到所有人全部出列為止.編程打印出列順序 .n");printf("* *n");main();break;case 2:printf("n 請(qǐng)輸入總?cè)藬?shù) n: ");scanf("%
11、d",&n);printf(" 請(qǐng)輸入開(kāi)始上限數(shù)m:");scanf("%d",&m);createList(&ppHead,n);printf("n");printf(" 出隊(duì)順序: n");jose(ppHead,m);printf("n 約瑟夫環(huán)游戲結(jié)束 !n");main();break;case 0:exit(0);default:system("cls");printf("n 您選擇的操作有誤,請(qǐng)重新選擇 .nnn&qu
12、ot;); main();return 0;2. 鏈表的創(chuàng)建9Main() 函數(shù)createList() ;創(chuàng)建儲(chǔ)存玩家密碼的循環(huán)單鏈表的方法從主函數(shù)中獲取玩家信息 n如果 n>0否是退出創(chuàng)建循環(huán)單鏈表,儲(chǔ)存各個(gè)玩家密碼創(chuàng)建鏈表完成返回主函數(shù) main()圖 5 創(chuàng)建鏈表函數(shù)的數(shù)據(jù)流程圖/* 創(chuàng)建單向循環(huán)鏈表 ppHead,人數(shù)個(gè)數(shù)為 n,并輸入每個(gè)人的密碼值,若建立失敗則生成頭結(jié)點(diǎn),讓 cur 指向他,若建立成功則插入結(jié)點(diǎn) P, cur 指向的數(shù)據(jù)元素為 p,后續(xù)為 "空"的節(jié)點(diǎn),再把 P 插入循環(huán)鏈表 ppHead中 */ 根據(jù)流程圖,創(chuàng)建鏈表函數(shù)程序如下:voi
13、d createList(LNode *ppHead,int n)int i,m_pwd;LNode *p,*cur;/cur: 浮標(biāo)指針for(i=1;i<=n;i+)printf(" 輸入第 %d 個(gè)人的密碼: ",i);scanf("%d",&m_pwd);/ 輸入持有密碼p=createNode(i,m_pwd);/調(diào)用構(gòu)造結(jié)點(diǎn)函數(shù)if(*ppHead=NULL)/ 如果頭結(jié)點(diǎn)為空*ppHead=cur=p;/生成頭結(jié)點(diǎn),讓cur 指向他10cur->next=*ppHead;/cur 的指針域指向自身else/如果不為空,則
14、插入結(jié)點(diǎn)p->next = cur->next;cur->next = p;cur= p;/cur 指向新插入結(jié)點(diǎn)printf(" 完成創(chuàng)建! n"); / 提示鏈表創(chuàng)建完成3. 出隊(duì)處理Main() 函數(shù)jose();出隊(duì)函數(shù)從循環(huán)鏈表中按初始密碼依次掃描,找出對(duì)應(yīng)的玩家序列輸出其持有的密碼i=ppHead->pwd;j=ppHead->num;移動(dòng)浮標(biāo)指針m_pwd=ppHead->pwd;輸出密碼后, 刪除相應(yīng)的結(jié)點(diǎn),并釋放所占的儲(chǔ)存空間free(ppHead); ppHead=p->next;圖 6 出隊(duì)函數(shù)的數(shù)據(jù)流程圖出隊(duì)
15、處理的方法執(zhí)行完后返回主函數(shù)/*p 指向要?jiǎng)h除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),ppHead 指向要?jiǎng)h除的節(jié)點(diǎn),使p=ppHead,11ppHead 再指向要?jiǎng)h除節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn),使 p 和 ppHead 鏈接,輸出 p 指向節(jié)點(diǎn)的編號(hào)和密碼值,釋放ppHead,如此循環(huán),直至把所有節(jié)點(diǎn)都打印和刪除為止!*/根據(jù)流程圖,出隊(duì)函數(shù)程序如下:void jose(LNode *ppHead,int m_pwd)int i,j;LNode *p,*p_del;/ 定義指針變量for(i=1;p!=ppHead;i+)for(j=1;j<m_pwd;+j)p=ppHead;/p 賦值為 ppHead,p 指向要?jiǎng)h
16、除結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)ppHead=ppHead->next;/ppHead指向下一個(gè)元素p->next = ppHead->next;/p 結(jié)點(diǎn)與頭結(jié)點(diǎn)鏈接i=ppHead->pwd;/i 賦值為 ppHead->pwdj=ppHead->num;/j 賦值為 ppHead->num, j 為要?jiǎng)h除的密碼值printf(" 第%d 個(gè)人出列,密碼: %dn",j,i);m_pwd=ppHead->pwd;/m_pwd 賦值為 ppHead->pwdfree(ppHead);/釋放頭結(jié)點(diǎn)ppHead=p->next;/
17、ppHead 重新賦值給 p->next,即釋放前的 ppHead->pwd 指針 /刪除報(bào)數(shù)結(jié)點(diǎn)i=ppHead->pwd;/i 賦值為 ppHead->pwdj=ppHead->num;/j 賦值為 ppHead->numprintf(" 最后一個(gè)出列是 %d 號(hào),密碼是 :%dn",j,i);free(ppHead);/釋放頭結(jié)點(diǎn)4. 約瑟夫環(huán)說(shuō)明模塊void instruction()printf("* *n");printf(" 約瑟夫環(huán) :n");printf("編號(hào)為 1,2
18、,3,4,n 的 n 個(gè)人按順時(shí)針?lè)较驀蝗?每人持有一個(gè)密 n");printf(" 碼(正整數(shù) ).一開(kāi)始任選一個(gè)正整數(shù)作為報(bào)數(shù)的上限值m,從第一個(gè)人開(kāi)始 n");printf(" 按順時(shí)針?lè)较蜃?1 開(kāi)始順序報(bào)數(shù) ,報(bào)到時(shí)停止 .報(bào) m 的人出列, 將他的密碼 n");printf("m 作為新的m 值,從他在順時(shí)針?lè)较蛏系南乱蝗碎_(kāi)始重新從1 報(bào)數(shù) ,如此下去 ,n");12printf(" 直到所有人全部出列為止.編程打印出列順序 .n");printf("*n");retu
19、rn 0;5. 菜單模塊void menu()printf("*約瑟夫環(huán)*n");printf("n");printf("1約瑟夫環(huán)問(wèn)題的闡述n");printf("2按要求求解約瑟夫環(huán)n");printf("0退出n");printf("*歡迎使用!*n");四、程序代碼見(jiàn)附錄源程序。五、程序調(diào)試與測(cè)試1. 調(diào)用模塊時(shí),結(jié)點(diǎn)結(jié)構(gòu)的調(diào)用與其他模塊產(chǎn)生沖突,導(dǎo)致每一行都出現(xiàn)兩次錯(cuò)誤,加入子函數(shù)的聲明后錯(cuò)誤消失。2 . 剛開(kāi)始時(shí)曾忽略了一些變量參數(shù)的標(biāo)識(shí)"&&q
20、uot; 和“ * ”,使調(diào)試程序時(shí)費(fèi)時(shí)不少。今后應(yīng)重視確定參數(shù)的變量和賦值屬性的區(qū)分和標(biāo)識(shí)。3. 本次課程設(shè)計(jì)采用數(shù)據(jù)抽象的程序設(shè)計(jì)方法,將程序劃分為三個(gè)層次結(jié)構(gòu):元素節(jié)點(diǎn)、單向循環(huán)鏈表, 主控制模塊。 思路較為清晰, 實(shí)現(xiàn)調(diào)用順利。 經(jīng)過(guò)本次實(shí)驗(yàn),使我對(duì)數(shù)據(jù)結(jié)構(gòu)這門(mén)課程有了進(jìn)一步的了解, 每一個(gè)程序經(jīng)過(guò)需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)之后,思路即清晰呈現(xiàn),程序也很快就出來(lái)了,最后經(jīng)過(guò)調(diào)試、運(yùn)行又有新的體驗(yàn)。13<測(cè)試用例 >這是一個(gè)使用循環(huán)鏈表的經(jīng)典問(wèn)題。本程序開(kāi)始運(yùn)行界面如下:圖 7約瑟夫環(huán)開(kāi)始運(yùn)行界面選擇 1 進(jìn)入約瑟夫環(huán)問(wèn)題闡述。圖 8 約瑟夫環(huán)問(wèn)題闡述14選擇 2,輸入下列
21、數(shù)據(jù)測(cè)試:請(qǐng)輸入總?cè)藬?shù) n:7請(qǐng)輸入開(kāi)始上限數(shù)m:20;請(qǐng)依次輸入每個(gè)人的密碼:3 1 7 2 4 8 4出隊(duì)順序:6147235圖 9約瑟夫環(huán)測(cè)試1繼續(xù)選擇 2,輸入下列數(shù)據(jù)測(cè)試:請(qǐng)輸入總?cè)藬?shù) n:5請(qǐng)輸入開(kāi)始上限數(shù)m:30請(qǐng)依次輸入每個(gè)人的密碼:3 4 5 6 7出隊(duì)順序:5312415圖 10約瑟夫環(huán)測(cè)試2繼續(xù)選擇 2,輸入下列數(shù)據(jù)測(cè)試:請(qǐng)輸入總?cè)藬?shù) n:8請(qǐng)輸入開(kāi)始上限數(shù)m:14請(qǐng)依次輸入每個(gè)人的密碼:3 4 5 6 7 8 9 10出隊(duì)順序:6728351416圖 11約瑟夫環(huán)測(cè)試3測(cè)試完成,選擇0 退出。17設(shè)計(jì)總結(jié)我的這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的題目是 :約瑟夫環(huán) ,通過(guò)對(duì)該題目的設(shè)計(jì)
22、 , 我加深了對(duì)數(shù)據(jù)結(jié)構(gòu)及存儲(chǔ)結(jié)構(gòu)的理解 ,進(jìn)一步地理解和掌握了課本中所學(xué)的各種數(shù)據(jù)結(jié)構(gòu),尤其是對(duì)單循環(huán)鏈表上基本運(yùn)算的實(shí)現(xiàn) ,學(xué)會(huì)了如何把學(xué)到的知識(shí)用于解決實(shí)際問(wèn)題 ,鍛煉了自己動(dòng)手的能力。通過(guò)這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì), 我感受最深的就是對(duì)于循環(huán)鏈表的使用, 可以說(shuō)對(duì)循環(huán)鏈表有了比以前更進(jìn)一步的認(rèn)識(shí), 以前只是一知半解的, 如果只給個(gè)題目自己根本不能把程序完整地編寫(xiě)出來(lái), 所以這次課程設(shè)計(jì)最大的收獲就在于對(duì)循環(huán)鏈表有了一定的理解, 包括其中的一系列操作, 如建立一個(gè)循環(huán)鏈表, 刪除鏈表中的一個(gè)結(jié)點(diǎn),增加一個(gè)結(jié)點(diǎn)等。在調(diào)試程序的時(shí)候我也有所體會(huì), 雖然約瑟夫環(huán)問(wèn)題不是很難, 但調(diào)試的時(shí)候還是會(huì)出現(xiàn)
23、很多錯(cuò)誤, 因此我們不能認(rèn)為容易就不認(rèn)真對(duì)待。 在以后的學(xué)習(xí)中,要能不斷發(fā)現(xiàn)問(wèn)題,提出問(wèn)題,解決問(wèn)題,從不足之處出發(fā),在不斷學(xué)習(xí)中提高自己。兩周的課程設(shè)計(jì)很短暫, 但其間的內(nèi)容是很充實(shí)的, 在其中我學(xué)習(xí)到了很多平時(shí)書(shū)本中無(wú)法學(xué)到的東西, 積累了經(jīng)驗(yàn), 鍛煉了自己分析問(wèn)題, 解決問(wèn)題的能力,并學(xué)會(huì)了如何將所學(xué)的各課知識(shí)融會(huì), 組織起來(lái)進(jìn)行學(xué)習(xí), 總而言之這兩周中我學(xué)到很多,受益匪淺。18參考文獻(xiàn)1嚴(yán)蔚敏,吳偉民 .數(shù)據(jù)結(jié)構(gòu)( C 語(yǔ)言版).清華大學(xué)出版社 .2嚴(yán)蔚敏,吳偉民 .數(shù)據(jù)結(jié)構(gòu)題集( C 語(yǔ)言版).清華大學(xué)出版社 .3 DATA STRUCTURE WITH C+ . William F
24、ord,William Topp . 清華大學(xué)出版社(影印版) .4譚浩強(qiáng) .c 語(yǔ)言程序設(shè)計(jì) . 清華大學(xué)出版社 .19致謝這次的課程設(shè)計(jì), 我們兩人一個(gè)小組去完成我們自己的課程, 但是還是得到了來(lái)自很多方面的幫助。 在此首先要感謝學(xué)院提供給我這次實(shí)踐的機(jī)會(huì), 讓我們有機(jī)會(huì)貼近現(xiàn)實(shí), 感受成功的喜悅; 其次要感謝實(shí)驗(yàn)機(jī)房的老師提供優(yōu)良的實(shí)驗(yàn)設(shè)備供我們做課設(shè), 正是這種良好的課設(shè)環(huán)境讓我們整個(gè)課設(shè)過(guò)程心情都非常愉快。再次要感謝指導(dǎo)老師們的辛勤指導(dǎo), 每當(dāng)我們遇到疑難問(wèn)題時(shí), 是他們一次次不厭其煩的解釋和悉心的指導(dǎo),我們才能闖過(guò)一個(gè)個(gè)難關(guān),到達(dá)勝利的彼岸,是他們給我們提供了一次寶貴的檢驗(yàn)自己機(jī)會(huì)
25、。 最后也要感謝同學(xué)們的幫助, 有了他們的支持使我遇到任何困難都不是一個(gè)人在戰(zhàn)斗。 感謝所有在我課程設(shè)計(jì)過(guò)程中幫助過(guò)我的人!20附錄源代碼:#include <stdio.h>/輸入輸出函數(shù)頭文件#include <stdlib.h>/字符串轉(zhuǎn)短整形函數(shù)的頭文件10140219/typedef struct LNode/定義單循環(huán)鏈表中節(jié)點(diǎn)的結(jié)構(gòu)int num;/ 編號(hào)int pwd;/passwordstruct LNode *next;/ 指向下一結(jié)點(diǎn)的指針LNode;/* 構(gòu)造結(jié)點(diǎn) */LNode *createNode(int m_num,int m_pwd)L
26、Node *p;p=(LNode *)malloc(sizeof(LNode);/ 生成一個(gè)結(jié)點(diǎn)p->num=m_num;/把實(shí)參賦給相應(yīng)的數(shù)據(jù)域p->pwd=m_pwd;p->next=NULL;/ 指針域?yàn)榭誶eturn p;/* 創(chuàng)建循環(huán)鏈表 */void createList(LNode *ppHead,int n)/* 創(chuàng)建單向循環(huán)鏈表 ppHead,人數(shù)個(gè)數(shù)為 n,并輸入每個(gè)人的密碼值,若建立失敗則生成頭結(jié)點(diǎn),讓 cur 指向他,若建立成功則插入結(jié)點(diǎn) P, cur 指向的數(shù)據(jù)元素為 p,后續(xù)為 "空"的節(jié)點(diǎn),再把 P 插入循環(huán)鏈表 ppHead
27、 中*/int i,m_pwd;LNode *p,*cur;/cur: 浮標(biāo)指針for(i=1;i<=n;i+)printf(" 輸入第 %d 個(gè)人的密碼: ",i);scanf("%d",&m_pwd);/ 輸入持有密碼p=createNode(i,m_pwd);/調(diào)用構(gòu)造結(jié)點(diǎn)函數(shù)if(*ppHead=NULL)/ 如果頭結(jié)點(diǎn)為空*ppHead=cur=p;/生成頭結(jié)點(diǎn),讓cur 指向他cur->next=*ppHead;/cur 的指針域指向自身else/如果不為空,則插入結(jié)點(diǎn)21p->next = cur->next
28、;cur->next = p;cur= p;/cur 指向新插入結(jié)點(diǎn)printf(" 完成創(chuàng)建! n"); / 提示鏈表創(chuàng)建完成/* 出隊(duì)處理 */void jose(LNode *ppHead,int m_pwd)/*p 指向要?jiǎng)h除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn), ppHead 指向要?jiǎng)h除的節(jié)點(diǎn),使 p=ppHead, ppHead 再指向要?jiǎng)h除節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn), 使 p 和 ppHead 鏈接,輸出 p 指向節(jié)點(diǎn)的編號(hào)和密碼值,釋放 ppHead,如此循環(huán),直至把所有節(jié)點(diǎn)都打印和刪除為止! */ int i,j;LNode *p,*p_del;/ 定義指針變量for(i=1;p
29、!=ppHead;i+)for(j=1;j<m_pwd;+j)p=ppHead;/p 賦值為 ppHead,p 指向要?jiǎng)h除結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)ppHead=ppHead->next;/ppHead指向下一個(gè)元素p->next = ppHead->next;/p 結(jié)點(diǎn)與頭結(jié)點(diǎn)鏈接i=ppHead->pwd;/i 賦值為 ppHead->pwdj=ppHead->num;/j 賦值為 ppHead->num, j 為要?jiǎng)h除的密碼值printf(" 第%d 個(gè)人出列,密碼: %dn",j,i);m_pwd=ppHead->pwd;
30、/m_pwd 賦值為 ppHead->pwdfree(ppHead);/釋放頭結(jié)點(diǎn)ppHead=p->next;/ppHead 重新賦值給p->next,即釋放前的ppHead->pwd指針 /刪除報(bào)數(shù)結(jié)點(diǎn)i=ppHead->pwd;/i 賦值為 ppHead->pwdj=ppHead->num;/j 賦值為 ppHead->numprintf(" 最后一個(gè)出列是 %d 號(hào),密碼是 :%dn",j,i);free(ppHead);/釋放頭結(jié)點(diǎn)void instruction()printf("* *n");
31、printf(" 約瑟夫環(huán) :n");printf("編號(hào)為 1,2,3,4,n 的 n 個(gè)人按順時(shí)針?lè)较驀蝗?每人持有一個(gè)密 n");printf(" 碼(正整數(shù) ).一開(kāi)始任選一個(gè)正整數(shù)作為報(bào)數(shù)的上限值m,從第一個(gè)人開(kāi)始 n");22printf(" 按順時(shí)針?lè)较蜃?1 開(kāi)始順序報(bào)數(shù) ,報(bào)到時(shí)停止 .報(bào) m 的人出列, 將他的密碼 n");printf("m 作為新的 m 值,從他在順時(shí)針?lè)较蛏系南乱蝗碎_(kāi)始重新從 1 報(bào)數(shù) , 如此下去 ,n");printf(" 直到所有人全部出列為止 .編程打印出列順序 .n"); printf("*n"); return 0;void menu()printf("*約瑟夫環(huán)*n");printf("n");pri
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能停車(chē)場(chǎng)裝修合同范本
- 教育培訓(xùn)基地租賃合同
- 學(xué)校教室內(nèi)墻裝修工程合同
- 家電產(chǎn)品國(guó)內(nèi)物流配送協(xié)議
- 大宗商品運(yùn)輸承運(yùn)合同范本
- 主題美容院裝修協(xié)議模板
- 水產(chǎn)加工污泥轉(zhuǎn)運(yùn)協(xié)議模板
- 體育館裝修合同協(xié)議書(shū)
- 工業(yè)廢水罐車(chē)轉(zhuǎn)運(yùn)合同
- 植物園裝飾合同模板
- 六年級(jí)2025寒假特色作業(yè)
- 2025年江蘇轄區(qū)農(nóng)村商業(yè)銀行招聘筆試參考題庫(kù)含答案解析
- 人教版六年級(jí)數(shù)學(xué)下冊(cè)完整版教案及反思
- 少兒財(cái)商教育講座課件
- (八省聯(lián)考)云南省2025年普通高校招生適應(yīng)性測(cè)試 物理試卷(含答案解析)
- 2025藥劑科工作人員工作計(jì)劃
- 春節(jié)節(jié)后安全教育培訓(xùn)
- 2025年新高考數(shù)學(xué)一輪復(fù)習(xí)第5章重難點(diǎn)突破02向量中的隱圓問(wèn)題(五大題型)(學(xué)生版+解析)
- 水土保持方案投標(biāo)文件技術(shù)部分
- 印刷品質(zhì)量保證協(xié)議書(shū)
- 2023年浙江省公務(wù)員錄用考試《行測(cè)》題(A類(lèi))
評(píng)論
0/150
提交評(píng)論