


下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)實(shí)驗(yàn)實(shí)驗(yàn)報(bào)告課程名稱數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)實(shí)驗(yàn)課程編號(hào)0906550實(shí)驗(yàn)項(xiàng)目名稱約瑟夫環(huán)學(xué)號(hào)年級(jí)2014姓名專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生所在學(xué)院計(jì)算機(jī)學(xué)院指導(dǎo)教師楊靜實(shí)驗(yàn)室名稱地點(diǎn)21B276哈爾濱工程大學(xué)實(shí)驗(yàn)報(bào)告一實(shí)驗(yàn)課名稱:數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)實(shí)驗(yàn) 實(shí)驗(yàn)名稱:約瑟夫環(huán)班級(jí) 學(xué)號(hào) 姓名 時(shí)間一、 問(wèn)題描述設(shè)有編號(hào)為 1,2, ,n 的 n ( n> 0)個(gè)人圍成一個(gè)圈,每個(gè)人持有一個(gè)密碼m。從第一個(gè)人開(kāi)始報(bào)數(shù), 報(bào)到 m 時(shí)停止報(bào)數(shù), 報(bào) m 的人出圈,再?gòu)乃南乱粋€(gè)人起重新報(bào)數(shù),報(bào)到 m 時(shí)停止報(bào)數(shù), 報(bào) m 的出圈,如此下去, 直到所有人全部出圈為止。 當(dāng)任意給定 n 和
2、m 后,設(shè)計(jì)算法求 n 個(gè)人出圈的次序。二、 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)每個(gè)人按報(bào)數(shù)順序有唯一的前驅(qū)與后繼關(guān)系, 并且報(bào)數(shù)順序循環(huán), 所以采用單向循環(huán)鏈 表模擬,鏈表節(jié)點(diǎn)存儲(chǔ)序號(hào) number 和 m,存儲(chǔ)結(jié)構(gòu)定義如下:typedef struct Listint number; 始化,構(gòu)建循環(huán)鏈表,依次存儲(chǔ)序號(hào)1 至 n 的人 , 鏈表指針 L 指向序號(hào)為 1 的人。List *create_list_with_one_m(List *L, int n)List *pre; 了獲取被刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn) , m=1時(shí)重新賦值 m為 1+循環(huán)鏈表的長(zhǎng)度, 所以需要一個(gè)函數(shù)獲取循環(huán)鏈表的長(zhǎng)度。擬報(bào)數(shù)過(guò)程, L
3、 永遠(yuǎn)指向下一個(gè)第一個(gè)報(bào)數(shù)的人,刪除L 開(kāi)始后第 m個(gè)節(jié)點(diǎn),用結(jié)點(diǎn)指針del 返回刪除結(jié)點(diǎn)。List *delete_node(List *L, int m, List *del)if(m = 1) 入構(gòu)建好的鏈表 L,人數(shù) n ,密碼 m,每次調(diào)用 delete_node 函數(shù)刪除一 人,進(jìn)行 n 次。void joseph_with_one_m(List *L, int n, int m)int i = 1;while(i <= n)果密碼 m 不同,則刪除節(jié)點(diǎn)后,以刪除節(jié)點(diǎn)的密碼m 作為新的 m。void joseph_with_diff_m(List *L, int n)int
4、i = 1;int m = L->m;while(i <= n)主函數(shù)中獲取人數(shù)和密碼 m,構(gòu)建鏈表,調(diào)用 joseph 函數(shù)。int main()int n, m;printf(" 請(qǐng)輸入人數(shù) n: ");scanf("%d", &n);printf(" 請(qǐng)輸入所有人的 m: ");scanf("%d", &m);List *L;L = create_list_with_one_m(L, n);joseph_with_one_m(L, n, m);return 0;四、界面設(shè)計(jì) 程序需
5、要獲取人數(shù) n,密碼 m(相同的密碼 m和不同的密碼 m),輸出出圈順序。所以以提示 的形式獲取 n 和 m。五、運(yùn)行測(cè)試與分析 (1)運(yùn)行程序,顯示輸入提示,如圖所示。2)根據(jù)提示,輸入人數(shù),并輸入密碼,即可輸出結(jié)果。(3)需要不同密碼的程序可根據(jù)提示輸入不同密碼,即可輸出結(jié)果。六、實(shí)驗(yàn)收獲與思考1. 掌握了循環(huán)鏈表的初始化,刪除,求長(zhǎng)等常用方法的使用,鞏固了相關(guān)數(shù)據(jù)結(jié)構(gòu)。2. 在實(shí)驗(yàn)中熟悉了 C 語(yǔ)言對(duì)數(shù)據(jù)結(jié)構(gòu)的描述,發(fā)現(xiàn)了過(guò)去的薄弱之處,重新進(jìn)行學(xué)習(xí)。3. 體會(huì)到了正確的數(shù)據(jù)結(jié)構(gòu)對(duì)程序的重要性。七、附錄1. 相同密碼#include <>#include <>ty
6、pedef struct Listint number;int m;struct List *next;List;/* 構(gòu)建循環(huán)鏈表,依次存儲(chǔ) 1-n, L 指向 1* pre:previous node* cur:current node*/List *create_list_with_one_m(List *L, int n)List *pre;int i=1;for(; i <= n; i+)List *cur = (List*)malloc(sizeof(List); cur->number = i;cur->next = NULL;if(i = 1) 同密碼#inc
7、lude <>#include <> typedef struct Listint number;int m;struct List *next;List;/* 構(gòu)建循環(huán)鏈表,依次存儲(chǔ) 1-n, L 指向 1* pre:previous node* cur:current node*/List *create_list_with_diff_m(List *L, int n)List *pre;int i=1;for(; i <= n; i+)List *cur = (List*)malloc(sizeof(List); cur->number = i;pri
8、ntf(" 請(qǐng)輸入第 %d人的 m: ", i); scanf("%d", &(cur->m); cur->next = NULL;if(i = 1) / 只在第一次進(jìn)入 , init L, pre L = cur;pre = cur;else / 鏈接 pre 與 cur, 并向后移動(dòng) pre pre->next = cur;pre = cur; pre->next = L;return L;/ 返回循環(huán)鏈表 L 的長(zhǎng)度 int length_list(List *L)int i = 1;List *p = L->
9、next; while(p != L) i+; p = p->next; return i;/* 刪除 L 開(kāi)始后第 m個(gè)節(jié)點(diǎn),用 del 返回* L 永遠(yuǎn)指向第一個(gè)報(bào)數(shù)的人* pri: prior node* del: delete node*/List *delete_node(List *L, int m, List *del)1+lengthif(m = 1) /為了獲取被刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn) , m=1 時(shí)重新賦值為int l = length_list(*L);m = 1+l;List *pri = *L;int j = 0;while(j < m-2) /移動(dòng) m-2
10、 次 , 獲取 pripri = pri->next; j+;del = pri->next; pri->next = del->next;*L = pri->next; return del;void joseph_with_diff_m(List *L, int n)int i = 1;int m = L->m;while(i <= n) /每次 del 一個(gè) nodeList *del = delete_node(&L, m, del); printf("第 %d個(gè)出圈的序號(hào)是 %dn", i, del->number);m = del->m;free(del); i+; int main()
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年河南省職教高考《語(yǔ)文》核心考點(diǎn)必刷必練試題庫(kù)(含答案)
- 2025年創(chuàng)意簽名測(cè)試試題及答案
- 2025年神獸學(xué)游泳考試題及答案
- 2025年井下水泵考試題及答案
- 2025年龍崗聘員面試題及答案
- 2025年蘭州鐵路面試題及答案
- 2025年有趣的七巧板小班標(biāo)準(zhǔn)教案
- 2025年中學(xué)招聘面試試題及答案
- 2025年英語(yǔ)點(diǎn)外賣測(cè)試題及答案
- 2025年甲卷數(shù)學(xué)試題及答案
- 項(xiàng)目式教學(xué)在小學(xué)數(shù)學(xué)教學(xué)中的應(yīng)用
- GB/T 5510-2024糧油檢驗(yàn)谷物及制品脂肪酸值的測(cè)定
- 護(hù)士2024思想?yún)R報(bào)5篇
- 中醫(yī)館痔瘡治療方案
- 2025屆湖南省長(zhǎng)沙市周南教育集團(tuán)重點(diǎn)中學(xué)初三普通中考測(cè)試(二)物理試題含解析
- 《交通運(yùn)輸經(jīng)濟(jì)學(xué)》題集
- JGJT272-2012 建筑施工企業(yè)信息化評(píng)價(jià)標(biāo)準(zhǔn)
- 線性代數(shù)試題(完整試題與詳細(xì)答案)
- 配送異物控制方案
- DZT 0445-2023 天然氣水合物術(shù)語(yǔ)
- 雙重血漿置換
評(píng)論
0/150
提交評(píng)論