




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、華北科技學(xué)院課程設(shè)計(jì)說明書(數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))班級:姓名:學(xué)號:設(shè)計(jì)題目:設(shè)計(jì)時間:指導(dǎo)教師:評 語:評閱成績:評閱教師:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告開課實(shí)驗(yàn)室: 基礎(chǔ)實(shí)驗(yàn)室 一2010 年9月16日實(shí)驗(yàn)題目敢死隊(duì)問題1. 實(shí)驗(yàn)題目敢死隊(duì)問題2. 實(shí)驗(yàn)設(shè)備及環(huán)境PC兼容機(jī)、Windows操作系統(tǒng)、VB軟件等。3. 功能模塊簡介和系統(tǒng)結(jié)構(gòu)圖 系統(tǒng)結(jié)構(gòu)圖本程序有四個功能模塊,包括三個解決敢死隊(duì)問題方案的模塊和一個退出系統(tǒng)模塊。 三個解決方案分別采用了循環(huán)聊表儲存結(jié)構(gòu)、線性表儲存結(jié)構(gòu)、循環(huán)隊(duì)列儲存結(jié)構(gòu)。功 能模塊如下圖所示。循環(huán)單鏈表儲線性表儲存循環(huán)隊(duì)列儲存退出敢死隊(duì)問題結(jié)構(gòu)結(jié)構(gòu)存結(jié)構(gòu) L功能模塊具體簡
2、介如下: (1).循環(huán)單鏈表以單循環(huán)鏈表為存儲結(jié)構(gòu),包含三個模塊:1.主程序模塊 包含敢死隊(duì)人數(shù)的輸入,死亡數(shù)字的輸入,函數(shù)的調(diào)用,結(jié)果的輸出。2.構(gòu)造鏈表并初始化構(gòu)造鏈表,給每個結(jié)點(diǎn)賦值,給隊(duì)員編號。3 刪除當(dāng)報(bào)數(shù)到死亡數(shù)字時隊(duì)員出列去執(zhí)行任務(wù),刪除該節(jié)點(diǎn)。(2).線性表儲存結(jié)構(gòu)功能設(shè)計(jì)本程序其實(shí)質(zhì)是約瑟夫環(huán)問題,本次實(shí)驗(yàn)用了線性表數(shù)據(jù)結(jié)構(gòu),并運(yùn)用模塊化的程序設(shè)計(jì)思想,算法的實(shí)現(xiàn)是這樣的:定義類類型1. 定義變量并初始化2. 線性表初始化3. 當(dāng)隊(duì)員數(shù)小于等于1時,輸出結(jié)果算法流程圖循環(huán)隊(duì)列儲存結(jié)構(gòu)解決功能設(shè)計(jì),算法本程序其實(shí)質(zhì)是約瑟夫環(huán)問題,本次實(shí)驗(yàn)用了循環(huán)隊(duì)列數(shù)據(jù)結(jié)構(gòu),并運(yùn)用模塊化的程序
3、設(shè)計(jì)思想 的實(shí)現(xiàn)是這樣的這個方法是用隊(duì)列循環(huán)來做的,實(shí)現(xiàn)的方法是這樣的:首先從第一號開始報(bào)數(shù),循環(huán)到指定的偏移位置刪除結(jié)點(diǎn),直至剩下一個結(jié)點(diǎn)。然后再比較一下它的號碼是不是等于1,如果等于則輸出開始計(jì)數(shù)位置,如果不等,繼續(xù)循環(huán)查找,直到找出符合條件的計(jì)數(shù)起始位置,輸出結(jié)果。算法流程圖E F : Debuck敢死6k- exe表列 鍍表臥 隹壞出 BI M 12 3 4請選擇實(shí)現(xiàn)結(jié)果的方祛:g10個隊(duì)員,死亡數(shù)字為5來運(yùn)行,結(jié)果如下?cl F: Debug:敢死6k. exe您使用是循那鏈舂儲存結(jié)構(gòu) 請輸入敢死隊(duì)的人數(shù):10請輸入死亡數(shù)數(shù)字人執(zhí)號戰(zhàn)士開始計(jì)數(shù)才能讓排長最后一個滔下來而不去執(zhí)行任務(wù)表
4、列 鏈表臥 程壞岀Bf 12 3 4請選擇實(shí)駆吉果的方法! (1-4)選擇第2項(xiàng)功能,運(yùn)用線性表儲存結(jié)構(gòu)n x表列 程壞出 H 12 3 4嘰: DebueVtt5EEk- ese弓使用的是線性表儲存結(jié)構(gòu)胡輸入敢死隊(duì)的人數(shù);10JA第y號戰(zhàn)士開始計(jì)數(shù)才能讓排長最后一個留下耒而不去執(zhí)行任務(wù)。晴選擇實(shí)現(xiàn)結(jié)杲的方法 C1-4)選擇第3項(xiàng)功能,運(yùn)用循環(huán)隊(duì)列來實(shí)現(xiàn)結(jié)果c;F : DebueSlexe圾使用的是循壞臥列儲存結(jié)構(gòu)請輸入敢死隊(duì)的人數(shù);k報(bào)號戰(zhàn)士開始計(jì)數(shù)才能讓排長最后一個留下耒而不去執(zhí)行任務(wù)。表列 鋌表隊(duì) 程壞出 n 1 2 3 JI淸選擇實(shí)現(xiàn)結(jié)果的方法:C1-4)5.程序的主要代碼:#i nc
5、lude #i nclude#i nclude#i nclude/循環(huán)單鏈表typedef struct nodeint data;struct node *n ext;LNode;/* 定義結(jié)點(diǎn)類型*/LNode* CREAT(int n) /*創(chuàng)建循環(huán)鏈表 */LNode *s,*q,*T;int i;if(n !=0)T=q=(LNode *)malloc(sizeof(LNode);q-data=1;/*生成第一個結(jié)點(diǎn)并使其 data值為1 */for(i=2;in ext=s;q- next-data=i;/*賦值 */q=q-n ext;q-n ext=T;return T;DEL
6、ETE (LNode* T,int m)/* 鏈表的刪除 */LNode *a;i nt i;while (T-n ext!=T)for (i=1;in ext;a=T- n ext;T-n ext=a-n ext;free(a);T=T-n ext;prin tf(n);return (T-data);/ 線性表#defi ne LIST_INIT_SIZE 100#defi ne LISTINCCREMENT 10#defi ne OK 1#defi ne ERROR 0 typedef int ElemType;typedef struct KList/*定義數(shù)據(jù)結(jié)構(gòu)體類型*/ElemT
7、ype *elem; /*存儲空間基址*/int length;/* 當(dāng)前長度 */int listsize; /*當(dāng)前分配的存儲容量(以sizeof(ElemType)為單位)*/SqList;int InitList_Sq( SqList &L)/* 創(chuàng)建線性表函數(shù) */L.elem=(ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType);if(!L.elem)printf(存儲分配失敗);return ERROR; elseL.length=O;/* 空表長度為 0*/L.listsize=LIST_INIT_SIZE;return OK
8、;/*初始存儲容量*/int List In sert_Sq(SqList &L)/* 線性表再分配函數(shù) */*SqList L;*/int *n ewbase;n ewbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCCREMENT)*sizeof(ElemType);/*為順序表增加一個大小為存儲LISTINCCREMENT個數(shù)據(jù)元素的空間*/if(! newbase)printf(存儲分配失敗);return ERROR;elseL.elem=newbase;/* 新基址 */L.listsize+=LISTINCCREMENT;/*增
9、加存儲容量*/return OK;/ 循環(huán)隊(duì)列#define QueueSize 1000 /假定預(yù)分配的隊(duì)列空間最多為 1000個元素typedef structint dataQueueSize;int front;in t rear;in t cou nt; /計(jì)數(shù)器,記錄隊(duì)中元素總數(shù)CirQueue;void Initial(CirQueue *Q)/將順序隊(duì)列置空Q-fron t=Q-rear=0;Q-cou nt=0; /計(jì)數(shù)器置/判隊(duì)列空int Empty(CirQueue *Q)retur n Q-fron t=Q-rear;/判隊(duì)列滿int Full(CirQueue *Q)
10、retur n Q-rear=QueueSize-1+Q-fr ont;/進(jìn)隊(duì)列void En Queue(CirQueue *Q,i nt x)if (IsFull(Q)printf(隊(duì)列上溢);/上溢,退出運(yùn)行exit(1);Q-cou nt +; /隊(duì)列元素個數(shù)加Q-dataQ-rear=x; /新元素插入隊(duì)尾Q-rear=(Q-rear+1)%QueueSize; /循環(huán)意義下將尾指針加/出隊(duì)列int DeQueue(CirQueue *Q)int temp;if(lsEmpty(Q)printf(隊(duì)列為空);/下溢,退出運(yùn)行 exit(1);temp=Q-dataQ-fr on t;
11、循環(huán)意義下的頭指針加1Q-cou nt-; /隊(duì)列元素個數(shù)減Q-fro nt=(Q-fro nt+1)%QueueSize; / return temp;/void mai n ()SqList L;int s,i,m,count=O;/* 聲明變量 */LNode *p;int 乙y;int num;int opt;abc:printf(n);prin tf(|1.循環(huán)鏈表|n);prin tf(|2.線性表|n);prin tf(|3.循環(huán)隊(duì)列|n);prin tf(|4.退出|n);printf(n);printf(”請選擇實(shí)現(xiàn)結(jié)果的方法:(14 ) nn);scan f(%d,&opt
12、);if(opt4 | opt1)printf(輸入有誤請重新輸入n);goto abc; switch(opt)case 1:system(cls);efg:printf(您使用是循環(huán)鏈表儲存結(jié)構(gòu)nn);printf(請輸入敢死隊(duì)的人數(shù):n);sea nf(%d,&nu m);if(nu mnum | m1) printf(輸入有誤請重新輸入);goto m;elsep=CREAT (n um);y=DELETE(p,m);z=num-y+2;if(z% num=0)printf (從第 %dth:開始計(jì)數(shù) n,z);elseprintf(從第%d號戰(zhàn)士開始計(jì)數(shù)才能讓排長最后一個留下來而不去
13、執(zhí)行去執(zhí)行任務(wù)。n,(num-y+2)%num);break;case 2:system(cls);printf(您使用的是線性表儲存結(jié)構(gòu)nn);e:printf(請輸入敢死隊(duì)的人數(shù):n);sca nf(%d,&nu m);if(nu mL.listsize)/*當(dāng)順序表當(dāng)前分配的存儲空間大小不足時進(jìn)行再分配*/ListI nsert_Sq(L);for(i=0;i1)/*當(dāng)所剩敢死隊(duì)員總數(shù)為1時,總循環(huán)結(jié)束*/for(i=0;i nu m;i+)if(L.elemi!=0)coun t+;if(cou nt=5)/* 報(bào)數(shù)循環(huán) */L.elemi=0; /* 表示隊(duì)員出列*/count=0;
14、/*計(jì)數(shù)器清零*/s-;/*敢死隊(duì)員數(shù)-1*/for(i=0;i nu m;i+)/* 輸出 */if(L.elemi!=0)if( num-L.elemi+2)% nu m=0)printf(從第%d號戰(zhàn)士開始計(jì)數(shù)才能讓排長最后一個留下來而不去執(zhí)行任務(wù)。n,num);else 任務(wù)。n,(num-L.elemi+2)%num);break;case 3:system(cls);printf(您使用的是循環(huán)隊(duì)列儲存結(jié)構(gòu)nn);int start,co un t,j;CirQueue s;g:printf(請輸入敢死隊(duì)的人數(shù):n);sca nf(%d,&nu m);if(nu m1)printf
15、(輸入有誤請重新輸入n);goto g;for(start=1;start=nu m;start+)/start為測試起點(diǎn)In itial(& s);for(i=1;i=nu m;i+)En Queue(&s,i);for(i=1;istart;i+)j=DeQueue(&s);En Queue(&s,j);coun t=1;while(co untvnum)for(i=1;i5;i+)j=DeQueue(&s);En Queue(&s,j);j=DeQueue(&s);coun t+;if(s.datas.fr on t=1)break;printf(從第%d號戰(zhàn)士開始計(jì)數(shù)才能讓排長最后一個留下來而不去執(zhí)行任務(wù)。n,start);break;case 4:exit(0);goto abc;6.實(shí)驗(yàn)總結(jié):通過這次課程設(shè)計(jì)我又學(xué)到了很多東西,如程序的模塊化設(shè)計(jì)思想,同時也加深了對 數(shù)據(jù)結(jié)構(gòu)這門課程的理解和學(xué)會了如何在實(shí)際中應(yīng)用數(shù)據(jù)結(jié)構(gòu)。在做程序之前,覺得敢死隊(duì)這個問題,很難解決。在通過自己一次次的畫圖,推算 結(jié)果時,明白了該程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 18204.6-2025公共場所衛(wèi)生檢驗(yàn)方法第6部分:衛(wèi)生監(jiān)測技術(shù)規(guī)范
- 別墅租賃合同
- (高清版)DB54∕T 0459-2025 絨山羊控光增絨技術(shù)規(guī)程
- 安全生產(chǎn)主題演講稿(30篇)
- 云南省昭通市市直中學(xué)2024-2025學(xué)年高一下學(xué)期第二次月考(5月)地理試卷(含答案)
- 陜西省榆林市2023-2024學(xué)年高一下學(xué)期期末考試地理試卷(含答案)
- 山東省菏澤市鄄城縣2024-2025學(xué)年八年級下學(xué)期期末練習(xí)生物試卷(含答案)
- 河北省滄州市四縣多校聯(lián)考2024-2025學(xué)年高一下學(xué)期(6月)第三次月考政治試卷(含答案)
- 福建省三明市六校2024-2025學(xué)年高二下學(xué)期期中考試生物試卷(含答案)
- 居民科普宣傳活動方案
- 帶電作業(yè)安全課件
- 2025年糧油倉儲管理員職業(yè)技能競賽參考試題庫(含答案)
- 白蟻防治文保施工方案
- 2025年中國國際技術(shù)智力合作集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2025時政試題及答案(100題)
- 食品安全自查、從業(yè)人員健康管理、進(jìn)貨查驗(yàn)記錄、食品安全事故處置等保證食品安全的規(guī)章制度
- 國家保密知識培訓(xùn)課件
- 臨床科主任考核管理辦法
- 社交媒體表情符號分析
- 農(nóng)村文化產(chǎn)業(yè)發(fā)展與市場開拓策略
- 2025年河南省豫地科技集團(tuán)有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論