資源描述:
《數(shù)據(jù)結(jié)構(gòu)實驗報告約瑟夫環(huán)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、為了適應(yīng)公司新戰(zhàn)略的發(fā)展,保障停車場安保新項目的正常、順利開展,特制定安保從業(yè)人員的業(yè)務(wù)技能及個人素質(zhì)的培訓(xùn)計劃數(shù)據(jù)結(jié)構(gòu)實驗報告約瑟夫環(huán) 一、上機(jī)實驗的問題和要求: 約瑟夫環(huán) 問題描述:編號是1,2,?,n(n>0)的n個人按照順時針方向圍坐一圈,每人持有一正整數(shù)密碼。開始時任選一個正整數(shù)作為報數(shù)上限值m,從某個人開始按順時針方向自1開始順序報數(shù),報到m時停止報數(shù),報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下一個人開始重新從1報數(shù),如此下去,直到所有人全部出列為止。令n最大值取30。設(shè)計一個程序來求出出列順序,并輸出
2、結(jié)果?! 』疽螅豪脝蜗蜓h(huán)鏈表存儲結(jié)構(gòu)模擬此過程,按照出列的順序輸出各人的編號?! 《?、程序設(shè)計的基本思想,原理和算法描述: 算法的基本思想: 約瑟夫環(huán)問題中的數(shù)據(jù)是人所在的位置,而這種數(shù)據(jù)是存在“第一元素、最后元素”,并且存在“唯一的前驅(qū)和后繼的”,符合線性表的特點。由于需要模擬約瑟夫環(huán)的出列問題,可以采用順序表來實現(xiàn)線性表,完成出列順序的輸出?! 『诵乃惴ㄖ饕譃閮刹剑骸 ?、確定需要刪除的位置, 2、設(shè)置并刪除該位置。目的-通過該培訓(xùn)員工可對保安行業(yè)有初步了解,并感受到安保行業(yè)的發(fā)展的巨大潛力,可提升其的專業(yè)水平,并確
3、保其在這個行業(yè)的安全感。為了適應(yīng)公司新戰(zhàn)略的發(fā)展,保障停車場安保新項目的正常、順利開展,特制定安保從業(yè)人員的業(yè)務(wù)技能及個人素質(zhì)的培訓(xùn)計劃 已知報數(shù)間隔m,我們可以把當(dāng)前位置加上m獲得需要刪除的位置,如果獲得的位置超過順序表中實際元素的總長度,則可以通過減去數(shù)組的實際長度來修正。然后把順序表中的當(dāng)前指向位置設(shè)置為該位置,繼而刪掉該位置?! 》磸?fù)進(jìn)行上述確定位置和刪除位置的操作,直到順序表為空?! ≈鞒绦虻牧鞒蹋骸 〕绦蛴扇齻€模塊組成: 1、輸入模塊:無提示語句,直接輸入總?cè)藬?shù)n和報數(shù)次數(shù)m,中間用逗號隔開。 2、處理模塊:將元素儲存
4、于順序表中。在主函數(shù)中根據(jù)報數(shù)間隔確定需要刪除的元素的位置,在順序表中設(shè)置該位置并刪除該位置,同時輸出該位置的值。反復(fù)設(shè)置并刪除直到表空?! ?、輸出模塊:分別在DOS下和文件中,按移除元素的順序依次顯示其位置?! 「鞒绦蚰K之間的層次關(guān)系: 主函數(shù)會按設(shè)計的方法調(diào)用順序表中“獲取實際長度”、“設(shè)置需要刪除元素的位置”、“移除該位置元素”和“判斷是否為空表”四種方法方法,使元素依次出列,并正確結(jié)束程序?! ∪⒃闯绦蚣白⑨專耗康?通過該培訓(xùn)員工可對保安行業(yè)有初步了解,并感受到安保行業(yè)的發(fā)展的巨大潛力,可提升其的專業(yè)水平,并確保其在這個
5、行業(yè)的安全感。為了適應(yīng)公司新戰(zhàn)略的發(fā)展,保障停車場安保新項目的正常、順利開展,特制定安保從業(yè)人員的業(yè)務(wù)技能及個人素質(zhì)的培訓(xùn)計劃 #include #include #include /*宏定義和單鏈表類型定義*/ #defineListSize100 typedefintDataType; typedefstructNode { DataTypedata; structNode*next; }ListNode,*LinkList; /*函數(shù)聲明*/ LinkListCreateCycList(intn);/*創(chuàng)
6、建一個長度為n的循環(huán)單鏈表的函數(shù)聲明*/ voidJosephus(LinkListhead,intn,intm,intk);/*在長度為n的循環(huán)單鏈表中,報數(shù)為編號為m的出列*/ voidDisplayCycList(LinkListhead);/*輸出循環(huán)單鏈表*/ voidmain() { LinkListh; intn,k,m;目的-通過該培訓(xùn)員工可對保安行業(yè)有初步了解,并感受到安保行業(yè)的發(fā)展的巨大潛力,可提升其的專業(yè)水平,并確保其在這個行業(yè)的安全感。為了適應(yīng)公司新戰(zhàn)略的發(fā)展,保障停車場安保新項目的正常、順利開展,特
7、制定安保從業(yè)人員的業(yè)務(wù)技能及個人素質(zhì)的培訓(xùn)計劃 printf("輸入環(huán)中人的個數(shù)n="); scanf("%d",&n); printf("輸入開始報數(shù)的序號m="); scanf("%d",&k); printf("輸出結(jié)果為:"); scanf("%d",&k); h=CreateCycList(n); Josephus(h,n,m,k); } voidJosephus(LinkListhead,intn,intm,intk) /*在長度為n的循環(huán)單鏈表中,從第k個人開始報數(shù),數(shù)到m的人出列*/{ ListN
8、ode*p,*q; inti; p=head; for(i=1;inext; } while(p->next!=p) {for(i=1;inext; } q->next=p->next;/*