




已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
北京郵電大學信息與通信工程學院數據結構實驗報告實驗名稱: 實驗一 約瑟夫問題學生姓名: *班 級: 20132111*班內序號: *學 號: 201321*日 期: 2014年1月4日1 實驗要求實驗題目:利用循環(huán)鏈表實現約瑟夫問題的求解。約瑟夫問題如下:已知n個人(n=1)圍坐一圓桌周圍,從1開始順序編號。從序號為1的人開始報數,順時針數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規(guī)則重復下去,直到所有人全部出列。請問最后一個出列的人的編號。實驗目的:熟悉C+語言的基本編程方法,掌握集成編譯環(huán)境的調試方法學習指針、模板類、異常處理的使用掌握線性表的操作的實現方法學習使用線性表解決實際問題的能力2. 程序分析2.1 存儲結構 采用單循環(huán)鏈表實現約瑟夫問題的求解單循環(huán)鏈表示意圖2.2關鍵算法分析1、關鍵算法首先通過尾插法建立單循環(huán)鏈表,若只有一個人,即只刪除該人即可,若多于一人,則每查到m個人時刪除該節(jié)點,并將循環(huán)鏈表連接好,共循環(huán)n-1次,每次刪除均返回被刪數值。2、代碼詳細分析:1).指針結構、類的聲明struct Node /創(chuàng)立節(jié)點 int number; Node *next; ; class Joseph /建立Joseph類 private: int n; int m; Node *front ; /front頭指針public: Joseph(int nn, int mm); /構造函數 Joseph(); /析構函數 void Delete(); /刪除函數; 2).單循環(huán)鏈表的建立 Joseph:Joseph(int nn, int mm) /構造函數,建立循環(huán)鏈表 n=nn; m=mm; Node *p,*rear; /建立兩個指針.尾插法,p2始終指向為節(jié)點 for(int i=1; inumber=i; if(i=1) /建立空鏈表 front=p; rear=p; else rear-next=p; rear=p; rear-next=front; /尾指向頭,循環(huán)完成 算法: 設兩個指針p,rear, rear為尾節(jié)點,p為新增加的節(jié)點 若是空鏈表,則front=p; rear=p; 否則用尾插法,即p 在rear的后面,將p給rear;rear-next=p; rear=p; 頭結點賦給rear的指針域,完成循環(huán)循環(huán)次數為n, 時間復雜度為O(n)3). 輸入值異常的情況coutn;if (n1) /考慮n輸入錯誤的情況coutn值輸入錯誤endl;coutm;if (m1) /考慮m輸入異常的情況coutm值輸入錯誤endl;4).尋找一定間隔的人,并將其刪除void Joseph:Delete() /刪除人員的函數 Node *p1,*p2,*p; int count; /用來計數 p1=front; /頭結點給p1if(m=1)cout最后一個人的編號為nendl;elsecout每次被刪除的人為endl; for(int i=1; i=n-1; i+) /共刪除n-1個人,循環(huán)n-1次 count=1; while(countnext; /p1向后移 count+; coutnumbernext=p1-next; p1=p1-next; /p1后移,防止刪除后指針懸掛 delete p; coutendl; cout最后一個人的編號為 numbernext; p2始終指向第一個節(jié)點 摘鏈,將p指向待刪除的p1,即將p1元素從鏈表中摘除: 輸出p1的數值 釋放p元素:delete p;循環(huán)次數為m(n-1), 時間復雜度為O(n)5)析構函數Joseph:Joseph() /析構函數 delete front; front=NULL; 6)主函數void main() int n,m; coutn; coutm; Joseph joseph(n,m); joseph.Delete(); 3. 程序運行結果測試主函數流程: 開始等待用戶輸入輸入值是否有效 是查找刪除節(jié)點循環(huán)次數是否大于n-1次 是輸出最后一個數值結束流程圖示意圖1、 測試條件:n數量級無限制 2、 測試結論4. 總結由于是第一次做數據結構的實驗,而上學期的C+也因長時間沒有碰過而稍顯手生,在碼程序的過程中遇到了很多問題,但通過翻看教材已基本解決。約瑟夫雖然構思起來比
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 35624-2025應急避難場所通用技術要求
- 建筑設備租賃合同模板范文
- 合同履行不能時的補救措施與責任承擔
- 婚內財產分配合同模板
- 凍品經銷商代理合同
- 度臨時工勞動合同簡化版范本
- 購房法律風險防范委托合同
- 有關房屋買賣合同
- 度批發(fā)市場攤位租賃合同協議
- 停車場資產轉讓及管理合同
- 2024年山東省濟南市中考英語試題卷(含答案解析)
- 語文七年級下字帖打印版
- 自然辯證法概論(新)
- 慢阻肺的慢病管理課件
- (中職)化學分析技術項目一 走進化學分析實驗室教學課件
- 探放水工培訓教材
- 某縣某年度高標準基本農田建設項目復核報告
- 秘書實務完整版課件全套ppt教程
- 酒店電子商務全套課件
- 質量體系的職能架構
- 《旅游經濟學》全書PPT課件
評論
0/150
提交評論