課程設(shè)計(jì)報(bào)告模板張苗.doc
《課程設(shè)計(jì)報(bào)告模板張苗.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《課程設(shè)計(jì)報(bào)告模板張苗.doc(19頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
內(nèi)蒙古科技大學(xué) 本科生課程設(shè)計(jì)說(shuō)明書 題 目:C語(yǔ)言課程設(shè)計(jì) —— 圖的遍歷 學(xué)生姓名:張苗 學(xué) 號(hào):1376807337 專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí):3班 指導(dǎo)教師:周李涌 內(nèi)蒙古科技大學(xué)課程設(shè)計(jì)任務(wù)書 課程名稱 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 設(shè)計(jì)題目 圖的遍歷 指導(dǎo)教師 周李涌 時(shí)間 2013年秋學(xué)期第15周至第19周 一、教學(xué)要求 1. 掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力 2. 初步掌握軟件開發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能 3. 提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力 4. 訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng) 二、設(shè)計(jì)資料及參數(shù) 每個(gè)學(xué)生在教師提供的課程設(shè)計(jì)題目中任意選擇一題,獨(dú)立完成,題目選定后不可更換。 圖的遍歷 以數(shù)組表示法或鄰接表表示圖,在此基礎(chǔ)上實(shí)現(xiàn)對(duì)圖的遍歷。 要求設(shè)計(jì)類(或類模板)來(lái)描述圖,包含必要的構(gòu)造函數(shù)和析構(gòu)函數(shù),以及其他能夠完成如下功能的成員函數(shù): v 輸入圖、輸出圖 v 求圖中頂點(diǎn)V的第一個(gè)鄰接點(diǎn) v 求圖中頂點(diǎn)V的下一個(gè)鄰接點(diǎn) v 深度優(yōu)先遍歷圖 v 廣度優(yōu)先遍歷圖 并設(shè)計(jì)主函數(shù)測(cè)試該類(或類模板)。 三、設(shè)計(jì)要求及成果 1. 分析課程設(shè)計(jì)題目的要求 2. 寫出詳細(xì)設(shè)計(jì)說(shuō)明 3. 編寫程序代碼,調(diào)試程序使其能正確運(yùn)行 4. 設(shè)計(jì)完成的軟件要便于操作和使用 5. 設(shè)計(jì)完成后提交課程設(shè)計(jì)報(bào)告 四、進(jìn)度安排 資料查閱與討論(1天) 系統(tǒng)分析(2天) 系統(tǒng)的開發(fā)與測(cè)試(5天) 編寫課程設(shè)計(jì)說(shuō)明書和驗(yàn)收(2天) 五、評(píng)分標(biāo)準(zhǔn) 1. 根據(jù)平時(shí)上機(jī)考勤、表現(xiàn)和進(jìn)度,教師將每天點(diǎn)名和檢查 2. 根據(jù)課程設(shè)計(jì)完成情況,必須有可運(yùn)行的軟件。 3. 根據(jù)課程設(shè)計(jì)報(bào)告的質(zhì)量,如有雷同,則所有雷同的所有人均判為不及格。 4. 根據(jù)答辯的情況,應(yīng)能夠以清晰的思路和準(zhǔn)確、簡(jiǎn)練的語(yǔ)言敘述自己的設(shè)計(jì)和回答教師的提問(wèn) 六、建議參考資料 1.《數(shù)據(jù)結(jié)構(gòu) (C語(yǔ)言版)》嚴(yán)蔚敏、吳偉民 主編 清華大學(xué)出版社 2004.11 2.《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)案例精編(用C/C++描述)》,李建學(xué) 等 編著,清華大學(xué)出版社 2007.2 3.《數(shù)據(jù)結(jié)構(gòu):用面向?qū)ο蠓椒ㄅcC++語(yǔ)言描述》,殷人昆 主編,清華大學(xué)出版社 2007.6 目 錄 內(nèi)蒙古科技大學(xué)課程設(shè)計(jì)任務(wù)書 I 第一章 需求分析 3 1.1 引言 3 1.2 任務(wù)概述 3 1.3 數(shù)據(jù)描述 3 1.4 功能需求 3 1.5 性能需求 3 1.6 運(yùn)行需求 4 1.7 任務(wù)計(jì)劃 4 第二章 概要設(shè)計(jì) 5 2.1 總體設(shè)計(jì) 5 2.2 數(shù)據(jù)類型設(shè)計(jì)(或數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)) 5 2.3 接口設(shè)計(jì) //函數(shù)聲明 5 2.4 運(yùn)行界面設(shè)計(jì) 5 第三章 詳細(xì)設(shè)計(jì) 7 3.1 輸入模塊設(shè)計(jì) 7 3.2 輸出模塊設(shè)計(jì) 7 3.3 查找模塊設(shè)計(jì) 7 3.4 排序模塊設(shè)計(jì) 7 3.5 保存及讀取模塊設(shè)計(jì) 7 第四章 測(cè)試分析 8 4.1 測(cè)試程序執(zhí)行情況 8 4.2 出現(xiàn)的問(wèn)題和解決的方法 8 第五章 用戶手冊(cè)(可選) 9 5.1 使用說(shuō)明 9 5.2 運(yùn)行說(shuō)明 9 第六章 課程設(shè)計(jì)總結(jié) 10 附錄:程序代碼 11 參考文獻(xiàn) 12 致謝 13 第一章 需求分析 1.1 引言 本學(xué)期我們對(duì)《數(shù)據(jù)結(jié)構(gòu)》這門課程進(jìn)行了學(xué)習(xí)。這門課程是一門實(shí)踐性非常強(qiáng)的課程,為了讓大家更好地理解與運(yùn)用所學(xué)知識(shí),提高動(dòng)手能力,我們進(jìn)行了此次課程設(shè)計(jì)實(shí)習(xí)。這次課程設(shè)計(jì)不但要求實(shí)習(xí)者掌握《數(shù)據(jù)結(jié)構(gòu)》中的各方面知識(shí),還要求實(shí)習(xí)者具備一定的C語(yǔ)言基礎(chǔ)和編程能力。具體說(shuō)來(lái),這次課程設(shè)計(jì)主要有兩大方面目的。一是讓實(shí)習(xí)者通過(guò)實(shí)習(xí)掌握《數(shù)據(jù)結(jié)構(gòu)》中的知識(shí)。對(duì)于《圖的存儲(chǔ)與遍歷》這一課題來(lái)說(shuō),所要求掌握的數(shù)據(jù)結(jié)構(gòu)知識(shí)主要有:圖的鄰接表存貯結(jié)構(gòu)、隊(duì)列的基本運(yùn)算實(shí)現(xiàn)、鄰接表的算法實(shí)現(xiàn)、圖的廣度優(yōu)先搜索周游算法實(shí)現(xiàn)、圖的深度優(yōu)先搜索周游算法實(shí)現(xiàn)。二是通過(guò)實(shí)習(xí)鞏固并提高實(shí)習(xí)者的C語(yǔ)言知識(shí),并初步了解Visual C++的知識(shí),提高其編程能力與專業(yè)水平。 1.2 任務(wù)概述 (1) 輸入的形式和輸入值的范圍; (2) 輸出的形式; (3) 程序所能達(dá)到的功能; (4) 測(cè)試數(shù)據(jù):包括正確的輸入及其輸出結(jié)果和含有錯(cuò)誤的輸入及其輸出結(jié)果。 1.3 數(shù)據(jù)描述 例子:輸入頂點(diǎn)數(shù)和邊數(shù):4 5 接著輸入頂點(diǎn)字符串:1 2 3 4 1.4 功能需求 以數(shù)組表示法或鄰接表表示圖,在此基礎(chǔ)上實(shí)現(xiàn)對(duì)圖的遍歷。 要求設(shè)計(jì)類(或類模板)來(lái)描述圖,包含必要的構(gòu)造函數(shù)和析構(gòu)函數(shù),以及其他能夠完成如下功能的成員函數(shù): v 輸入圖、輸出圖 v 求圖中頂點(diǎn)V的第一個(gè)鄰接點(diǎn) v 求圖中頂點(diǎn)V的下一個(gè)鄰接點(diǎn) v 深度優(yōu)先遍歷圖 v 廣度優(yōu)先遍歷圖 并設(shè)計(jì)主函數(shù)測(cè)試該類(或類模板)。 1.5 運(yùn)行需求 在codeblock上運(yùn)行,c語(yǔ)言程序 1.6 任務(wù)計(jì)劃 我們需要先進(jìn)行總體設(shè)計(jì),有一個(gè)大致的方向,然后我們需要把數(shù)據(jù)的結(jié)構(gòu)類型確定下來(lái),第三步要把函數(shù)接口設(shè)計(jì)出來(lái),第四步把運(yùn)行界面設(shè)計(jì),我就把大致程序框架做了出來(lái)。 我們接下來(lái)就應(yīng)該進(jìn)行詳細(xì)的設(shè)計(jì)來(lái)完成所需要的功能了 第二章 概要設(shè)計(jì) 2.1 總體設(shè)計(jì) 圖的實(shí)現(xiàn) 深度優(yōu)先遍歷 廣度優(yōu)先遍歷 輸出圖 輸入圖 創(chuàng)建圖 訪問(wèn)下一個(gè)鄰接頂點(diǎn) 訪問(wèn)鄰接頂點(diǎn) 2.2 數(shù)據(jù)類型設(shè)計(jì)(或數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)) 1.定義結(jié)點(diǎn)結(jié)構(gòu)類型 typedef struct node{ int adjvex; struct node *next; }EdgeNode; 2.定義虛擬結(jié)點(diǎn)結(jié)構(gòu)類型 typedef struct vnode{ char vertex; EdgeNode *firstedge; }VertexNode; 3.鄰接表類型 typedef struct { AdjList adjlist; int n,e; } ALGraph; 2.3 接口設(shè)計(jì) 可參考用以下表格形式: 表2.1:函數(shù)列表 函數(shù)名 函數(shù)格式 //即函數(shù)首部 函數(shù)功能 CreatALGraph 創(chuàng)建圖 DFS 深度優(yōu)先遍歷 BFS 廣度優(yōu)先遍歷 第三章 詳細(xì)設(shè)計(jì) 3.1圖的存儲(chǔ) 本課題要求采取鄰接表的存儲(chǔ)結(jié)構(gòu)。鄰接表是一種鏈?zhǔn)降拇鎯?chǔ)結(jié)構(gòu),在鄰接表中,對(duì)圖中每個(gè)頂點(diǎn)建立一個(gè)單鏈表,第i個(gè)單鏈表中的結(jié)點(diǎn)表示依附于頂點(diǎn)Vi的邊(對(duì)有向圖是以頂點(diǎn)Vi為尾的?。?。每個(gè)結(jié)點(diǎn)由3個(gè)域組成,其中鄰接點(diǎn)域(adjvex)指示與頂點(diǎn)Vi鄰接的點(diǎn)在圖中的位置,鏈域(nextarc)指示下一條邊或弧的結(jié)點(diǎn);數(shù)據(jù)域(info)存儲(chǔ)和邊或弧相關(guān)的信息,如權(quán)值等。 所以一開始必須先定義鄰接表的邊結(jié)點(diǎn)類型以及鄰接表類型,并對(duì)鄰接表進(jìn)行初始化,然后根據(jù)所輸入的相關(guān)信息,包括圖的頂點(diǎn)數(shù)、邊數(shù)、是否為有向,以及各條邊的起點(diǎn)與終點(diǎn)序號(hào),建立圖的鄰接表。此時(shí)要分兩種情況:有向圖與無(wú)向圖。對(duì)于無(wú)向圖,一條邊的兩的個(gè)頂點(diǎn),互為鄰接點(diǎn),所以在存儲(chǔ)時(shí),應(yīng)向起點(diǎn)的單鏈表表頭插入一邊結(jié)點(diǎn),即終點(diǎn)。同時(shí)將終點(diǎn)的單鏈表表頭插入一邊結(jié)點(diǎn),即起點(diǎn)。對(duì)于有向圖,只能向起點(diǎn)的單鏈表的表頭插入一個(gè)邊結(jié)點(diǎn),即終點(diǎn)。但不能反過(guò)來(lái)。至于鄰接表的輸出,由于不了解C++中的繪圖操作,故采用for語(yǔ)句輸出各結(jié)點(diǎn),并配合一些符號(hào)完成鄰接表的輸出。 3.2 圖的遍歷 3.2.1 圖的深度優(yōu)先遍歷 假設(shè)初始狀態(tài)是圖中所有頂點(diǎn)未曾被訪問(wèn),深度優(yōu)先遍歷可以從圖的初始點(diǎn)出發(fā),訪問(wèn)初始點(diǎn),然后依次從v未被訪問(wèn)的鄰接點(diǎn)出發(fā)深度優(yōu)先遍歷圖,直至圖中所有和v有路徑相通的頂點(diǎn)都被訪問(wèn)到;若此時(shí)仍有頂點(diǎn)未被訪問(wèn)到,則從另一個(gè)未被訪問(wèn)的頂點(diǎn)出發(fā),重復(fù)上述過(guò)程,直至所有點(diǎn)都被訪問(wèn)到為止。這是一個(gè)遞歸的過(guò)程。所以在實(shí)現(xiàn)深度優(yōu)先遍歷的過(guò)程中必須遞歸調(diào)用深度優(yōu)先搜索函數(shù)。而且在深度優(yōu)先搜索函數(shù)中必須設(shè)一標(biāo)志數(shù)組以標(biāo)記結(jié)點(diǎn)是否被訪問(wèn)。 具體過(guò)程應(yīng)為:先訪問(wèn)初始點(diǎn)Vi,并標(biāo)志其已被訪問(wèn)。此時(shí)定義一指向邊結(jié)點(diǎn)的指針p,并建立一個(gè)while()循環(huán),以指針?biāo)笇?duì)象不為空為控制條件,當(dāng)Vi的鄰接點(diǎn)未被訪問(wèn)時(shí),遞歸調(diào)用深度優(yōu)先遍歷函數(shù)訪問(wèn)之。然后將p指針指向下一個(gè)邊結(jié)點(diǎn)。這樣就可以完成圖的深度優(yōu)先遍歷了。 void DFSM(ALGraph *G,int i) { EdgeNode *p; printf("%c ",G->adjlist[i].vertex); visited[i]=TRUE; p=G->adjlist[i].firstedge; while(p) { DFSM(G,p->adjvex); p=p->next; } } void DFS(ALGraph *G) { int i; for(i=0;i- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 課程設(shè)計(jì) 報(bào)告 模板
鏈接地址:http://www.szxfmmzy.com/p-8383808.html