數(shù)據(jù)結構及應用算法教程(修訂版)(附光盤)
定 價:45 元
叢書名:高等院校信息管理與信息系統(tǒng)專業(yè)系列教材
- 作者:嚴蔚敏 ,陳文博 著
- 出版時間:2011/5/1
- ISBN:9787302243908
- 出 版 社:清華大學出版社
- 中圖法分類:TP311.12
- 頁碼:391
- 紙張:膠版紙
- 版次:1
- 開本:16開
《數(shù)據(jù)結構及應用算法教程(修訂版)》從數(shù)據(jù)類型的角度,分別討論了四大類型的數(shù)據(jù)結構的邏輯特性、存儲表示及其應用。此外,還專辟一章,以若干實例闡述以抽象數(shù)據(jù)類型為中心的程序設計方法。書中每一章后都配有適量的習題,以供讀者復習提高之用。第1~9章還專門設有“解題指導與示例”一節(jié)內容,不僅給出答案,對大部分題目提供了詳盡的解答注釋;其中的一些算法題還給出了多種解法。書中主要算法和最后一章的實例中的全部程序代碼均收錄在與《數(shù)據(jù)結構及應用算法教程(修訂版)》配套的光盤之中。
《數(shù)據(jù)結構及應用算法教程(修訂版)》內容豐富,概念闡述細致清楚,可作為高等院校計算機類專業(yè)和信息類相關專業(yè)“數(shù)據(jù)結構”或“軟件基礎”課程的本科教材。另外,對于準備參加計算機類研究生專業(yè)課統(tǒng)考的考生,《數(shù)據(jù)結構及應用算法教程(修訂版)》也可作為應試的解題指導。
“數(shù)據(jù)結構”是計算機程序設計的重要理論基礎,它所討論的知識內容和提倡的技術方法,無論對進一步學習計算機領域的其他課程,還是對從事軟件工程的開發(fā),都有著不可替代的作用。“數(shù)據(jù)結構”是公認的計算機學科本科和大專的核心課程,也是計算機類專業(yè)“考研”和等級水平考試的必考科目,而且正逐漸發(fā)展成為眾多理工專業(yè)的熱門選修課。本書正是針對這一背景和社會需求編寫的教材性讀物,在內容選材方面,更多地考慮了普通高等院校計算機專業(yè)和信息類相關專業(yè)的讀者的實際需要。
為了便于讀者理解,書中對數(shù)據(jù)結構眾多知識點的來龍去脈都做了詳細的解釋和說明,并配有大量的算法實例穿插其間。書的最后還專門辟出一章,用來講解數(shù)據(jù)結構在解決實際問題中的應用示例,便于讀者舉一反三。考慮到計算機技術的發(fā)展和進步,在內容的編排方面盡量做到推陳出新,實例也力求新穎,以適應技術發(fā)展的潮流。
本書的第1章綜述數(shù)據(jù)、數(shù)據(jù)結構和抽象數(shù)據(jù)類型等基本概念和算法;第2章、第4章至第7章從數(shù)據(jù)類型的角度,分別討論線性表、棧和隊列、串和數(shù)組、二叉樹和樹以及圖和廣義表等數(shù)據(jù)結構的邏輯特性、存儲表示及其應用;第3章和第8章分別討論排序和查找表的各種實現(xiàn)方法,其中除介紹各種實現(xiàn)方法外,并著重對算法的時間效率做了定性的分析,對算法的應用場合及適用范圍進行了比較和介紹;第9章討論常用的文件結構;第10章則以8個數(shù)據(jù)結構的綜合應用為例,闡述以抽象數(shù)據(jù)類型為中心的程序設計方法。書的每一章都配有適量的習題,供讀者復習提高之用。
本書在編排方面注意了數(shù)據(jù)結構本身的內在聯(lián)系和從易到難的學習規(guī)律。例如,將排序安排在第3章,因為對讀者來說,排序的內容比較容易理解,而且所涉及的數(shù)據(jù)結構主要是線性結構;又如對棧和隊列的學習重點是它們的應用,因此在第4章里更多地列舉了棧和隊列的應用例子;在第5章中,結合C語言的串類型講解串結構的知識內容,以使實際和理論在應用中和諧統(tǒng)一起來,等等。雖然廣義表屬線性結構,但由于它的“遞歸”特性,使得涉及廣義表操作的算法和樹更相似,因此將它放在圖之后進行討論,以降低理解難度。第10章的內容相當于“數(shù)據(jù)結構實習指導”,本意是為學生提供一個“綜合利用數(shù)據(jù)結構知識編制小型軟件”的規(guī)范示例。
全書采用了類C語言作為數(shù)據(jù)結構和操作算法的描述工具,它是C語言的一個精選子集,同時又采用了C++對C的非面向對象的增強功能。例如,動態(tài)分配和釋放順序存儲結構的空間;利用引用參數(shù)傳遞函數(shù)運算的結果;使用默認參數(shù)以簡化函數(shù)參數(shù)表的描述等。這些措施使數(shù)據(jù)類型的定義和數(shù)據(jù)結構相關操作算法的描述更加簡明清晰,可讀性更好,轉變成C程序也極為方便。另一方面又埋下了伏筆,把類型定義和操作算法稍加技術處理,就很容易將其封裝成類,并進一步轉化成面向對象的程序模型。
從課程性質上講,“數(shù)據(jù)結構”是一門專業(yè)技術基礎課。它的教學要求應當是:學會從問題入手,分析研究計算機加工的數(shù)據(jù)結構的特性,以便為應用所涉及的數(shù)據(jù)選擇適當?shù)倪壿嫿Y構、存儲結構及其相應的操作算法,并初步掌握時間和空間分析技術。另一方面,本課程的學習過程也是進行復雜程序設計的訓練過程,要求學生會書寫符合軟件工程規(guī)范的文件,編寫的程序代碼應結構清晰、正確易讀,能上機調試并排除錯誤。數(shù)據(jù)結構比高級程序設計語言課有著更高的要求,它重在培養(yǎng)學生的數(shù)據(jù)抽象能力。事實一再證明,任何具有創(chuàng)新成分的軟件成果都離不開數(shù)據(jù)的抽象和在數(shù)據(jù)抽象基礎上的算法描述。數(shù)據(jù)抽象能力是一種創(chuàng)造性的思維活動,是任何軟件開發(fā)工具也無法取代的。本書將通過不同層次的應用示例培養(yǎng)學生逐步掌握數(shù)據(jù)抽象的能力,學會數(shù)據(jù)結構和數(shù)據(jù)類型的使用方法,為今后的學習和提高編程水平打下扎實的基礎。
本書可作為計算機類專業(yè)的本科教材,也可以作為電子信息類相關專業(yè)的選修教材,教授可為40至60學時,另外應留有一定的時間供學生完成適量的上機作業(yè)。本書在編寫方面以通俗易懂為其宗旨,特別注意了技術細節(jié)的交代,以便于自學,故也可作為從事計算機應用等工作的科技人員參考和查閱用書。在學習本書時應至少掌握一門高級程序設計的知識,如掌握的是C語言則最為理想;若能具有初步的離散數(shù)學和概率論的知識,對書中某些內容的理解會更容易。學習本書的同時還可把《數(shù)據(jù)結構》 (C語言版)作為配套參考用書。
與本書配套的光盤中含有書中所有算法和最后一章應用示例的全部源程序,可在Visual C++ 5.0或6.0的環(huán)境下編譯執(zhí)行,讀者還可改變其中的輸入數(shù)據(jù),以觀察程序對不同輸入的執(zhí)行結果。為了便于讀者理解算法,在光盤中還為部分算法配有執(zhí)行過程的示例演示。
應當感謝因特網(wǎng),在本書的寫作過程中,通過E-mail傳送書稿使不在同一地方工作的兩位作者可以做到隨時交換意見并頻繁修改書稿,以便使本書內容盡可能地做到令讀者滿意。但因時間倉促,仍有不盡如人意之處,請讀者和同行賜教。
在寫作本書的過程中,劉巍、錢大智、李莉、樓健、徐佳、金穎、林京秀、王福建等同學參加了第10章有關程序的調試工作,在此表示感謝。
嚴蔚敏 清華大學計算機科學與技術系
陳文博 北京工業(yè)大學計算機學院
2000年7月
第1章 緒論
1.1 數(shù)據(jù)結構討論的范疇
1.2 與數(shù)據(jù)結構相關的概念
1.2.1 基本概念和術語
1.2.2 數(shù)據(jù)結構(data structures)
1.2.3 數(shù)據(jù)類型和抽象數(shù)據(jù)類型
1.3 算法及其描述和分析
1.3.1 算法
1.3.2 算法的描述
1.3.3 算法效率的衡量方法和準則
1.3.4 算法的存儲空間需求
解題指導與示例
習題
第2章 線性表
2.1 線性表的類型定義
2.1.1 線性表的定義
2.1.2 線性表的基本操作
2.2 線性表的順序表示和實現(xiàn)
2.2.1 順序表--線性表的順序存儲表示
2.2.2 順序表中基本操作的實現(xiàn)
2.2.3 順序表其他算法舉例
2.3 線性表的鏈式表示和實現(xiàn)
2.3.1 單鏈表和指針
2.3.2 單鏈表的基本操作
2.3.3 單鏈表的其他操作舉例
2.3.4 循環(huán)鏈表
2.3.5 雙向鏈表
2.4 有序表
2.5 順序表和鏈表的綜合比較
解題指導與示例
習題
第3章 排序
3.1 排序的基本概念
3.2 簡單排序方法
3.2.1 插入排序
3.2.2 起泡排序
3.3 先進排序方法
3.3.1 快速排序
3.3.2 歸并排序
3.3.3 堆排序
3.4 基數(shù)排序
3.5 各種排序方法的綜合比較
解題指導與示例
習題
第4章 棧和隊列
4.1 棧
4.1.1 棧的結構特點和操作
4.1.2 棧的表示和操作的實現(xiàn)
4.2 棧的應用舉例
4.3 隊列
4.3.1 隊列的結構特點和操作
4.3.2 隊列的表示和操作的實現(xiàn)
4.4 隊列應用舉例
解題指導與示例
習題
第5章 串和數(shù)組
5.1 串的定義和操作
5.2 串的表示和實現(xiàn)
5.2.1 定長順序存儲表示
5.2.2 堆分配存儲表示
5.2.3 塊鏈存儲表示
5.3 正文模式匹配
5.4 正文編輯--串操作應用舉例
5.5 數(shù)組
5.5.1 數(shù)組的定義和操作
5.5.2 數(shù)組的順序表示和實現(xiàn)
5.5.3 數(shù)組的應用
5.6 矩陣的壓縮存儲
5.6.1 特殊形狀矩陣的存儲表示
5.6.2 隨機稀疏矩陣的存儲壓縮
解題指導與示例
習題
第6章 二叉樹和樹
6.1 二叉樹
6.1.1 二叉樹的定義和基本術語
6.1.2 二叉樹的幾個基本性質
6.1.3 二叉樹的存儲結構
6.2 二叉樹遍歷
6.2.1 問題的提出
6.2.2 遍歷算法描述
6.2.3 二叉樹遍歷應用舉例
6.2.4 線索二叉樹
6.3 樹和森林
6.3.1 樹和森林的定義
6.3.2 樹和森林的存儲結構
6.3.3 樹和森林的遍歷
6.4 樹的應用
6.4.1 堆排序的實現(xiàn)
6.4.2 二叉排序樹
6.4.3 赫夫曼樹及其應用
解題指導與示例
習題
第7章 圖和廣義表
7.1 圖的定義和術語
7.2 圖的存儲結構
7.2.1 圖的數(shù)組(鄰接矩陣)存儲表示
7.2.2 圖的鄰接表存儲表示
7.3 圖的遍歷
7.3.1 深度優(yōu)先搜索遍歷圖
7.3.2 廣度優(yōu)先搜索遍歷圖
7.4 連通網(wǎng)的最小生成樹
7.5 單源最短路徑
7.6 拓撲排序
7.7 關鍵路徑
7.8 廣義表
7.8.1 廣義表的定義
7.8.2 廣義表的存儲結構
7.8.3 廣義表的遍歷
解題指導與示例
習題
第8章 查找表
8.1 靜態(tài)查找表
8.1.1 順序查找
8.1.2 折半查找
8.1.3 分塊查找
8.2 動態(tài)查找表
8.2.1 二叉查找樹
8.2.2 鍵樹
8.3 哈希表及其查找
8.3.1 什么是哈希表
8.3.2 構造哈希函數(shù)的幾種方法
8.3.3 處理沖突的方法和建表示例
8.3.4 哈希表的查找及其性能分析
8.3.5 哈希表的應用舉例
解題指導與示例
習題
第9章 文件
9.1 基本概念
9.1.1 外存儲器簡介
9.1.2 有關文件的基本概念
9.2 順序文件
9.2.1 存儲在順序存儲器上的文件
9.2.2 存儲在直接存儲器上的文件
9.3 索引文件
9.3.1 B樹
9.3.2 B?+ 樹和索引順序文件
9.4 哈希文件
9.4.1 文件組織方式
9.4.2 文件的操作
9.5 多關鍵碼文件
9.5.1 倒排文件
9.5.2 索引鏈接文件
解題指導與示例
習題
第10章 數(shù)據(jù)結構程序設計示例
10.1 抽象數(shù)據(jù)類型
10.2 從問題到程序的求解過程
10.2.1 建立數(shù)據(jù)結構模型設計抽象數(shù)據(jù)類型
10.2.2 算法設計
10.2.3 實現(xiàn)抽象數(shù)據(jù)類型
10.2.4 編制程序代碼并進行靜態(tài)測試和動態(tài)調試
10.3 程序的規(guī)范說明
10.4 應用示例分析
10.4.1 含并、交和差運算的集合類型
10.4.2 最佳任務分配方案求解
10.4.3 排隊問題的系統(tǒng)仿真
10.4.4 十進制四則運算計算器
10.4.5 自行車零部件庫的庫存模型
10.4.6 教務課程計劃的輔助制定
10.4.7 一個小型全文檢索模型
10.4.8 汽車牌照的快速查找
實習題
實習一 鏈表的維護與文件形式的保存
實習二 用回溯法求解“穩(wěn)定婚配”問題
實習三 以隊列實現(xiàn)的仿真技術預測理發(fā)館的經(jīng)營狀況
實習四 利用樹形結構的搜索算法模擬因特網(wǎng)域名的查詢
實習五 管道鋪設施工的最佳方案選擇
實習六 使用哈希表技術判別兩個源程序的相似性
附錄 算法一覽表
參考文獻