版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 計算機學院信息管理與信息系統(tǒng)專業(yè)</p><p> 《程序設計綜合課程設計》報告</p><p> ?。?010/2011學年 第一學期)</p><p> 學生姓名: </p><p> 學生班級: </p><p> 學生學號: </
2、p><p> 指導教師: </p><p> 2011年 01 月 04 日</p><p><b> 目錄</b></p><p> 第一章 需求分析1</p><p> 1.1課程設計目的1</p><p> 1.2課程設計
3、要求1</p><p> 1.3課程設計目標與總體方案1</p><p> 1.4程序執(zhí)行的命令1</p><p> 第二章 系統(tǒng)的功能2</p><p> 2.1系統(tǒng)功能說明2</p><p> 2.2 系統(tǒng)功能解析2</p><p> 第三章 系統(tǒng)的設計3</
4、p><p> 3.1Josphu鏈表的實現(xiàn)3</p><p><b> 3.2循環(huán)鏈表3</b></p><p> 3.3 對程序的各個部分的詳細介紹3</p><p> 3.3.1利用類定義構造成員函數(shù)以及成員3</p><p> 3.3.2 定義成員函數(shù)4</p>
5、<p> 3.3.3創(chuàng)建含有n個結點的單循環(huán)鏈表5</p><p> 3.3.4 Josephu操作5</p><p> 3.3.5主函數(shù)6</p><p> 3.4程序的流程7</p><p> 第四章 程序的運行結果圖8</p><p> 4.1開始運行程序8</p>
6、<p> 4.2先鍵入?yún)⒓佑螒虻娜藬?shù)及報數(shù)間隔8</p><p> 4.3按空格鍵運行程序9</p><p><b> 第五章 總結10</b></p><p><b> 致謝11</b></p><p> 附錄一 參考文獻12</p><p&g
7、t; 附錄二 程序源代碼13</p><p><b> 約瑟夫生死游戲</b></p><p><b> 第一章 需求分析</b></p><p><b> 1.1課程設計目的</b></p><p> 課程設計目的是為學生提供了一個既動手又動腦,獨立實踐的機會,將
8、課本上的理論知識和實際有機的結合起來,鍛煉學生的分析解決實際問題的能力。提高學生適應實際,實踐編程的能力。通過實踐讓學生理論和實際操作相結合,更好的理解書面知識,并在鞏固的基礎上融會所學認識。</p><p><b> 1.2課程設計要求</b></p><p> 約瑟夫生死游戲:30個人圍成一個圈由第一個人數(shù)起,依次報數(shù),數(shù)到第九個人,便把他剔除,然后再從他的下
9、一個人數(shù)起,數(shù)到第九個人,再將他剔除剩下15個乘客為止,問那些位置將是被扔下大海的位置。課程設計要求是將30個人改為n,報數(shù)(原為9),也改為任意正整數(shù)。根據(jù)得到的初始數(shù)據(jù)得到生者和死者的位置編號并輸出。</p><p> 1.3課程設計目標與總體方案</p><p> 本實驗設計的目標是運用循環(huán)鏈表來解決Josephu環(huán)問題,其中運用了許多鏈表中的基本操作使改程序能不只解決一個Jos
10、ephu的簡單鏈表,其中的Josephu函數(shù)則是用于,運用C++程序編寫程序,實現(xiàn)隊列的建立、插入和刪除基本功能,在程序設計成功的基礎上,進一步深化理解隊列的作用和實現(xiàn)原理。</p><p> 1.4程序執(zhí)行的命令</p><p> 構造鏈表、輸入數(shù)據(jù)、執(zhí)行報數(shù)輸出出列人的序號結束。</p><p><b> 第二章 系統(tǒng)的功能</b>&
11、lt;/p><p> 2.1系統(tǒng)功能說明 </p><p> 圖1 系統(tǒng)功能程序圖</p><p> 2.2 系統(tǒng)功能解析</p><p> 如上圖所示,本系統(tǒng)分為五個功能模塊分別為:構建鏈表,確定n值,更新鏈表,輸入,輸出。下面就每個功能進行詳細說明:</p><p> ?。?)構建約瑟夫鏈表:使整個游戲在鏈表中
12、運行,使得結點在刪除時不需要移動大量的結點;</p><p> ?。?)確定n的值:進而使鏈具化體,從而可以構建一個具體的鏈表;</p><p> ?。?)更新鏈表:對剔除結點后的鏈表進行重新連接又,有構成了一個新的鏈表,使得循環(huán)繼續(xù)進行;</p><p> ?。?)輸入:輸入n的值進行鏈表具體化,輸入間隔值m,使得間隔被確定,程序得以有效正確的進行;</p&
13、gt;<p> (5)輸出:輸出要剔除的結點的數(shù)值。</p><p><b> 第三章 系統(tǒng)的設計</b></p><p> 3.1Josphu鏈表的實現(xiàn)</p><p> Josphu鏈表——鏈式表示和實現(xiàn)約瑟夫(Josephu)問題:已知N個人圍坐在一張圓桌周圍(不妨以1,2,……,N對每一個人依次編號),現(xiàn)在先從序號
14、為K的人開始報數(shù),數(shù)到m的那個人出列,他的下一個人又從1開始數(shù),報數(shù)到m的人出列……直到所有人都出出列為止。給出出列的順序。</p><p><b> 3.2循環(huán)鏈表</b></p><p> 隊列的順序表示和實現(xiàn)和順序棧相似,在隊列的順序存儲結構中,除了用一組地址連續(xù)的存儲單元依次存放從隊列頭到隊列尾的元素之外,尚需附設兩個指針front和rear分別指示隊列頭
15、元素及隊列尾元素的位置。為了C語言中描述方便起見,在此我們約定,初始化建空隊列時,令front=rear=0,每當插入新的隊列尾元素時,“尾指針增1”;每當刪除隊列頭元素時,“頭指針增1”。因此,在非空隊列中,頭指針始終指向隊列頭元素,而尾指針始終指向隊列尾元素的下一個位置從上述分析可見,在C++中不能用動態(tài)分配的一維數(shù)組來實現(xiàn)循環(huán)隊列。如果用戶的應用程序中設有循環(huán)隊列,則必須為它設定一個最大隊列長度;若用戶無法預估所用隊列的最大長度,
16、則宜采用鏈隊列。</p><p> 3.3 對程序的各個部分的詳細介紹</p><p> 編寫本實驗設計程序采用C++進行,在Visual c++ 6.0環(huán)境下運行。</p><p> 3.3.1利用類定義構造成員函數(shù)以及成員</p><p> template<class T></p><p>
17、 class List</p><p><b> {</b></p><p><b> public:</b></p><p><b> List()</b></p><p><b> {</b></p><p> fir
18、st=new LinkNode<T>;</p><p> first->link=first;</p><p><b> }</b></p><p><b> List(T x)</b></p><p><b> {</b></p>&l
19、t;p> first=new LinkNode<T>(x);</p><p> first->link=first;</p><p><b> }</b></p><p> List(List<T>&L);</p><p><b> ~List(){}<
20、;/b></p><p> void Insert(int i,T x);</p><p> T getHead(){return first->data;}</p><p> LinkNode<T>* getfirst(){return first;}</p><p> void xiuf(LinkNode&
21、lt;T>* a){first=a;}</p><p> LinkNode<T>*Locate(int i);</p><p> protected:</p><p> LinkNode<T>*first;</p><p><b> };</b></p><p&g
22、t; 3.3.2 定義成員函數(shù)</p><p> template<class T></p><p> List<T>::List(List<T>&L)</p><p><b> {</b></p><p><b> T value;</b>&l
23、t;/p><p> LinkNode<T>*srcptr=L.getHead();</p><p> LinkNode<T>*destptr=first=new LinkNode<T>;</p><p> destptr->data=srcptr->data;</p><p> while(
24、srcptr->link!=first)</p><p><b> {</b></p><p> value=srcptr->link->data;</p><p> destptr->link=new LinkNode<T>(value);</p><p> destptr=
25、destptr->link;</p><p> srcptr=srcptr->link;</p><p> last=srcptr;</p><p><b> }</b></p><p><b> };</b></p><p> template<
26、class T></p><p> LinkNode<T>* List<T>::Locate(int i)</p><p><b> {</b></p><p> if(i<0)return NULL;</p><p> LinkNode<T>* current=f
27、irst;</p><p><b> int k=1;</b></p><p> while(k<i)</p><p><b> { </b></p><p> current=current->link;</p><p><b> k++;
28、</b></p><p> if(current==first)return NULL;</p><p><b> }</b></p><p> return current;</p><p><b> };</b></p><p> 3.3.3創(chuàng)建含有
29、n個結點的單循環(huán)鏈表</p><p> template<class T></p><p> void List<T>::Insert(int i,T x)</p><p><b> {</b></p><p> LinkNode<T>* current=Locate(i);&
30、lt;/p><p> if(current==NULL)return;</p><p> LinkNode<T>*newNode=new LinkNode<T>(x);</p><p> if(newNode==NULL)</p><p><b> {</b></p><p
31、> cout<<"存儲分配錯誤!"<<endl;</p><p><b> exit(1);</b></p><p><b> }</b></p><p> newNode->link=current->link;</p><p>
32、; current->link=newNode;</p><p><b> };</b></p><p> 3.3.4 Josephu操作</p><p> Josephu操作為本程序的重點,在本程序中我是利用了一個Josephu函數(shù)來解決該問題的,該函數(shù)是通過不斷的循環(huán)、輸出、再循環(huán)、再輸出直到將Josephu鏈表中的一半元素被
33、輸出。函數(shù)如下:</p><p> template<class T></p><p> void Josephus(List<T>& Js,int n,int m)</p><p><b> {</b></p><p> LinkNode<T> *p=Js.Locat
34、e(1),*pre;</p><p><b> int i,j;</b></p><p> for(i=1;i<=n/2;i++)</p><p><b> {</b></p><p><b> if(m==1)</b></p><p>&
35、lt;b> {</b></p><p> cout<<"出列的人是:"<<p->data<<endl;</p><p> pre=p->link;</p><p> Js.xiuf(p->link);</p><p><b> de
36、lete p;</b></p><p><b> p=pre;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p>
37、for(j=1;j<m;j++)</p><p><b> {</b></p><p><b> pre=p;</b></p><p> p=p->link;</p><p><b> }</b></p><p> cout<
38、<"出列的人是"<<p->data<<endl;</p><p> pre->link=p->link;</p><p> if(p==Js.getfirst())Js.xiuf(p->link);</p><p> //if(p=Js.getlast())Js.movelast(pre
39、);</p><p><b> delete p;</b></p><p> p=pre->link;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
40、</p><p><b> 3.3.5主函數(shù)</b></p><p> void main()</p><p> { List<int> clist(1);</p><p> int i,n,m;</p><p> cout<<"輸入游戲者的人數(shù)和報數(shù)間
41、隔:"<<endl;</p><p> cin>>n>>m;</p><p> for(i=1;i<n;i++)</p><p><b> {</b></p><p> clist.Insert(i,i+1);</p><p><b
42、> }</b></p><p> Josephus(clist,n,m); </p><p><b> }</b></p><p><b> 3.4程序的流程</b></p><p><b> 3.4.1流程圖</b></p><
43、p><b> 圖2 程序流程圖</b></p><p> 3.4.2流程圖的說明</p><p> 開始進入程序,先確定n的值,然后,根據(jù)n得知建立鏈表,然后數(shù)數(shù),確定輸出的位置,輸出數(shù),更新鏈表,如果剩下的數(shù)小于等于n/2,則停止程序,否則繼續(xù)計數(shù)進行循環(huán)直至結束程序。 </p><p> 第四章 程序的運行結果圖</p&
44、gt;<p> 4.1開始運行程序 </p><p><b> 程序的初始化</b></p><p><b> 圖3 程序初始化</b></p><p> 4.2先鍵入?yún)⒓佑螒虻娜藬?shù)及報數(shù)間隔</p><p> 輸入人數(shù)和報數(shù)間隔30 9</p><p&g
45、t; 圖4 確定n值及間隔值m</p><p> 4.3按空格鍵運行程序</p><p><b> 運行結果</b></p><p><b> 圖4.3運行結果</b></p><p><b> 第五章 總結</b></p><p> 通過本
46、次課程設計的鍛煉,使我對數(shù)據(jù)結構又有了許多新的深刻認識,更深的理解了數(shù)據(jù)結構的難點,并且通過這次課程設計,我把以前認為沒有實際用途的知識轉化為了實際問題來解決,非常有意思,同時也覺得這種學習方法,更好的提高學習的效率,以下就是我做這次課程設計的主要體會:</p><p> 一方面,在程序設計語言中,每一個數(shù)據(jù)都屬于某種數(shù)據(jù)類型。類型明顯或隱含地規(guī)定了數(shù)據(jù)的取值范圍、存儲方式以及允許進行的運算。另一方面,在程序設
47、計過程中,當需要引入某種新的數(shù)據(jù)結構時,總是借助編程語言所提供的數(shù)據(jù)類型來描述數(shù)據(jù)的存儲結構。</p><p> 一個軟件系統(tǒng)框架應建立在數(shù)據(jù)之上,而不是建立在操作之上。一個含抽象數(shù)據(jù)類型的軟件模塊應包含定義、表示、實現(xiàn)三個部分。本實驗設計就是建立在“定義、表示、實現(xiàn)”的基礎上完成的。同時,做好課程設計更能體現(xiàn)出同學的學習態(tài)度,對于新知識的渴望與追求,能夠反映出同學對自己負責任的決心,這點讓我感受頗深。 <
48、;/p><p><b> 致謝</b></p><p> 在此特別感謝xx老師的全力幫助與指導,通過這次課程設計,我對以前的知識不僅有了很好的復習,同時也把以前課本上的東西應用在了實際上,對所學的知識有了很好的鞏固與實踐,當然起初有很多問題,很多疑惑,然而在老師們的細心指導下與幫助,我又學到了很多的知識動的了很多道理許多事情不是逃避就可以沒事的,凡事都的去面對,另外還
49、要感謝xx老師上課的詳細講解為我的數(shù)據(jù)結構打下結實的基礎。</p><p><b> 附錄一 參考文獻</b></p><p> [1]譚浩強.《C++程序設計》.北京:清華大學出版社 .2003年</p><p> [2]嚴蔚敏,吳偉民 .《數(shù)據(jù)結構》.北京:清華大學出版社.2006年</p><p> [3]
50、嚴蔚敏,吳偉民,米寧.《數(shù)據(jù)結構教程上機實驗指導》.北京:清華大學出版社.2006年</p><p><b> 附錄二 程序源代碼</b></p><p> #include<iostream></p><p> using namespace std;</p><p> template<cl
51、ass T></p><p> struct LinkNode</p><p><b> {</b></p><p><b> T data;</b></p><p> LinkNode<T>*link;</p><p> LinkNode( T
52、item)</p><p><b> {</b></p><p> data=item;</p><p> link=NULL;</p><p><b> }</b></p><p><b> };</b></p><p&g
53、t; template<class T></p><p> class List</p><p><b> {</b></p><p><b> public:</b></p><p><b> List()</b></p><p>
54、;<b> {</b></p><p> first=new LinkNode<T>;</p><p> first->link=first;</p><p><b> }</b></p><p><b> List(T x)</b></p&g
55、t;<p><b> {</b></p><p> first=new LinkNode<T>(x);</p><p> first->link=first;</p><p><b> }</b></p><p> List(List<T>&am
56、p;L);</p><p><b> ~List(){}</b></p><p> void Insert(int i,T x);</p><p> T getHead(){return first->data;} LinkNode<T>* getfirst(){return first;}</p&
57、gt;<p> void xiuf(LinkNode<T>* a){first=a;}</p><p> LinkNode<T>*Locate(int i);</p><p> protected:</p><p> LinkNode<T>*first;</p><p><b&g
58、t; };</b></p><p> template<class T></p><p> List<T>::List(List<T>&L)</p><p><b> {</b></p><p><b> T value;</b>&l
59、t;/p><p> LinkNode<T>*srcptr=L.getHead();</p><p> LinkNode<T>*destptr=first=new LinkNode<T>;</p><p> destptr->data=srcptr->data;</p><p> while(
60、srcptr->link!=first)</p><p><b> {</b></p><p> value=srcptr->link->data;</p><p> destptr->link=new LinkNode<T>(value);</p><p> destptr=
61、destptr->link;</p><p> srcptr=srcptr->link;</p><p> last=srcptr;</p><p><b> }</b></p><p><b> };</b></p><p> template<
62、class T></p><p> LinkNode<T>* List<T>::Locate(int i)</p><p><b> {</b></p><p> if(i<0)return NULL;</p><p> LinkNode<T>* current=f
63、irst;</p><p><b> int k=1;</b></p><p> while(k<i)</p><p><b> { </b></p><p> current=current->link;</p><p><b> k++;
64、</b></p><p> if(current==first)return NULL;</p><p><b> }</b></p><p> return current;</p><p><b> };</b></p><p> template&
65、lt;class T></p><p> void List<T>::Insert(int i,T x)</p><p><b> {</b></p><p> LinkNode<T>* current=Locate(i);</p><p> if(current==NULL)ret
66、urn;</p><p> LinkNode<T>*newNode=new LinkNode<T>(x);</p><p> if(newNode==NULL)</p><p><b> {</b></p><p> cout<<"存儲分配錯誤!"<&
67、lt;endl;</p><p><b> exit(1);</b></p><p><b> }</b></p><p> newNode->link=current->link;</p><p> current->link=newNode;</p>&l
68、t;p><b> };</b></p><p> template<class T></p><p> void Josephus(List<T>& Js,int n,int m)</p><p><b> {</b></p><p> LinkNod
69、e<T> *p=Js.Locate(1),*pre;</p><p><b> int i,j;</b></p><p> for(i=1;i<=n/2;i++)</p><p><b> {</b></p><p><b> if(m==1)</b>
70、</p><p><b> {</b></p><p> cout<<"出列的人是:"<<p->data<<endl;</p><p> pre=p->link;</p><p> Js.xiuf(p->link);</p>
71、<p><b> delete p;</b></p><p><b> p=pre;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>&
72、lt;/p><p> for(j=1;j<m;j++)</p><p><b> {</b></p><p><b> pre=p;</b></p><p> p=p->link;</p><p><b> }</b></p>
73、;<p> cout<<"出列的人是"<<p->data<<endl;</p><p> pre->link=p->link;</p><p> if(p==Js.getfirst())Js.xiuf(p->link);</p><p> //if(p=Js.get
74、last())Js.movelast(pre);</p><p><b> delete p;</b></p><p> p=pre->link;</p><p><b> }</b></p><p><b> }</b></p><p>
75、<b> }</b></p><p> void main()</p><p><b> { </b></p><p> List<int> clist(1);</p><p> int i,n,m;</p><p> cout<<&quo
76、t;輸入游戲者的人數(shù)和報數(shù)間隔:"<<endl;</p><p> cin>>n>>m;</p><p> for(i=1;i<n;i++)</p><p> { clist.Insert(i,i+1);</p><p><b> }</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 約瑟夫生死游戲課程設計
- 約瑟夫生死者游戲課程設計報告
- 約瑟夫環(huán)-課程設計
- 約瑟夫環(huán)問題課程設計
- 約瑟夫環(huán)課程設計報告
- 約瑟夫環(huán)課程設計報告
- 課程設計--約瑟夫環(huán)程序設計
- 約瑟夫環(huán)課程設計實驗報告
- 數(shù)據(jù)結構_約瑟夫環(huán)_課程設計
- 《數(shù)據(jù)結構》課程設計“約瑟夫環(huán)”
- 約瑟夫環(huán)課程設計----數(shù)據(jù)結構
- 數(shù)據(jù)結構課程設計--- 約瑟夫(joseph)環(huán)
- 數(shù)據(jù)結構課程設計--- 約瑟夫環(huán)問題
- 數(shù)據(jù)結構約瑟夫環(huán)模擬課程設計
- 數(shù)據(jù)結構課程設計報告(約瑟夫環(huán))
- 數(shù)據(jù)結構--約瑟夫環(huán)課程設計報告
- 數(shù)據(jù)結構課程設計--約瑟夫環(huán)問題
- 數(shù)據(jù)結構課程設計報告---約瑟夫環(huán)
- 數(shù)據(jù)結構課程設計報告--約瑟夫環(huán)
- 剪刀游戲課程設計
評論
0/150
提交評論