資源描述:
《約瑟夫環(huán)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)1線性表及其應(yīng)用題目:約瑟夫環(huán)一.需求分析1.本演示程序中,人數(shù)n應(yīng)為任意的,首先應(yīng)輸入一個(gè)值賦給初始報(bào)數(shù)上限m,程序應(yīng)能自動(dòng)保存出列人的序號(hào)和將出列的人所持的密碼賦給m,再次作為報(bào)數(shù)上限,如此循環(huán),直至所有人都出列為止。2.演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“提示信息”之后,由用戶在鍵盤上輸入相應(yīng)數(shù)據(jù)(即每個(gè)人所持的密碼),每個(gè)人的序號(hào)由程序自動(dòng)分配。3.程序執(zhí)行的命令包括:(1)構(gòu)造鏈表;(2)輸入數(shù)據(jù);(3)執(zhí)行報(bào)數(shù),儲(chǔ)存出列人的序號(hào),刪除出列人的信息以及把出列人的密碼賦給m;(4)結(jié)束。4.測(cè)試數(shù)據(jù)(1)n=
2、7,7個(gè)人的密碼依次為:3,1,7,2,4,8,4,首先m值為6,則這正確的出列順序?yàn)?,1,4,7,2,3,5。二.概要設(shè)計(jì)為了實(shí)現(xiàn)上述操作,應(yīng)以單向循環(huán)鏈表為存儲(chǔ)結(jié)構(gòu)。1.基本操作:new_code()操作結(jié)果:構(gòu)造空鏈表,若成功就初始化每個(gè)人的相關(guān)信息delete_code()初始條件:線性鏈表存在操作結(jié)果:釋放指向出列的人的結(jié)點(diǎn),并重新報(bào)數(shù)2.本程序包含三個(gè)模塊:(1)主程序模塊;(2)構(gòu)造鏈表并輸入每個(gè)人信息模塊;(3)釋放結(jié)點(diǎn)模塊;三.詳細(xì)設(shè)計(jì)1.元素類型,結(jié)點(diǎn)類型和指針類型:typedefintElemType;typedefstructLNod
3、e{intnum;ElemTypedata;structLNode*next;}LNode;LNode*head;*this;*new;2.每個(gè)模塊的分析:(1)主程序模塊:main(){intm,n,i;printf("Enterthefirstcode(m):");scanf("%d",&m);printf("Enterthepeoplenumber(n):");scanf("%d",&n);getchar();printf("");new_code(n);if(head!=NULL)delete_code(n,m);else{printf("li
4、stisempty");exit();}for(i=0;inum=i;printf("enterthe%dcode(data):",i);ge
5、ts(numstr);this->data=atoi(numstr);new=(LNode*)malloc(sizeof(LNode));this->next=new;this=new;i++;}this->num=i;printf("enterthe%dcode(data):",i);gets(numstr);this->data=atoi(numstr);this->next=head;returnOK;}(1)釋放結(jié)點(diǎn)模塊delete_code(inta,intb){inti;intj=0;LNode*p;while((a--)!=1){for(i=1;
6、i<=b;i++){p=this;this=this->next;}b=this->data;str[j]=this->num;p->next=this->next;free(this);j++;}str[j]=this->next->num;returnOK;}2.完整的程序:#include"malloc.h"#include"stdio.h"#defineMAX100#defineERROR0#defineOK0typedefintElemType;typedefstructLNode{intnum;ElemTypedata;structLNode*ne
7、xt;}LNode;LNode*head,*this,*new;intstr[MAX];new_code(inta);delete_code(inta,intb);main(){intm,n,i;printf("Enterthefirstcode(m):");scanf("%d",&m);printf("Enterthepeoplenumber(n):");scanf("%d",&n);getchar();printf("");new_code(n);if(head!=NULL)delete_code(n,m);else{printf("listise
8、mpty");exit();}fo