內容簡介
本實驗指導教程是配合計算機及相關專業的“數據結構”課程而編寫的。在內容編排方面,按照循序漸進、由淺入深的順序設計、選取案例。全書共分兩個部分:第一部分為“數據結構實驗”;第二部分為“數據結構課程設計”。
第一部分(包括第1~8章)針對每個知識點,首先給出明確的要求,隨后設計基礎實驗,特別是前幾章在基礎實驗之后,設計了若干應用案例。這樣有利于學生明確知識點在應用中如何使用,消除迷茫感、增強學習興趣。
第二部分(即第9章)是課程設計,介紹在一個項目中如何選擇和使用多種基本的數據結構,介紹如何有效地將它們融合在一起,解決實際的復雜應用問題。
本書可作為高等院校計算機及相關專業數據結構課程的實驗教材。
前 言
數據結構是計算機及相關專業中一門重要的專業基礎課程。用計算機解決實際問題時,就要涉及數據的表示及數據的處理,而這正是數據結構課程的主要研究對象。通過對數據結構知識內容的學習,可以為后續課程,尤其是軟件方面的課程打下堅實的基礎,同時,也提供了必要的技能訓練。此課程的學習質量將直接影響計算機軟件系列課程的學習效果,因此,數據結構課程在計算機專業中具有舉足輕重的作用。
根據我們多年的教學經驗,認為學生學習數據結構的主要困難在于解題。學生在解題中經常會出現錯誤,原因在于實踐能力不足。
要學好數據結構,僅僅通過課堂教學或自學獲取理論知識是遠遠不夠的,還必須加強實際動手能力的訓練。只有通過實驗課調試和運行已有的各種典型算法和已編寫的程序,從成功和失敗的經驗中得到鍛煉,才能熟練掌握和運用理論知識解決軟件開發中的實際問題,達到學以致用的目的。
本實驗指導教程是配合計算機及相關專業數據結構課程而編寫的。本書在內容編排方面,按照循序漸進、由淺入深的順序設計、選取案例。根據教學內容,針對學生的實際情況,本書在內容編排上共分兩個部分。第一部分為"數據結構實驗";第二部分為"數據結構課程設計"。
第一部分(包括第1~8章)針對每個知識點,首先給出明確的要求,隨后設計基礎實驗,特別是前幾章在基礎實驗之后,設計了若干應用案例。這樣有利于學生明確知識點在應用中如何使用,消除學生的迷茫感、增強學生的學習興趣。
第二部分(即第9章)是課程設計,介紹在一個項目中如何選擇和使用多種基本數據結構,介紹如何有效地將它們融合在一起解決實際的復雜應用問題。這有利于學生更深層次地掌握數據結構原理及其應用范圍和過程。
本書具有以下特點。
(1) 基于案例驅動的教學內容設計。在實驗案例的選擇方面,不僅有針對知識點的基礎案例,而且有對應的應用案例,從而使學生能夠消除畏難情緒。我們在該實驗教材的編寫過程中,選擇案例時由淺入深并精心設計了應用案例,以確保應用的完整性。
(2) 提供大量的源代碼和開發案例。在該實驗教材的編寫中,摒棄了偽代碼的描述,全部采用C語言源代碼,這些源代碼都是經過調試并且在教學過程中已經應用的,學生可以直接分析和模仿。同時,在重要的章節,都提供了較為深入的設計案例,例如多項式的運算、括號匹配判斷系統、迷宮求解系統、最短路徑求解等,為學生提供了更為深入的源碼討論和模仿的機會,極大地提高了教材的全面性、深入性和綜合性。
(3) 提供典型的課程設計內容。為了更好地提高學生的專業技能訓練水平以及提高學生的學習興趣,在本書的編寫過程中,編寫成員根據自己多年教學的積累,整理出了適合計算機專業學生實際情況的課程設計題目,并提供了相應的解決思路和源代碼,為學生提供了很好的學習機會和訓練機會。
本書提供案例程序的源代碼(可運行),并贈送C++版案例實驗教程。讀者可以從清華大學出版社的網站下載。
本書可作為高等院校計算機及相關專業數據結構課程的實驗教材。
由于編者水平有限,錯誤和不當之處在所難免,希望讀者批評指正。
編 者
目錄
第1章 順序表 1實驗1 順序表的實現 21.實驗目的 22.實驗內容 23.算法設計 24.程序實現 35.運行程序 5實驗2 順序表的應用--集合運算 51.實驗目的 52.實驗內容 53.算法設計 54.程序實現 65.運行程序 8實驗3 順序表的應用--回文數猜想 81.問題描述 82.基本要求 83.算法設計 84.程序實現 95.運行程序 10第2章 鏈表 11實驗1 單鏈表的實現 121.實驗目的 122.實驗內容 123.算法設計 124.程序實現 135.運行程序 15實驗2 單鏈表的應用--約瑟夫問題 161.問題描述 162.基本要求 163.算法設計 164.程序實現 165.運行程序 17實驗3 單鏈表的應用--多項式求和 181.問題描述 182.基本要求 183.算法設計 184.實現程序 185.運行程序 21第3章 棧 23實驗1 順序棧的實現 241.實驗目的 242.實驗內容 243.算法設計 244.程序實現 255.運行程序 26實驗2 鏈棧的實現 261.實驗目的 262.實驗內容 263.算法設計 274.程序實現 275.程序運行 28實驗3 棧的應用--數制轉換 281.問題描述 282.基本要求 283.算法設計 294.程序實現 295.運行程序 30實驗4 棧的應用--括號匹配問題 301.問題描述 302.基本要求 303.算法設計 304.程序實現 305.運行程序 31實驗5 棧的應用--表達式求值 321.問題描述 322.基本要求 323.算法設計 324.程序實現 325.運行程序 34第4章 隊列 35實驗1 循環隊列的實現 361.實驗目的 362.實驗內容 363.算法設計 364.程序實現 375.運行程序 38實驗2 鏈隊列的實現 391.實驗目的 392.實驗內容 393.算法設計 394.程序實現 395.運行程序 41實驗3 隊列的應用--優先隊列 411.問題描述 412.基本要求 413.算法設計 414.實現程序 425.運行程序 44實驗4 隊列的應用--雙端隊列 451.問題描述 452.基本要求 453.算法設計 454.程序實現 455.運行程序 48第5章 二叉樹 49實驗1 二叉樹的建立 501.實驗目的 502.實驗內容 503.算法設計 504.程序實現 515.運行程序 51實驗2 二叉樹的遍歷 521.實驗目的 522.實驗內容 523.算法設計 524.程序實現 535.運行程序 55實驗3 二叉樹的高度、節點數、葉子節點數 551.實驗目的 552.實驗內容 553.算法設計 554.程序實現 555.運行程序 57實驗4 堆 571.問題描述 572.基本要求 573.算法設計 574.程序實現 585.運行程序 60第6章 圖 61實驗1 圖的鄰接矩陣表示 621.實驗目的 622.實驗內容 623.實現提示 624.程序實現 625.運行程序 64實驗2 圖的鄰接表表示 641.實驗目的 642.實驗內容 643.實現提示 644.程序實現 645.運行程序 66實驗3 圖的深度優先搜索 671.問題描述 672.基本要求 673.實現提示 674.程序實現 675.運行程序 69第7章 排序 71實驗1 冒泡排序 721.實驗目的 722. 實驗內容 723.實現提示 724.程序實現 735.運行程序 74實驗2 插入排序、選擇排序 741.實驗目的 742.實驗內容 743.實現提示 754.程序實現 755.運行程序 76實驗3 歸并排序 761.實驗目的 762.實驗內容 763.實現提示 764.實現程序 765.運行程序 78實驗4 快速排序 781.實驗目的 782.實驗內容 793.實現提示 794.程序實現 795.運行程序 80實驗5 堆排序 811.實驗目的 812.實驗內容 813.實現提示 814.程序實現 815.運行程序 82第8章 查找 83實驗1 折半查找 841.實驗目的 842.實驗內容 843.實現提示 844.程序實現 855.運行程序 86實驗2 二叉排序樹查找 871.實驗目的 872.實驗內容 873.實現提示 874.程序實現 875.運行程序 89實驗3 哈希查找 891.實驗目的 892.實驗內容 893.實現提示 904.程序實現 905.運行程序 91第9章 課程設計 93問題1 學生成績管理 941.問題描述 942.任務要求 943.程序實現 954.運行結果 98問題2 數據庫管理系統 981.問題描述 982.任務要求 983.分析與實現 994.程序實現 1015.運行結果 116問題3 馬踏棋盤 1171.問題描述 1172.任務要求 1173.分析與實現 1174.運行結果 120問題4 停車場管理 1211.問題描述 1212.任務要求 1213.分析與實現 1224.運行結果 126問題5 大整數計算器 1261.問題描述 1262. 任務要求 1273.分析與實現 1274.運行結果 132問題6 魔方陣 1321.問題描述 1322.任務要求 1333.分析與實現 1334.運行結果 134問題7 本科生導師制問題 1341.問題描述 1342.任務要求 1353.分析與實現 1354.運行結果 144問題8 電文的編碼和譯碼 1451.問題描述 1452.任務要求 1453.分析與實現 1454.運行結果 148問題9 家族關系查詢系統 1491.問題描述 1492.任務要求 1493.分析與實現 1494.運行結果 161問題10 地鐵建設問題 1621.問題描述 1622.任務要求 1623.分析與實現 1624.運行結果 165問題11 校園導航 1651.問題描述 1652.任務要求 1653.分析與實現 1664.運行結果 169參考文獻 170