數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告雙鏈表創(chuàng)建與演示設(shè)計(jì)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告雙鏈表創(chuàng)建與演示設(shè)計(jì)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告雙鏈表創(chuàng)建與演示設(shè)計(jì)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告雙鏈表創(chuàng)建與演示設(shè)計(jì)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告雙鏈表創(chuàng)建與演示設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、課 程 設(shè) 計(jì) 報(bào) 告 課程名稱課程名稱 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) 課題名稱課題名稱 雙鏈表創(chuàng)建演示雙鏈表創(chuàng)建演示 專專 業(yè)業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)計(jì)算機(jī)科學(xué)與技術(shù) 班班 級(jí)級(jí) 計(jì)算機(jī)計(jì)算機(jī) 0703 學(xué)學(xué) 號(hào)號(hào) 姓姓 名名 指導(dǎo)教師指導(dǎo)教師 2009 年年 11 月月 7 日日 課 程 設(shè) 計(jì) 任 務(wù) 書 課程名稱 數(shù)據(jù)結(jié)構(gòu) 課 題 雙鏈表創(chuàng)建演示 專業(yè)班級(jí) 學(xué)生姓名 張 理 學(xué) 號(hào) 指導(dǎo)老師 審 批 1 1 設(shè)設(shè)計(jì)計(jì)內(nèi)內(nèi)容容與與設(shè)設(shè)計(jì)計(jì)要要求求 1.11.1 設(shè)計(jì)內(nèi)容設(shè)計(jì)內(nèi)容 1.1.11.1.1 算術(shù)算術(shù) 2424 游戲演示游戲演示 由系統(tǒng)隨機(jī)生成 4 張撲克牌,用戶利用撲克牌的數(shù)字及運(yùn)算符號(hào)“+”

2、 、 “” 、 “*” 、 “/”及括號(hào)“(”和“) ”從鍵盤上輸入一個(gè)計(jì)算表達(dá)式,系統(tǒng) 運(yùn)行后得出計(jì)算結(jié)果,如果結(jié)果等于 24,則顯示“congratulation!” ,否則 顯示“incorrect!” 設(shè)計(jì)思路:從鍵盤輸入中綴表達(dá)式,然后將中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá) 式,利用后綴表達(dá)式求值。 1.1.21.1.2 迷宮探索迷宮探索 隨機(jī)生成一個(gè)迷宮圖,迷宮大小為 n*n,n 預(yù)定義為常數(shù),修改 n 的值可 以改變迷宮的大小。用白色表示可走的路,藍(lán)色表示墻壁不可以通過(guò)。系統(tǒng) 設(shè)計(jì)兩種運(yùn)行方式:一種是系統(tǒng)自動(dòng)探索(用遞歸方法實(shí)現(xiàn)) ;另一種是由人 工操作探索通路。 設(shè)計(jì)思路:程序首先要考慮迷

3、宮的表示,這是一個(gè)二維關(guān)系圖,所以可 選擇二維數(shù)組來(lái)存儲(chǔ)。數(shù)組元素只有兩種值 0 和 1,分別代表通路和墻壁。圖 形的顯示可以根據(jù)數(shù)組元素的值來(lái)確定。如果是人工探索,則依據(jù)按鍵來(lái)確 定探索物的位置坐標(biāo),利用循環(huán)語(yǔ)句實(shí)現(xiàn)。如果是系統(tǒng)自動(dòng)探索,可采用遞 歸算法實(shí)現(xiàn)。 1.1.31.1.3 二叉樹(shù)遍歷演示二叉樹(shù)遍歷演示 演示遍歷二叉樹(shù)的過(guò)程,所以首先建立二叉樹(shù),并用圖形顯示出樹(shù)的形 狀。建立的過(guò)程是采用前序便利的方法來(lái)創(chuàng)建,設(shè)計(jì)兩種生成樹(shù)的方式:一 種是系統(tǒng)隨機(jī)生成,另一種是人工輸入。考慮到屏幕界面的有限性,限定二 叉樹(shù)不超過(guò) 5 層,最多 26 個(gè)字符,輸入字符小數(shù)點(diǎn)“.”代表 null。初始樹(shù)

4、為某種顏色的結(jié)點(diǎn),三種情況的遍歷采用填充另外一種醒目的顏色,來(lái)表示 當(dāng)前遍歷的結(jié)點(diǎn),同時(shí)顯示該結(jié)點(diǎn)的訪問(wèn)序號(hào)。同時(shí)在遍歷的過(guò)程中在遍歷 圖形的下方顯示出遍歷序列。 1.1.41.1.4 數(shù)組應(yīng)用數(shù)組應(yīng)用 按照行優(yōu)先順序?qū)⒂脩綦S機(jī)輸入的數(shù)據(jù)建成 2 維數(shù)組并以圖形方式逐步 顯示出來(lái),然后再按照列優(yōu)先順序以圖形方式逐步輸出相應(yīng)數(shù)組。 1.1.51.1.5 拓?fù)渑判蜓菔就負(fù)渑判蜓菔?演示拓?fù)渑判虻倪^(guò)程。按照有向圖給出的次序關(guān)系,將圖中頂點(diǎn)排成一 個(gè)線性序列,對(duì)于有向圖中沒(méi)有限定次序關(guān)系的頂點(diǎn),則可以人為加上任意 的次序關(guān)系。要求每輸出一個(gè)頂點(diǎn)后就演示從圖中刪去此頂點(diǎn)以及所有以它 為尾的弧。 1.1.

5、61.1.6 圖的遍歷圖的遍歷 演示圖的深度優(yōu)先, 廣度優(yōu)先遍歷過(guò)程,并輸出原圖結(jié)構(gòu)及遍歷結(jié)果。 要求圖的結(jié)點(diǎn)數(shù)不能少于 6 個(gè)??梢杂上到y(tǒng)隨機(jī)生成圖,也可以由用戶手動(dòng) 輸入圖。報(bào)告中要寫出畫圖的思路;畫出圖的結(jié)構(gòu),有興趣的同學(xué)可以進(jìn)一 步改進(jìn)圖的效果。 1.1.71.1.7 八皇后問(wèn)題演示八皇后問(wèn)題演示 在 8*8 的棋盤上擺放 8 個(gè)皇后,使他們不在同一條對(duì)角線上和不在一行 和列上。 解決 8 皇后時(shí),在安放第 i 行皇后時(shí),需要在列的方向從 1 到 n 試探(j =1, n):首先在第 j 列安放一個(gè)皇后,如果在列、主對(duì)角線、次 對(duì)角線方向有其它皇后,則出現(xiàn)攻擊,撤消在第 j 列安放的皇

6、后。如果沒(méi)有 出現(xiàn)攻擊,在第 j 列安放的皇后不動(dòng),遞歸安放第 i+1 行皇后。 該課題要求 求解可能的方案及方案數(shù)并逐步演示擺放皇后的過(guò)程。 1.1.81.1.8 雙鏈表創(chuàng)建演示雙鏈表創(chuàng)建演示 建立一個(gè)遞增有序遞增有序的雙鏈表。功能是隨機(jī)生成 8 個(gè)結(jié)點(diǎn)數(shù)據(jù),每生成一 個(gè)結(jié)點(diǎn)則申請(qǐng)空間得到一個(gè)指針,將數(shù)據(jù)存放到指針?biāo)傅臄?shù)據(jù)域中,然后 將結(jié)點(diǎn)插入到已經(jīng)排好序的雙鏈表中。所以第一步工作是判斷新結(jié)點(diǎn)的插入 位置,第二不演示插入過(guò)程中指針的變化,第三步顯示插入后的鏈表結(jié)果。 1.1.91.1.9 公園導(dǎo)游圖公園導(dǎo)游圖 給出一張某公園的導(dǎo)游圖,游客通過(guò)終端詢問(wèn)可知:從某一景點(diǎn)到另一 景點(diǎn)的最短路徑。

7、游客從公園大門進(jìn)入,選一條最佳路線,使游客可以不重 復(fù)地游覽各景點(diǎn),最后回到出口(出口就在入口旁邊) 。要求用圖示展示最佳 路徑。 1.21.2 選題方案:選題方案: 所選題目根據(jù)學(xué)號(hào)確定,學(xué)號(hào)模 9 加 1,即(學(xué)號(hào)%9+1) 。如你的學(xué)號(hào)為 12,則所選題目號(hào)為:12%9+1(題目 4) 。注意,所有的課題都要求用圖形 方式演示步驟和結(jié)果。有興趣的同學(xué)可以自己針對(duì)數(shù)據(jù)結(jié)構(gòu)課程中所講算法 來(lái)設(shè)計(jì)一個(gè)演示過(guò)程的算法,但要預(yù)先告知老師,經(jīng)過(guò)審批,方可確定課題。 1.31.3 設(shè)計(jì)要求:設(shè)計(jì)要求: 1.3.11.3.1 課程設(shè)計(jì)報(bào)告規(guī)范課程設(shè)計(jì)報(bào)告規(guī)范 (1)需求分析 a. 程序的功能。 b. 輸

8、入輸出的要求。 (2)概要設(shè)計(jì) a. 程序由哪些模塊組成以及模塊之間的層次結(jié)構(gòu)、各模塊的調(diào)用關(guān)系;每 個(gè)模塊的功能。 b. 課題涉及的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫(kù)結(jié)構(gòu);即要存儲(chǔ)什么數(shù)據(jù),這些數(shù)據(jù)是什 么樣的結(jié)構(gòu),它們之間有什么關(guān)系等。 (3)詳細(xì)設(shè)計(jì) a. 采用 c 語(yǔ)言定義相關(guān)的數(shù)據(jù)類型。 b. 寫出各模塊的類 c 碼算法。 c. 畫出各函數(shù)的調(diào)用關(guān)系圖、主要函數(shù)的流程圖。 (4)調(diào)試分析以及設(shè)計(jì)體會(huì) a. 測(cè)試數(shù)據(jù):準(zhǔn)備典型的測(cè)試數(shù)據(jù)和測(cè)試方案,包括正確的輸入及輸出結(jié) 果和含有錯(cuò)誤的輸入及輸出結(jié)果。 b. 程序調(diào)試中遇到的問(wèn)題以及解決問(wèn)題的方法。 c. 課程設(shè)計(jì)過(guò)程經(jīng)驗(yàn)教訓(xùn)、心得體會(huì)。 (5)使用說(shuō)明

9、 用戶使用手冊(cè):說(shuō)明如何使用你編寫的程序,詳細(xì)列出每一步的操作步驟。 (6)書寫格式 a. 設(shè)計(jì)報(bào)告要求用 a4 紙打印成冊(cè): b. 一級(jí)標(biāo)題用 3 號(hào)黑體,二級(jí)標(biāo)題用四號(hào)宋體加粗,正文用小四號(hào)宋體;行距 為 22。 (7)附錄 a.源程序清單(帶注釋) 1.3.21.3.2 考核方式考核方式 指導(dǎo)老師負(fù)責(zé)驗(yàn)收程序的運(yùn)行結(jié)果,并結(jié)合學(xué)生的工作態(tài)度、實(shí)際動(dòng)手能力、創(chuàng) 新精神和設(shè)計(jì)報(bào)告等進(jìn)行綜合考評(píng),并按優(yōu)秀、良好、中等、及格和不及格五個(gè)等級(jí) 給出每位同學(xué)的課程設(shè)計(jì)成績(jī)。具體考核標(biāo)準(zhǔn)包含以下幾個(gè)部分: (1)平時(shí)出勤 (占 10%) (2)系統(tǒng)需求分析、功能設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及程序總體結(jié)構(gòu)合理與否

10、(占 10%) (3)程序能否完整、準(zhǔn)確地運(yùn)行,個(gè)人能否獨(dú)立、熟練地調(diào)試程序(占 40%) (4)設(shè)計(jì)報(bào)告(占 30%) 注意:不得抄襲他人的報(bào)告(或給他人抄襲) ,一旦發(fā)現(xiàn),成績(jī)?yōu)榱惴帧?(5)獨(dú)立完成情況(占 10%) 。 1.3.31.3.3 課程驗(yàn)收要求課程驗(yàn)收要求 (1)運(yùn)行所設(shè)計(jì)的系統(tǒng)。 (2)回答有關(guān)問(wèn)題。 (3)提交課程設(shè)計(jì)報(bào)告。 (4)提交軟盤(源程序、設(shè)計(jì)報(bào)告文檔) 。 (5)依內(nèi)容的創(chuàng)新程度,完善程序情況及對(duì)程序講解情況打分。 2 2 進(jìn)度安排進(jìn)度安排 2.12.1 計(jì)算機(jī)計(jì)算機(jī) 0701/07020701/0702 班:班: 第 7 周:星期一 8:0012:00 上課

11、 星期一 14:0016:00 上課 星期五 18:0022:00 上機(jī) 第 8 周:星期六 14:0018:00 上機(jī) 星期日 8:0012:00 上機(jī) 星期日 18:0022:00 上課 第 9 周:星期六 8:0012:00 上機(jī) 星期日 14:0018:00 上機(jī) 2.22.2 計(jì)算機(jī)計(jì)算機(jī) 07030703 班:班: 第 7 周:星期一 8:0012:00 上課 星期一 14:0016:00 上課 星期六 8:0012:00 上機(jī) 星期日 14:0018:00 上機(jī) 第 8 周:星期六 8:0012:00 上機(jī) 星期日 14:0018:00 上機(jī) 第 9 周:星期六 14:0018:

12、00 上機(jī) 星期日 18:0022:00 上機(jī) 目目 錄錄 一、一、需求分析需求分析 .- 1 - 1.1.程序功能說(shuō)明程序功能說(shuō)明 .- 1 - 2.2.輸入輸出輸入輸出 .- 1 - 二、二、概要設(shè)計(jì)概要設(shè)計(jì) .- 2 - 1.1.程序模塊程序模塊 本程序由于僅需實(shí)現(xiàn)雙鏈表的創(chuàng)建演示,所以程序結(jié)構(gòu)比較簡(jiǎn)單,主本程序由于僅需實(shí)現(xiàn)雙鏈表的創(chuàng)建演示,所以程序結(jié)構(gòu)比較簡(jiǎn)單,主 要由三部分模塊函數(shù)組成,即構(gòu)建生成雙鏈表,演示指針變化,結(jié)果輸出。要由三部分模塊函數(shù)組成,即構(gòu)建生成雙鏈表,演示指針變化,結(jié)果輸出。.- 2 - 2.2.課題涉及的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫(kù)結(jié)構(gòu)課題涉及的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫(kù)結(jié)構(gòu) 本課題所

13、用到的數(shù)據(jù)結(jié)構(gòu)主要是雙向鏈表,所用到的本課題所用到的數(shù)據(jù)結(jié)構(gòu)主要是雙向鏈表,所用到的 數(shù)據(jù)結(jié)構(gòu)如下數(shù)據(jù)結(jié)構(gòu)如下.- 2 - 2.1 雙鏈表存儲(chǔ)結(jié)構(gòu).- 2 - 2.2 雙鏈表結(jié)點(diǎn)的插入.- 2 - 2.3 雙鏈表結(jié)點(diǎn)的刪除.- 3 - 三、三、詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì) .- 4 - 1.采用采用 c 語(yǔ)言定義相關(guān)的數(shù)據(jù)類型語(yǔ)言定義相關(guān)的數(shù)據(jù)類型.- 4 - 1.1 雙鏈表結(jié)點(diǎn)定義.- 4 - 2.寫出各模塊的類寫出各模塊的類 c 碼算法碼算法.- 4 - 2.1 建立并插入雙鏈表的類 c 算法.- 4 - 2.2 指針變化演示類 c 算法.- 5 - 3.3 輸出已排序雙鏈表類 c 代碼.- 5 -

14、3.畫出各函數(shù)的調(diào)用關(guān)系圖、主要函數(shù)的流程圖。畫出各函數(shù)的調(diào)用關(guān)系圖、主要函數(shù)的流程圖。.- 6 - 四、四、調(diào)試分析以及設(shè)計(jì)體會(huì)調(diào)試分析以及設(shè)計(jì)體會(huì).- 6 - 1程序調(diào)試中遇到的問(wèn)題以及解決問(wèn)題的方法。程序調(diào)試中遇到的問(wèn)題以及解決問(wèn)題的方法。.- 6 - 2課程設(shè)計(jì)過(guò)程經(jīng)驗(yàn)教訓(xùn)、心得體會(huì)。課程設(shè)計(jì)過(guò)程經(jīng)驗(yàn)教訓(xùn)、心得體會(huì)。.- 7 - 五、五、使用說(shuō)明使用說(shuō)明 .- 7 - 六、六、附錄附錄.- 10 - 源程序清單源程序清單.- 10 - 參考文獻(xiàn)參考文獻(xiàn) .- 15 - 一、一、 需求分析需求分析 1.1. 程序功能說(shuō)明 鏈表是線性表的鏈?zhǔn)奖硎?,由于它不要求邏輯上相鄰的元素在物理位置上?/p>

15、表是線性表的鏈?zhǔn)奖硎?,由于它不要求邏輯上相鄰的元素在物理位置?也相鄰,所以它沒(méi)有順序存儲(chǔ)結(jié)構(gòu)在做插入刪除操作時(shí)需要移動(dòng)大量元素也相鄰,所以它沒(méi)有順序存儲(chǔ)結(jié)構(gòu)在做插入刪除操作時(shí)需要移動(dòng)大量元素 的弱點(diǎn)。雙鏈表的結(jié)點(diǎn)中有兩個(gè)指針域,一個(gè)指向直接后繼,一個(gè)指向直的弱點(diǎn)。雙鏈表的結(jié)點(diǎn)中有兩個(gè)指針域,一個(gè)指向直接后繼,一個(gè)指向直 接前驅(qū)。所以雙鏈表創(chuàng)建演示就是建立一個(gè)遞增有序的雙鏈表。程序功能接前驅(qū)。所以雙鏈表創(chuàng)建演示就是建立一個(gè)遞增有序的雙鏈表。程序功能 是首先由程序隨機(jī)生成是首先由程序隨機(jī)生成 8 8 個(gè)結(jié)點(diǎn)數(shù)據(jù),生成一個(gè)結(jié)點(diǎn)后則申請(qǐng)空間得到一個(gè)結(jié)點(diǎn)數(shù)據(jù),生成一個(gè)結(jié)點(diǎn)后則申請(qǐng)空間得到一 個(gè)指針,將

16、數(shù)據(jù)存放到指針?biāo)傅臄?shù)據(jù)域中,再生成一個(gè)結(jié)點(diǎn)后先判斷此個(gè)指針,將數(shù)據(jù)存放到指針?biāo)傅臄?shù)據(jù)域中,再生成一個(gè)結(jié)點(diǎn)后先判斷此 結(jié)點(diǎn)的數(shù)值和已生成結(jié)點(diǎn)的大小,由于要求建立遞增有序的雙鏈表,所以結(jié)點(diǎn)的數(shù)值和已生成結(jié)點(diǎn)的大小,由于要求建立遞增有序的雙鏈表,所以 把結(jié)點(diǎn)插入到比其大的所有結(jié)點(diǎn)中的最小結(jié)點(diǎn)之前和比其小的所有結(jié)點(diǎn)中把結(jié)點(diǎn)插入到比其大的所有結(jié)點(diǎn)中的最小結(jié)點(diǎn)之前和比其小的所有結(jié)點(diǎn)中 最大結(jié)點(diǎn)的之后,并在插入過(guò)程中顯示指針變化,最后輸出排好序的雙鏈最大結(jié)點(diǎn)的之后,并在插入過(guò)程中顯示指針變化,最后輸出排好序的雙鏈 表。表。 2.2. 輸入輸出 由于本程序?yàn)檠菔境绦?,結(jié)點(diǎn)也由程序隨機(jī)生成,所以在輸入方面不

17、需實(shí)由于本程序?yàn)檠菔境绦?,結(jié)點(diǎn)也由程序隨機(jī)生成,所以在輸入方面不需實(shí) 現(xiàn)功能,只需用戶控制程序操作。輸出方面主要是在屏幕顯示插入結(jié)點(diǎn)的現(xiàn)功能,只需用戶控制程序操作。輸出方面主要是在屏幕顯示插入結(jié)點(diǎn)的 結(jié)果和顯示指針變化的功能,具體輸出過(guò)程為輸出首先生成的結(jié)點(diǎn),然后結(jié)果和顯示指針變化的功能,具體輸出過(guò)程為輸出首先生成的結(jié)點(diǎn),然后 顯示對(duì)已生成結(jié)點(diǎn)的排序,再演示出指針變化,指針以彎折的箭頭表示,顯示對(duì)已生成結(jié)點(diǎn)的排序,再演示出指針變化,指針以彎折的箭頭表示, 最后輸出排序后的鏈表,直箭頭表示雙鏈表的前驅(qū)后驅(qū)。最后輸出排序后的鏈表,直箭頭表示雙鏈表的前驅(qū)后驅(qū)。 二、 概要設(shè)計(jì)計(jì) 1.1. 程序模塊

18、本程序由于僅需實(shí)現(xiàn)雙鏈表的創(chuàng)建演示,所以程序結(jié)構(gòu)比較簡(jiǎn)單,主要由本程序由于僅需實(shí)現(xiàn)雙鏈表的創(chuàng)建演示,所以程序結(jié)構(gòu)比較簡(jiǎn)單,主要由 三部分模塊函數(shù)組成,即構(gòu)建生成雙鏈表,演示指針變化,結(jié)果輸出。三部分模塊函數(shù)組成,即構(gòu)建生成雙鏈表,演示指針變化,結(jié)果輸出。 程序結(jié)構(gòu)圖: 2.2. 課題涉及的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫(kù)結(jié)構(gòu) 本課題所用到的數(shù)據(jù)結(jié)構(gòu)主要是雙向鏈表,所用到的數(shù)據(jù)結(jié)構(gòu)如下本課題所用到的數(shù)據(jù)結(jié)構(gòu)主要是雙向鏈表,所用到的數(shù)據(jù)結(jié)構(gòu)如下 2.12.1 雙鏈表存儲(chǔ)結(jié)構(gòu)雙鏈表存儲(chǔ)結(jié)構(gòu) typedef struct dulnode elemtype data; struct dulnode *prior; st

19、ruct dulnode *next; dulnode, *dulinklist; 2.22.2 雙鏈表結(jié)點(diǎn)的插入雙鏈表結(jié)點(diǎn)的插入 status listinsert_dul(dulinklist if(!(s=(dulinklist)malloc(sizeof(dulnode) return error; s-data=e; 雙鏈表創(chuàng)建演示主程 序 雙鏈表創(chuàng)建指針變化演示結(jié)果輸出 s-prior=p-prior; p-piror-next=s; s-next=p; p-prior=s; return ok; 2.32.3 雙鏈表結(jié)點(diǎn)的刪除雙鏈表結(jié)點(diǎn)的刪除 status listdelete_

20、dul(dulinklist e=p-data; p-prior-next=p-next; p-next-prior=p-prior; free(p); return ok; 三、三、 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì) 1. 采用 c 語(yǔ)言定義相關(guān)的數(shù)據(jù)類型 1.11.1 雙鏈表結(jié)點(diǎn)定義雙鏈表結(jié)點(diǎn)定義 typedef struct link int data; struct link *right; struct link *left; int num; linkx,*linky; 2. 寫出各模塊的類 c 碼算法 2.12.1 建立并插入雙鏈表建立并插入雙鏈表的類的類 c c 算法算法 void initl

21、ist(void) randomize(); 將產(chǎn)生的隨機(jī)數(shù)字轉(zhuǎn)換成字符串并輸出; sleep(1); prlink(head,n); /*顯示只有頭節(jié)點(diǎn)的鏈表*/ n+; while(n!=8) s-data=random(100); if(s-datadata) /*小于頭結(jié)點(diǎn),插在頭*/ q=head-right; q-num+; /*節(jié)點(diǎn)數(shù)加 1;*/ 顯示具體插入過(guò)程; else /其他情況/ if(p=null) /*這個(gè)數(shù)是當(dāng)前最大的數(shù),插在尾部*/ 顯示插入的具體過(guò)程; else /*隨即產(chǎn)生的數(shù)排在表中*/ while(s!=null) s-num+;s=s-right; 顯

22、示插入的具體過(guò)程; 2.22.2指針變化演示類指針變化演示類 c c 算法算法 void drawchange(int data,int i,int n) 判斷插入結(jié)點(diǎn)的位置: if(i!=-1) 當(dāng)前指針是頭指針,畫前驅(qū)、后繼指針; if(i!=n-1) 當(dāng)前指針是尾指針,畫前驅(qū)、后驅(qū)指針; if(i!=n-1 3.畫出各函數(shù)的調(diào)用關(guān)系圖、主要函數(shù)的流程圖。 進(jìn)入 y y y n 具體 inintlist(void)函數(shù)的流程圖: 調(diào)用 prlink(head,n) closr(void) 調(diào)用 drawchange(s-data,q-num,n) 調(diào)用 drawchange(s-data,

23、n-1,n) 調(diào)用 drawchange(s-data,t,n) 調(diào)用 prink(p ,n) 調(diào)用 inintlist(void) s- datadata p=null 四、四、 調(diào)試分析以及設(shè)計(jì)體會(huì)調(diào)試分析以及設(shè)計(jì)體會(huì) 1程序調(diào)試中遇到的問(wèn)題以及解決問(wèn)題的方法。 主要是在結(jié)點(diǎn)插入判斷方面有難度,一開(kāi)始不能準(zhǔn)確的進(jìn)行結(jié)點(diǎn)的判斷和插 入,然后就是插入結(jié)點(diǎn)的過(guò)程中位置不對(duì),不是遞增有序的,后面在網(wǎng)上找 到了一段演示代碼,通過(guò)研究這段代碼解決了這個(gè)問(wèn)題。還有就是在顯示指 針變化方面有問(wèn)題,經(jīng)過(guò)查詢資料,解決結(jié)點(diǎn)插入方面的問(wèn)題,用畫箭頭的 方式來(lái)表現(xiàn)指針的變化。 2課程設(shè)計(jì)過(guò)程經(jīng)驗(yàn)教訓(xùn)、心得體會(huì)。

24、在進(jìn)行本次課程設(shè)計(jì)的實(shí)驗(yàn)操作中,由于自己的基礎(chǔ)知識(shí)不是很好,出現(xiàn)了一 些問(wèn)題:在編程方面不熟,所以寫出的代碼總是出錯(cuò);數(shù)據(jù)結(jié)構(gòu)課程以前也沒(méi) 有好好學(xué)過(guò),造成在構(gòu)建程序數(shù)據(jù)結(jié)構(gòu)時(shí)出現(xiàn)由于概念模糊而寫錯(cuò)功能的問(wèn)題。 但是在老師和同學(xué)們的幫助下,再通過(guò)查閱資料,最后終于寫出了可以正確運(yùn) 行結(jié)果的代碼,所以要感謝給我?guī)椭睦蠋熀屯瑢W(xué)。以前用 c 編程,只是注重 如何編寫函數(shù)能夠完成所需要的功能,似乎沒(méi)有明確的戰(zhàn)術(shù),只是憑單純的意 識(shí)和簡(jiǎn)單的語(yǔ)句來(lái)堆砌出一段程序。感覺(jué)有點(diǎn)像張飛打仗,有勇無(wú)謀,只要能 完成任務(wù)就行。但現(xiàn)在編程感覺(jué)完全不同了。在編寫一個(gè)程序之前,自己能夠 綜合考慮各種因素,首先選取自己需要

25、的數(shù)據(jù)結(jié)構(gòu),是樹(shù)還是圖或是別的什么? 然后選定一種或幾種存儲(chǔ)結(jié)構(gòu)來(lái)具體的決定后面的函數(shù)的主要風(fēng)格。最后在編 寫每一個(gè)函數(shù)之前,可以仔細(xì)斟酌比對(duì),挑選出最適合當(dāng)前狀況的算法。這樣, 即使在完整的程序還沒(méi)有寫出來(lái)之前,自己心中已經(jīng)有了明確的原圖了。這樣 無(wú)形中就提高了自己編寫的程序的質(zhì)量。 通過(guò)這次課程設(shè)計(jì),使我意識(shí)到作為一個(gè)計(jì)算機(jī)系的學(xué)生,正確掌握一門程序 語(yǔ)言和數(shù)據(jù)結(jié)構(gòu)的重要性,想要在程序設(shè)計(jì)上面作出成績(jī),必須要有扎實(shí)的編 程語(yǔ)言基礎(chǔ)和良好的數(shù)據(jù)結(jié)構(gòu)算法知識(shí),我決定在余下的在校時(shí)間里,認(rèn)認(rèn)真 真學(xué)一門語(yǔ)言,并去詳細(xì)了解程序的算法設(shè)計(jì)。 五、五、 使用說(shuō)明使用說(shuō)明 本程序是演示程序,在運(yùn)行后按任

26、意鍵即執(zhí)行演示過(guò)程,可直觀的看到程序運(yùn) 行時(shí)雙鏈表指針的變化情況,為方便觀察結(jié)果,在程序運(yùn)行的時(shí)候,按一下執(zhí) 行一步,也可以通過(guò)按 q 鍵來(lái)退出程序,也可以在等待所有過(guò)程結(jié)束后再退出。 1進(jìn)入程序后界面: 2隨機(jī)產(chǎn)生結(jié)點(diǎn),圖中已產(chǎn)生 2 個(gè)結(jié)點(diǎn),由于 57 大于 1,所以沒(méi)有右指 針 3指針變化情況 4完成一個(gè)鏈表創(chuàng)建,下一結(jié)點(diǎn)插入中 5所有步驟完成后程序顯示界面,可清晰看到排序后的雙鏈表結(jié)果 六、六、 附錄附錄 源程序清單 #include stdlib.h #include graphics.h typedef struct link/*雙鏈表結(jié)點(diǎn)定義*/ int data; struct

27、 link *right; struct link *left; int num;/*給鏈表加序號(hào),為了演示時(shí)計(jì)算正確位置*/ linkx,*linky; void init(void);/*圖形驅(qū)動(dòng)*/ void close(void);/*圖形關(guān)閉*/ void initlist(void);/*建立雙鏈表,邊建立邊插入*/ void prlink(linky p,int n);/*每次插入后輸出鏈表*/ void drawchange(int data,int i,int n);/*畫鏈表插入的指針變化*/ void main(void) init();/*圖形關(guān)閉*/ initlist

28、();/*建立鏈表*/ close();/*圖形關(guān)閉*/ exit(0); void initlist(void) /*建立雙向鏈表,邊建立邊插入*/ linky head,p,q,s; int n=0; char str5; randomize();/*隨機(jī)數(shù)發(fā)生機(jī)*/ setcolor(blue); outtextxy(200,20,perss any key to start); setcolor(red); outtextxy(400,30,press q to quit); getch(); head=s=(linky)malloc(sizeof(linkx); s-data=ran

29、dom(100);/*隨機(jī)生成 100 以內(nèi)的數(shù)字*/ s-num=n; sprintf(str,%d,s-data);/*將數(shù)字轉(zhuǎn)換成字符串并輸出*/ settextstyle(4,0,1); setcolor(white); outtextxy(50,50,nodedata:); outtextxy(50,70,doublelinks:); setcolor(10); outtextxy(155+n*35,50,str);/*顯示數(shù)據(jù)*/ getch(); s-right=null; s-left=null; prlink(head,n);/*每次插入新數(shù)字后都顯示當(dāng)前鏈表*/ n+; w

30、hile(n!=8) s=(linky)malloc(sizeof(linkx); s-data=random(100); s-num=n; sprintf(str,%d,s-data);/*將數(shù)字轉(zhuǎn)換成字符串并輸出*/ setcolor(10); outtextxy(155+n*35,50,str); getch(); p=head;/*每生成一個(gè)結(jié)點(diǎn),將該結(jié)點(diǎn)插入到有序雙鏈表中*/ if(s-datadata)/*小于頭結(jié)點(diǎn),插在頭*/ drawchange(s-data,-1,n);/*顯示插入的具體過(guò)程*/ s-right=head; s-left=null; s-num=0; hea

31、d-left=s; head=s; q=head-right;/*后面所有數(shù)的序號(hào)都加 1,相當(dāng)于數(shù)據(jù)后移*/ while(q!=null) q-num+; q=q-right; else/*其他情況*/ while(s-datap-data p=p-right; if(p=null)/*這個(gè)數(shù)是當(dāng)前最大的數(shù),插在尾部*/ drawchange(s-data,n-1,n);/*顯示插入的具體過(guò)程*/ q-right=s; s-right=null; s-left=q; s-num=n; else /*結(jié)點(diǎn)插入位置位于兩數(shù)之間*/ q-right-left=s; s-right=q-right;

32、 s-left=q; q-right=s; s-num=q-num+1; drawchange(s-data,q-num,n);/*顯示插入的具體過(guò)程*/ /*后面所有數(shù)的序號(hào)都加 1*/ s=s-right; while(s!=null) s-num+; s=s-right; prlink(head,n);/*每次插入新數(shù)據(jù)后都顯示新鏈表*/ n+; /*畫鏈表插入的具體過(guò)程,data 是要插入的數(shù)據(jù),i 為插入結(jié)點(diǎn)前驅(qū)結(jié)點(diǎn)序號(hào),n 為當(dāng)前結(jié)點(diǎn)個(gè)數(shù), 先將前驅(qū)結(jié)點(diǎn)和后繼之間的指針線擦除,顯示新結(jié)點(diǎn)插入過(guò)程,插入后擦除插入過(guò)程,恢復(fù)刪除的 前驅(qū)結(jié)點(diǎn)的指針線*/ void drawchange(

33、int data,int i,int n) char str5; setfillstyle(solid_fill,black); setcolor(red);/*插入鏈表的新數(shù)據(jù)用紅色顯示*/ sprintf(str,%d,data); outtextxy(55+70*i+35,100+n*50,str);/*輸出插入的位置*/ bar(50+70*i+35,100+(n-1)*50-20,50+70*i+65,100+(n-1)*50+20); /*去除插入結(jié)點(diǎn)位置原結(jié)點(diǎn)間的指針線*/ setcolor(yellow); if(i!=-1) /*不是插在頭,新結(jié)點(diǎn)的前驅(qū)指針線*/ line(

34、50+70*i+34,100+n*50,50+70*i+30,100+n*50); line(50+70*i+30,100+n*50,50+70*i+30,100+n*50-25); line(50+70*i+30,100+n*50-25,50+70*i+27,100+n*50-22); line(50+70*i+30,100+n*50-25,50+70*i+33,100+n*50-22); getch(); if(i!=n-1)/*不是插在尾,新結(jié)點(diǎn)的后繼指針線*/ line(50+70*i+61,100+n*50,50+70*i+65,100+n*50); line(50+70*i+65,

35、100+n*50,50+70*i+65,100+n*50-25); line(50+70*i+65,100+n*50-25,50+70*i+62,100+n*50-22); line(50+70*i+65,100+n*50-25,50+70*i+68,100+n*50-22); getch(); setcolor(6); if(i!=-1)/*不是插在頭,新結(jié)點(diǎn)前驅(qū)結(jié)點(diǎn)的后繼指針線*/ line(50+70*i+20,100+n*50-25,50+70*i+20,110+n*50); line(50+70*i+20,110+n*50,50+70*i+34,110+n*50); line(50+70*i+34,110+n*50,50+70*i+31,110+n*50-3); line(50+70*i+34,110+n*50,50+70*i+31,110+n*50+3); getch(); if(i!=n-1) /*不是插在尾,新結(jié)點(diǎn)后繼結(jié)點(diǎn)的前驅(qū)指針線*/ line(50+70*i+75,100+n*50-25,50+70*i+75,110+n*50); line(50+70*i+75,110+n*50,50+70*i+61,110+n*50); line(50+70*i+61,110+n*50,50+70*i+64,110+n*50-3); line(50+7

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論