




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告系 (院): 計(jì)算機(jī)科學(xué)學(xué)院 專業(yè)班級: 計(jì)科11005 姓 名: 學(xué) 號: 指導(dǎo)教師: 設(shè)計(jì)時(shí)間: 2012.6.11 - 2012.6.18 設(shè)計(jì)地點(diǎn): 12教機(jī)房 目錄一、課程設(shè)計(jì)目的2二、設(shè)計(jì)任務(wù)及要求2三、需求分析2四、總體設(shè)計(jì)4五、詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)含代碼和實(shí)現(xiàn)界面8六、課程設(shè)計(jì)小結(jié)15一設(shè)計(jì)目的1能根據(jù)實(shí)際問題的具體情況,結(jié)合數(shù)據(jù)結(jié)構(gòu)課程中的基本理論和基本算法,分析并正確確定數(shù)據(jù)的邏輯結(jié)構(gòu),合理地選擇相應(yīng)的存儲結(jié)構(gòu),并能設(shè)計(jì)出解決問題的有效算法。2提高程序設(shè)計(jì)和調(diào)試能力。學(xué)生通過上機(jī)實(shí)習(xí),驗(yàn)證自己設(shè)計(jì)的算法的正確性。學(xué)會有效利用基本調(diào)試方法,迅速找出程序代
2、碼中的錯誤并且修改。3初步掌握軟件開發(fā)過程中問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等基本方法和技能。4訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。5培養(yǎng)根據(jù)選題需要選擇學(xué)習(xí)書籍,查閱文獻(xiàn)資料的自學(xué)能力。二設(shè)計(jì)任務(wù)及要求根據(jù)算法與數(shù)據(jù)結(jié)構(gòu)課程的結(jié)構(gòu)體系,設(shè)計(jì)一個(gè)基于dos菜單的應(yīng)用程序。要利用多級菜單實(shí)現(xiàn)各種功能。比如,主界面是大項(xiàng),主要是學(xué)過的各章的名字諸如線性表、棧與隊(duì)列、串與數(shù)組及廣義表等,子菜單這些章中的節(jié)或者子節(jié)。要求所有子菜單退出到他的父菜單。編程實(shí)現(xiàn)時(shí),要用到c+的面向?qū)ο蟮墓δ堋? 需求分析 菜單運(yùn)用極其廣泛,應(yīng)用于各行各業(yè)。菜單運(yùn)用
3、起來極其方便。隨著社會的發(fā)展,社會的行業(yè)出現(xiàn)多樣化,也就需要各式各樣的菜單。這就需要設(shè)計(jì)人員十分精細(xì)的設(shè)計(jì)。進(jìn)一步了解算法與數(shù)據(jù)結(jié)構(gòu)課程的知識結(jié)構(gòu)體系,繪制整個(gè)課程的知識結(jié)構(gòu)邏輯示意圖,類似于:排序查找圖樹串、數(shù)組、廣義表?xiàng):完?duì)列線性表 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)最小生成樹關(guān)鍵路徑冒泡排序插入排序快速排序shell排序最短路徑矩陣乘法矩陣轉(zhuǎn)置刪除元素插入元素創(chuàng)建鏈表查找元素應(yīng)用廣義表希哈查找技術(shù)二叉搜索樹折半查找順序查找樹的表達(dá)形式huffman壓縮解壓二叉樹括號匹配進(jìn)制轉(zhuǎn)換十進(jìn)制轉(zhuǎn)八進(jìn)制十進(jìn)制轉(zhuǎn)二進(jìn)制退出解壓文件壓縮文件根據(jù)算法與數(shù)據(jù)及結(jié)構(gòu)的課程安排,可以設(shè)計(jì)如上所示的菜單。在主菜單里可以有“線性表”
4、、“棧和隊(duì)列”、“串、數(shù)組、廣義表”、“樹”、“圖”、“查找”、“排序”。然后要在線性表里創(chuàng)建一個(gè)子菜單實(shí)現(xiàn)“創(chuàng)建鏈表”、“插入元素”、“刪除元素”、“查找元素”的功能。并且可以退出這個(gè)子菜單回到上一級菜單。棧和隊(duì)列創(chuàng)建一個(gè)子菜單,包含進(jìn)制轉(zhuǎn)換和括號匹配的功能。進(jìn)制轉(zhuǎn)換里又分為十進(jìn)制轉(zhuǎn)八進(jìn)制、十進(jìn)制轉(zhuǎn)二進(jìn)制。串、數(shù)組、廣義表里可以創(chuàng)建子菜單包含矩陣乘法、矩陣轉(zhuǎn)置的功能。樹里創(chuàng)建子菜單,有樹的創(chuàng)建、先序遍歷、中序遍歷、后序遍歷、樹的高度、葉子數(shù)這幾個(gè)選項(xiàng)。這些子菜單都能退出回到上一級菜單。四總體設(shè)計(jì)設(shè)計(jì)菜單類根據(jù)實(shí)際使用,我們知道菜單類的主要功能就是顯示菜單項(xiàng)與響應(yīng)用戶選項(xiàng)。所以我們可以這樣設(shè)計(jì)
5、一個(gè)菜單基類:class cmenubasepublic:cmenubase(void);cmenubase(void);virtual void showmenu()=0;virtual void event(int evenid)=0;protected:cmenubase* m_pparent;根據(jù)所繪制的知識結(jié)構(gòu)圖,設(shè)計(jì)dos菜單。例如在此基礎(chǔ)上,所有菜單類都繼承這個(gè)類,以此來實(shí)現(xiàn)“顯示”與“響應(yīng)事件”的多態(tài)性。例如,主菜單類的設(shè)計(jì)為:class cmainmenu:public cmenubasepublic:cmainmenu(void);cmainmenu(void);virtu
6、al void showmenu();virtual void event(int evenid);和基類基本沒有區(qū)別。其實(shí)現(xiàn)可以為void cmainmenu:showmenu()coutn *數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)*n;cout * 1 線性表 2 棧與隊(duì)列 3 串、數(shù)組和廣義表 *n;cout * 4 樹 5 圖 6 查找 *n;cout * 7 排序 8 退出 *n;coutshowmenu();通過構(gòu)造函數(shù),將當(dāng)前菜單對象作為子菜單的父菜單,以后退出子菜單時(shí),子菜單將將顯示權(quán)讓給其父菜單:#define exit_submenu tmp=m_pparent;delete pbase;pba
7、se=tmp;pbase-showmenu();這樣設(shè)計(jì),無論有多少級菜單,其編程風(fēng)格都是一樣的,只需管理當(dāng)前的菜單交接,而無需知道它是從哪兒來的。還定義了線性表、棧和隊(duì)列、數(shù)組串和廣義表、樹等模板類。線性表的類如下:class clistmenu:public cmenubasepublic:clistmenu(cmenubase*);clistmenu(void);virtual void showmenu();virtual void event(int evenid);protected:void createlist_l(int n);status listinsert_l(int
8、i,elemtype e);status listout_l();status listdelete_l(int i,elemtype &e);status getelem_l(int i,elemtype &e);linklist l;棧和隊(duì)列的類如下class cstackmenu:public cmenubasechar name20;public:cstackmenu(cmenubase*);cstackmenu(void)virtual void showmenu();virtual void event(int evenid);protected:status initstack(
9、);status push (selemtype e);status pop(selemtype &e);void kuohao();sqstack s;進(jìn)制轉(zhuǎn)換的類定義如下class cjinzhimenu:public cmenubasechar name20;public:cjinzhimenu(cmenubase*);cjinzhimenu(void)virtual void showmenu();virtual void event(int evenid);protected:void conversion_8();void conversion_2();status initsta
10、ck();status push (jelemtype x);status pop(jelemtype &x);jsqstack s;數(shù)組的類定義如下:class cshuzumenu:public cmenubasechar name200;public:cshuzumenu(cmenubase*);cshuzumenu(void)virtual void showmenu();virtual void event(int evenid);protected:status creat_2(rlsmatrix &m,int x,int y);status putout_2(rlsmatrix
11、&m);status multsmatrix(rlsmatrix &m, rlsmatrix & n, rlsmatrix &q);status fasttransposesmatrix(tsmatrix &m, tsmatrix &t);void zhuanzhi();void chengfa();樹的類定義如下:class cshumenu:public cmenubasechar name20;public:cshumenu(cmenubase*);cshumenu(void)virtual void showmenu();virtual void event(int evenid);p
12、rotected:statuss visit(telemtype e);statuss createbitree(bitree &t1);statuss xianordertraverse(bitree t1);statuss zhongordertraverse(bitree t1);statuss houordertraverse(bitree t1);int depth(bitree t1);int countleaf(bitree t1);bitree t;每一級的菜單函數(shù)都可以根據(jù)以上類的模板來寫。方便且不容易遺漏出錯。5 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)線性表菜單顯示如下:線性鏈表菜單的設(shè)計(jì)則可能為
13、其實(shí)現(xiàn)則類似于clistmenu:clistmenu(cmenubase*parent)m_pparent=parent;void clistmenu:showmenu()cout *線性表*n;cout * 1 創(chuàng)建線性表 2 插入元素 *n;cout * 3 查找元素 4 刪除元素 *n;cout * 5 瀏覽 6 退出 *n;cout *n;void clistmenu:event(int evenid)cmenubase*tmp;switch(evenid)case id_create_list:coutn;list.createlist_l(n);cout當(dāng)前鏈表元素為endl;li
14、st.listout_l();system(pause);break;case id_list_insert:couti;coute; list.listinsert_l(i,e);cout當(dāng)前鏈表元素為endl;list.listout_l();system(pause);break;case id_list_show:list.listout_l();system(pause);break;case id_list_return:exit_submenubreak;case id_list_delete:couti;list.listdelete_l( i,e);cout當(dāng)前鏈表元素為en
15、dl;list.listout_l();system(pause);break;case id_list_find:couti;list.getelem_l(i,e);system(pause); break;default:invalidateaction();break;線性鏈表各功能具體實(shí)現(xiàn)代碼如下:創(chuàng)建鏈表:void clistmenu:createlist_l(int n)int i;linklist p; l=(linklist)malloc(sizeof(lnode); l-next =null; for(i=n;i0;i-) p=(linklist)malloc(sizeof(
16、lnode); cinp-data ; p-next = l-next;l-next = p;界面如下:查找元素:status clistmenu:getelem_l(int i,elemtype &e)int j;linklist p; p=l-next;j=1; while(p&jnext; j+; if(!p|ji) return error; e = p-data ;coutdata endl; return ok;插入元素:status clistmenu:listinsert_l(int i,elemtype e)linklist p,s; p=l;int j=0; while(p
17、&jnext;+j; if(!p|ji)return 0; s=(linklist)malloc(sizeof(lnode); s-data =e;s-next=p-next;p-next=s; return 1;刪除元素:status clistmenu:listdelete_l(int i,elemtype &e)linklist p,q;int j; p=l;j=0; while(p-next&jnext;j+; if(!(p-next)|ji-1)return 0; q=p-next;p-next=q-next;e=q-data;free(q); return 1;瀏覽所有元素:sta
18、tus clistmenu:listout_l()linklist p;p=l-next ;while(p) coutdata next ;return 0;棧和隊(duì)列菜單顯示界面如下:棧和隊(duì)列的菜單設(shè)計(jì)如下:其菜單函數(shù)為:void cstackmenu:showmenu()system(cls);/清屏cout *棧和隊(duì)列*n;cout * 1 括號匹配 2 進(jìn)制轉(zhuǎn)換 3 迷宮問題 4退出 *n;cout *n;cstackmenu stack(pbase);void cstackmenu:event(int evenid)cmenubase*tmp;switch(evenid) case i
19、d_kuo_hao: stack.kuohao();system(pause);break; case id_jin_zhi: submenu(cjinzhimenu);break;case id_mi_gong: cout此小項(xiàng)未完成endl;case id_stack_return: exit_submenu break;default:invalidateaction();break;其他項(xiàng)目做法與線性鏈表類似。由于字?jǐn)?shù)有限,其他項(xiàng)目功能的具體實(shí)現(xiàn)就不一一介紹了。我們這里定義了一些菜單常量,其定義可以放在一個(gè)resource.h文件中:#define id_list 1#define i
20、d_stack_queue 2#define id_str_arr_gl 3#define id_tree 4#define id_graph 5#define id_search 6#define id_sort 7#define id_exit 8#define id_create_list 1#define id_list_insert 2#define id_list_find 3#define id_list_delete 4#define id_list_show 5#define id_list_return 6#define id_kuo_hao 1 #define id_ji
21、n_zhi 2#define id_mi_gong 3#define id_stack_return 4#define id_ba 1#define id_er 2#define id_jinzhi_return 3#define id_cheng_fa 1#define id_zhuan_zhi 2#define id_shuzu_return 3#define id_chuang_shu 1#define id_xian 2#define id_zhong 3#define id_hou 4#define id_ye_zi_shu 5#define id_jiao_huan 6#define id_gao_du 7#define id_shu_return 8#define submenu(submenu )tmp=pbase;pbase=new submenu(tmp);#define exit_submenu tmp=m_pparent;delete pbase;pbase=tmp;void invalidateaction();在主函數(shù)中應(yīng)用菜單對象。bool main_exit;cmenubase*pbase;list*plist;void main()mai
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)生換位思考課件
- 現(xiàn)代物流技術(shù)與管理優(yōu)化的前沿探索
- 胸腔積液穿刺護(hù)理
- 現(xiàn)代商業(yè)地產(chǎn)的綠色設(shè)計(jì)與節(jié)能技術(shù)整合
- 雜志dm合同范本
- 科技與舒適并重的電競酒店客房設(shè)計(jì)
- 社交媒體營銷策略個(gè)人品牌塑造全攻略
- 科技引領(lǐng)的電子商務(wù)與綠色環(huán)保物流的結(jié)合
- 沙石裝卸合同范本
- 碳中和路徑下的企業(yè)社會責(zé)任構(gòu)建
- 社會階層與教育選擇行為分析-深度研究
- 社會工作行政(第三版)課件匯 時(shí)立榮 第6-11章 項(xiàng)目管理- 社會工作行政的挑戰(zhàn)、變革與數(shù)字化發(fā)展
- 學(xué)校小賣部承包合同范文
- 2025年湘潭醫(yī)衛(wèi)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年常考版參考題庫含答案解析
- 2025年湖南鐵道職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- DB 63- T993-2011 三江源生態(tài)監(jiān)測技術(shù)規(guī)范
- 北京市東城區(qū)2025年公開招考539名社區(qū)工作者高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025福建福州地鐵集團(tuán)限公司運(yùn)營分公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025至2030年中國電子護(hù)眼臺燈數(shù)據(jù)監(jiān)測研究報(bào)告
- 兒童睡眠障礙治療
- 2025年浙江省溫州樂清市融媒體中心招聘4人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
評論
0/150
提交評論