版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告系 (院): 計(jì)算機(jī)科學(xué)學(xué)院 專業(yè)班級(jí): 計(jì)科11005 姓 名: 學(xué) 號(hào): 指導(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í)際問(wèn)題的具體情況,結(jié)合數(shù)據(jù)結(jié)構(gòu)課程中的基本理論和基本算法,分析并正確確定數(shù)據(jù)的邏輯結(jié)構(gòu),合理地選擇相應(yīng)的存儲(chǔ)結(jié)構(gòu),并能設(shè)計(jì)出解決問(wèn)題的有效算法。2提高程序設(shè)計(jì)和調(diào)試能力。學(xué)生通過(guò)上機(jī)實(shí)習(xí),驗(yàn)證自己設(shè)計(jì)的算法的正確性。學(xué)會(huì)有效利用基本調(diào)試方法,迅速找出程序代
2、碼中的錯(cuò)誤并且修改。3初步掌握軟件開(kāi)發(fā)過(guò)程中問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能。4訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開(kāi)發(fā)一般規(guī)范進(jìn)行軟件開(kāi)發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。5培養(yǎng)根據(jù)選題需要選擇學(xué)習(xí)書(shū)籍,查閱文獻(xiàn)資料的自學(xué)能力。二設(shè)計(jì)任務(wù)及要求根據(jù)算法與數(shù)據(jù)結(jié)構(gòu)課程的結(jié)構(gòu)體系,設(shè)計(jì)一個(gè)基于dos菜單的應(yīng)用程序。要利用多級(jí)菜單實(shí)現(xiàn)各種功能。比如,主界面是大項(xiàng),主要是學(xué)過(guò)的各章的名字諸如線性表、棧與隊(duì)列、串與數(shù)組及廣義表等,子菜單這些章中的節(jié)或者子節(jié)。要求所有子菜單退出到他的父菜單。編程實(shí)現(xiàn)時(shí),要用到c+的面向?qū)ο蟮墓δ堋? 需求分析 菜單運(yùn)用極其廣泛,應(yīng)用于各行各業(yè)。菜單運(yùn)用
3、起來(lái)極其方便。隨著社會(huì)的發(fā)展,社會(huì)的行業(yè)出現(xiàn)多樣化,也就需要各式各樣的菜單。這就需要設(shè)計(jì)人員十分精細(xì)的設(shè)計(jì)。進(jìn)一步了解算法與數(shù)據(jù)結(jié)構(gòu)課程的知識(shí)結(jié)構(gòu)體系,繪制整個(gè)課程的知識(shí)結(jié)構(gòu)邏輯示意圖,類似于:排序查找圖樹(shù)串、數(shù)組、廣義表?xiàng):完?duì)列線性表 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)最小生成樹(shù)關(guān)鍵路徑冒泡排序插入排序快速排序shell排序最短路徑矩陣乘法矩陣轉(zhuǎn)置刪除元素插入元素創(chuàng)建鏈表查找元素應(yīng)用廣義表希哈查找技術(shù)二叉搜索樹(shù)折半查找順序查找樹(shù)的表達(dá)形式huffman壓縮解壓二叉樹(shù)括號(hào)匹配進(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ù)組、廣義表”、“樹(shù)”、“圖”、“查找”、“排序”。然后要在線性表里創(chuàng)建一個(gè)子菜單實(shí)現(xiàn)“創(chuàng)建鏈表”、“插入元素”、“刪除元素”、“查找元素”的功能。并且可以退出這個(gè)子菜單回到上一級(jí)菜單。棧和隊(duì)列創(chuàng)建一個(gè)子菜單,包含進(jìn)制轉(zhuǎn)換和括號(hào)匹配的功能。進(jìn)制轉(zhuǎn)換里又分為十進(jìn)制轉(zhuǎn)八進(jìn)制、十進(jìn)制轉(zhuǎn)二進(jìn)制。串、數(shù)組、廣義表里可以創(chuàng)建子菜單包含矩陣乘法、矩陣轉(zhuǎn)置的功能。樹(shù)里創(chuàng)建子菜單,有樹(shù)的創(chuàng)建、先序遍歷、中序遍歷、后序遍歷、樹(shù)的高度、葉子數(shù)這幾個(gè)選項(xiàng)。這些子菜單都能退出回到上一級(jí)菜單。四總體設(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ù)所繪制的知識(shí)結(jié)構(gòu)圖,設(shè)計(jì)dos菜單。例如在此基礎(chǔ)上,所有菜單類都繼承這個(gè)類,以此來(lái)實(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);和基類基本沒(méi)有區(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 樹(shù) 5 圖 6 查找 *n;cout * 7 排序 8 退出 *n;coutshowmenu();通過(guò)構(gòu)造函數(shù),將當(dāng)前菜單對(duì)象作為子菜單的父菜單,以后退出子菜單時(shí),子菜單將將顯示權(quán)讓給其父菜單:#define exit_submenu tmp=m_pparent;delete pbase;pba
7、se=tmp;pbase-showmenu();這樣設(shè)計(jì),無(wú)論有多少級(jí)菜單,其編程風(fēng)格都是一樣的,只需管理當(dāng)前的菜單交接,而無(wú)需知道它是從哪兒來(lái)的。還定義了線性表、棧和隊(duì)列、數(shù)組串和廣義表、樹(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();樹(shù)的類定義如下: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;每一級(jí)的菜單函數(shù)都可以根據(jù)以上類的模板來(lái)寫(xiě)。方便且不容易遺漏出錯(cuò)。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 括號(hào)匹配 2 進(jìn)制轉(zhuǎn)換 3 迷宮問(wèn)題 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)用菜單對(duì)象。bool main_exit;cmenubase*pbase;list*plist;void main()mai
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 武漢體育學(xué)院體育科技學(xué)院《智能制造技術(shù)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版企業(yè)財(cái)務(wù)數(shù)據(jù)保密合作合同版B版
- 2024版影視作品制作與發(fā)行協(xié)議
- 2024自然人互貸現(xiàn)金協(xié)議樣式大全版B版
- 2024門店勞動(dòng)法執(zhí)行標(biāo)準(zhǔn)勞動(dòng)合同范本解析3篇
- 二零二五年度鋼筋班組勞務(wù)分包安全生產(chǎn)責(zé)任合同3篇
- 專業(yè)測(cè)量員招聘協(xié)議樣本2024
- 二零二五版保險(xiǎn)資金股權(quán)質(zhì)押反擔(dān)保貸款合同3篇
- 二零二五年度床上用品原材料進(jìn)口與加工合同3篇
- 二零二五版人工智能應(yīng)用第三方履約擔(dān)保協(xié)議3篇
- 腦血管疾病三級(jí)預(yù)防
- HSK標(biāo)準(zhǔn)教程5上-課件-L1
- 人教版五年級(jí)下冊(cè)數(shù)學(xué)預(yù)習(xí)單、學(xué)習(xí)單、檢測(cè)單
- JC-T 746-2023 混凝土瓦標(biāo)準(zhǔn)規(guī)范
- 如何落實(shí)管業(yè)務(wù)必須管安全
- 四年級(jí)上冊(cè)三位數(shù)乘除兩位數(shù)計(jì)算題
- 《水電工程招標(biāo)設(shè)計(jì)報(bào)告編制規(guī)程》
- 2023年甘肅蘭州中考道德與法治試題及答案
- 生產(chǎn)工廠管理手冊(cè)
- 項(xiàng)目工地春節(jié)放假安排及安全措施
- 印染廠安全培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論