數據結構(C++版)(第二版)
-
【作 者】李根強
【I S B N 】978-7-5084-6558-6
【責任編輯】張玉玲
【適用讀者群】本科
【出版時間】2009-05-01
【開 本】16開本
【裝幀信息】平裝(光膜)
【版 次】第2版
【頁 數】268
【千字數】
【印 張】
【定 價】¥26
【叢 書】普通高等教育“十一五”國家級規劃教材
【備注信息】
簡介
本書特色
前言
章節列表
精彩閱讀
下載資源
相關圖書
本書為普通高等教育“十一五”國家級規劃教材。
全書從軟件開發設計的角度出發,按照面向對象程序設計思想,詳細介紹線性表、棧和隊列、串、多維數組和廣義表、樹、圖等不同的數據結構,以及這些數據結構在計算機中的存儲表示和不同存儲表示上的算法實現。每個算法都用C++語言進行描述,并全部上機在Visual C++ 6.0環境下運行通過。另外介紹計算機中常用的兩種運算:查找和排序,詳細介紹不同的查找、排序運算的實現及各種算法的效率分析。最后介紹文件的基本概念和文件的組織形式。本書是在2005年第一版的基礎上,做了一定的修改,增加了相應的功能,涵蓋了碩士研究生數據結構考試大綱所規定的考試內容。
本書配套的《數據結構(C++版)(第二版)習題解答及實訓指導》一書同時出版,既方便教學,又便于自學。
本書可以作為計算機類或信息類相關專業本科或專科教材及碩士研究生考試參考資料,也可以作為自學數據結構人員的參考資料,還可供從事計算機工程與應用工作的科技人員參考。
1.在2005年第1版的基礎上,做了一定的修改,增加了相應的功能,涵蓋了碩士研究生數據結構考試大綱所規定的考試內容。
2.配套有《數據結構(C++版)習題解答及實訓指導》,既方便教學,又便于自學。
3.配有電子教案、源程序及相關文件
第二版前言
“數據結構”是計算機專業及相關專業的一門重要專業基礎課,也是一門必修的核心課程,并且已成為其他理工專業的熱門選修課。
在計算機科學的各領域中,都要使用到各種不同的數據結構,如編譯系統中要使用棧、散列表、語法樹等;操作系統中要使用隊列、存儲管理表、目錄樹等;數據庫系統中要使用線性表、鏈表、索引樹等;人工智能中要使用廣義表、檢索樹、有向圖等;同樣在面向對象的程序設計、計算機圖形學、軟件工程、多媒體技術、計算機輔助設計等領域,都會用到各種不同的數據結構。因此,學好數據結構,對從事計算機技術及相關領域工作的人員來說,是非常重要的,它可以使你掌握各種常用的數據結構及其算法實現,以及每一種算法的時間復雜度分析和空間復雜度分析,知道在什么情況下使用什么樣的數據結構最方便,為以后研究和開發大型程序打下基礎。
數據結構的主要任務是:討論現實世界中的各種數據(數字、字符、字符串、聲音、圖形、圖像等)的邏輯結構、在計算機中的各種存儲結構(存儲表示)以及對各種非數值運算的算法實現;分析各種不同算法的好壞及其在什么地方應用比較合適。通過數據結構課程的學習,使學生具備用所學的數據結構來解決實際問題及評價算法優劣的能力,為以后學習后續計算機專業課程及走上工作崗位從事計算機大型軟件開發鋪路。
本書是在延續2005年第一版編寫風格的基礎上,根據作者多年教學與研發經驗,并考慮到讀者使用后的反饋信息,對各章節內容、結構等進行了適當修訂、調整、完善和補充,增加了相應的功能,涵蓋了碩士研究生數據結構考試大綱所規定的考試內容。
全書內容共分11章,第1章介紹數據結構與算法等一些基本術語,并對算法描述及算法分析作了簡單說明,介紹衡量算法優劣的主要因素:時間復雜度和空間復雜度的求法;第2章到第4章,介紹線性結構(線性表、棧、隊列、串)的邏輯特征、一些常用算法的實現及基本應用;第5章到第7章,介紹非線性結構(多維數組、廣義表、樹、二叉樹、圖)的邏輯特征、在計算機中的存儲表示及一些常用算法的實現及基本應用;第8章到第10章,介紹在計算機中使用非常廣泛的兩種運算:查找和排序,排序又可以分為內排序和外排序。對一些常用的查找、排序方法進行了詳細說明,并給出了實現的算法及時間復雜度和空間復雜度分析;第11章介紹外存的文件的幾種存儲形式及組織方式。各章內容有相對獨立的部分,可便于不同院校不同專業按需要組織教學。全書側重于數據結構的應用,力求講授內容與具體的計算機應用實例相結合,以便于學生加深對各章內容的理解和掌握。
本書的最大特點是采用面向對象的程序設計語言(C++語言)作為算法的描述語言,所有算法都已經上機調試通過。但是,由于篇幅所限,大部分算法都是以單獨的函數形式給出,若讀者要運行這些算法,還必須給出一些變量的說明及主函數來調用所給的函數。因此,本書中的算法描述比原來數據結構教材中用類Pascal語言或類C語言描述算法更直觀,學生更容易理解和接受。作者在十幾年的數據結構課程教學中,對數據結構中的各種算法進行了認真的研究和分析,在這方面積累了豐富的經驗,因此,本書中所選的例題和習題都具有一定的針對性,都是針對特定的數據結構來進行描述的,方便學生理解和接受,并能為復雜的數據結構算法描述架橋鋪路。
本書中所有算法都在Visual C++ 6.0環境下運行通過(由于篇幅所限,本書中僅給出了實現某功能算法的函數)。為了方便教學,本書免費為授課教師提供用PowerPoint制作的電子教案,教師在使用時可以根據需要進行必要的修改。
本書可以作為高等院校計算機類或信息類相關專業數據結構課程教材,建議講授課時為50至60學時,上機實踐課時為20至30學時。各院校、各位教師可根據自己學校的專業特點和學生的實際情況適當增刪,目錄中前面打*號的可以作為選講內容。
與本書配套的《數據結構(C++版)(第二版)習題解答及實訓指導》一書同時出版,其中提供配套的習題及解答,并配備有數據結構的上機實驗指導,可以作為學習指導手冊。
本書由李根強任主編,負責全書的統稿、修改、定稿工作,倪飛舟、鐘志水、郭清溥任副主編。主要編寫人員分工如下:史瑞芳編寫了第1、11章,倪飛舟編寫了第2、3章,鐘志水編寫了第4、5章,李根強編寫了第6~8章,郭清溥編寫9、10章。參考本書部分編寫工作的還有:王剛、汪貴生、姚?、謝月娥、蔡益紅、杜四春、銀紅霞、袁雋媛、秦志、滿淑穎、杜景紅等。
由于時間倉促及編者水平有限,書中不妥或錯誤之處在所難免,懇請專家和廣大讀者批評指正。
第一版前言
第1章 緒論 1
1.1 什么是數據結構 1
1.1.1 數據結構示例 1
1.1.2 基本術語 2
1.1.3 數據結構 3
1.2 算法描述 5
1.2.1 基本概念 5
1.2.2 算法描述 5
1.3 算法分析 6
1.3.1 時間復雜度 7
1.3.2 空間復雜度 8
本章小結 8
習題1 9
第2章 線性表 14
2.1 線性表的定義及其運算 14
2.1.1 線性表的定義 14
2.1.2 線性表的運算 15
2.1.3 線性表的抽象數據類型描述 15
2.2 線性表的順序存儲結構 16
2.2.1 順序表結構 16
2.2.2 順序表運算 17
2.2.3 順序表存儲空間的動態分配 20
2.3 線性表的鏈式存儲結構 21
2.3.1 單鏈表結構 21
2.3.2 單鏈表運算 22
2.3.3 循環鏈表結構 27
2.3.4 雙向鏈表結構 29
2.4 一元多項式的表示及相加 31
2.4.1 一元多項式的表示 31
2.4.2 一元多項式的相加 32
2.5 順序表與鏈表的比較 34
2.6 算法應用舉例 35
本章小結 37
習題2 38
第3章 棧和隊列 40
3.1 棧 40
3.1.1 棧的定義 40
3.1.2 棧的運算 41
3.1.3 棧的抽象數據類型描述 41
3.1.4 順序棧 41
3.1.5 鏈棧 45
3.1.6 棧的應用 46
3.2 隊列 52
3.2.1 隊列的定義 52
3.2.2 隊列的基本運算 52
3.2.3 隊列的抽象數據類型描述 52
3.2.4 循環隊列 53
3.2.5 鏈隊列 56
3.2.6 隊列的應用 58
本章小結 58
習題3 58
第4章 串 61
4.1 串的定義及運算 61
4.1.1 基本概念 61
4.1.2 串的運算 62
4.1.3 串的抽象數據類型描述 62
4.2 串的存儲結構 62
4.2.1 順序存儲 62
4.2.2 鏈式存儲 64
4.2.3 索引存儲 65
4.3 串運算的實現 65
4.3.1 串插入 65
4.3.2 串刪除 67
4.3.3 子串定位 68
4.4 串操作應用舉例 70
4.4.1 文本編輯 70
4.4.2 建立詞索引表 72
本章小結 72
習題4 72
第5章 多維數組和廣義表 74
5.1 多維數組 74
5.1.1 多維數組的概念 74
5.1.2 多維數組在計算機內的存儲 75
5.2 多維數組的存儲結構 75
5.2.1 行優先順序 75
5.2.2 列優先順序 76
5.3 特殊矩陣及其壓縮存儲 76
5.3.1 特殊矩陣 76
5.3.2 壓縮存儲 77
5.4 稀疏矩陣 79
5.4.1 稀疏矩陣的存儲 80
5.4.2 稀疏矩陣的運算 82
5.5 廣義表 91
5.5.1 基本概念 91
5.5.2 存儲結構 92
5.5.3 基本運算 94
本章小結 96
習題5 96
第6章 樹和二叉樹 99
6.1 樹的基本概念 99
6.1.1 樹的定義 99
6.1.2 基本術語 100
6.1.3 樹的表示 101
6.1.4 樹的性質 102
6.2 二叉樹 102
6.2.1 二叉樹的定義 102
6.2.2 二叉樹的性質 103
6.2.3 二叉樹的存儲結構 105
6.2.4 二叉樹的抽象數據類型 108
6.3 遍歷二叉樹 108
6.3.1 前根遍歷 109
6.3.2 中根遍歷 110
6.3.3 后根遍歷 111
6.3.4 遍歷算法應用舉例 113
6.4 線索二叉樹 117
6.4.1 線索的概念 117
6.4.2 線索的描述 118
6.4.3 線索的算法實現 120
6.4.4 線索二叉樹上的運算 120
6.5 樹和森林 123
6.5.1 樹的存儲結構 123
6.5.2 樹、森林和二叉樹的轉換 125
6.5.3 樹和森林的遍歷 127
6.6 回溯法與樹的遍歷 128
6.7 哈夫曼樹 129
6.7.1 基本術語 129
6.7.2 哈夫曼樹簡介 129
6.7.3 哈夫曼樹的應用 133
本章小結 133
習題6 134
第7章 圖 137
7.1 圖的基本概念 137
7.1.1 圖的定義 137
7.1.2 圖的基本術語 137
7.2 圖的存儲結構 140
7.2.1 鄰接矩陣 140
7.2.2 鄰接表 143
7.2.3 鄰接多重表 147
7.3 圖的遍歷 148
7.3.1 深度優先搜索遍歷 148
7.3.2 廣度優先搜索遍歷 153
7.4 生成樹和最小生成樹 157
7.4.1 基本概念 157
7.4.2 普里姆(prim)算法 158
7.4.3 克魯斯卡爾(kruskal)算法 161
7.5 最短路徑 164
7.5.1 單源點最短路徑 164
7.5.2 所有頂點對之間的最短路徑 167
7.6 有向無環圖及其應用 170
7.6.1 拓撲排序 171
7.6.2 關鍵路徑 175
本章小結 179
習題7 180
第8章 查找 183
8.1 查找的基本概念 183
8.2 線性表的查找 184
8.2.1 順序查找 184
8.2.2 二分查找 185
8.2.3 索引查找 188
8.2.4 分塊查找 192
8.3 樹表查找 193
8.3.1 二叉排序樹查找 193
8.3.2 平衡二叉樹查找 198
8.3.3 B樹及B樹上的查找 202
8.3.4 鍵樹 204
8.4 散列查找 204
8.4.1 基本概念 204
8.4.2 散列函數的構造 205
8.4.3 解決沖突的方法 207
8.4.4 散列查找算法的實現 210
8.4.5 散列查找的性能分析 212
本章小結 214
習題8 215
第9章 內排序 216
9.1 基本概念 216
9.1.1 排序介紹 216
9.1.2 基本概念 217
9.2 插入排序 218
9.2.1 直接插入排序 218
9.2.2 二分插入排序 219
9.2.3 希爾排序 220
9.3 交換排序 221
9.3.1 冒泡排序 221
9.3.2 快速排序 223
9.4 選擇排序 225
9.4.1 直接選擇排序 225
9.4.2 樹型選擇排序 226
9.4.3 堆排序 227
9.5 歸并排序 232
9.5.1 二路歸并排序 232
9.5.2 多路歸并排序 234
9.6 分配排序 234
9.6.1 多關鍵字排序 234
9.6.2 鏈式基數排序 235
9.7 各種內排序方法的比較和選擇 238
9.7.1 各種內排序方法的比較 238
9.7.2 各種內排序方法的選擇 238
本章小結 239
習題9 239
第10章 外排序 241
10.1 外排序的基本概念 241
10.2 多路平衡歸并的實現 242
10.2.1 初始歸并段的生成 242
10.2.2 多路平衡歸并的實現 244
本章小結 249
習題10 249
第11章 文件 250
11.1 文件的基本概念 250
11.2 順序文件 250
11.3 索引文件 251
11.4 ISAM文件和VSAM文件 252
11.4.1 ISAM文件 252
11.4.2 VSAM文件 253
11.5 散列文件 253
11.6 多關鍵字文件 254
11.6.1 多重表文件 255
11.6.2 倒排文件 256
本章小結 256
習題11 257
參考文獻 258
- 數據結構(Python語言描述) [曹岳輝 劉衛國 康松林 編著]
- 數據結構——C語言(微課版) [主編 梁海英]
- 數據結構(C語言版)習題解答及實訓指導 [李根強 謝月娥]
- 數據結構(C語言版) [主編 李根強 劉浩 謝月娥]
- 數據結構(Java版) [主編 李云平]
- 數據結構 [主編 韓利凱 朱浩悅]
- 數據結構(C語言版)(第三版) [主編 庫波 曹靜]
- 數據結構(Java版) [孫琳 張宇]
- 數據結構 [許繪香 段明義]
- 數據結構(C語言描述) [李素若 陳萬華 游明坤 編著]
- 數據結構習題解答及上機指導 [李素若 琚輝 嚴永松 編著]
- 數據結構(C++描述)習題解答及實習指導 [李根強 謝月娥 主編]
- 數據結構(C語言版)學習指導與習題解答 [趙堅 姜梅 主編]
- 數據結構 [陸勤 主編 ]
- 數據結構(C++描述) [李根強 主 編]
- 數據結構(C++版)--習題解答及實習指導 [李根強 主編]
- 數據結構算法--Visual C++ 6.0程序集 [侯識忠 等編著]
- 數據結構算法--C++ Builder 6.0程序集 [侯識忠 等編著]
- 數據結構(C語言版)學習指導與習題解答 [趙堅 姜梅 主編]
- 數據結構(C語言版) [趙堅 姜梅 主編]
- 數據結構(C語言描述) [斯慶巴拉 主編]
- 數據結構(C++版)(第二版)習題解答及實訓指導 [李根強]
- 數據結構——用C語言描述 [蔡明志 編著]
- 數據結構(C++版) [李根強 主編]
- 數據結構--用C語言描述(第二版) [寧正元 易金聰 編著]
- 數據結構(C語言描述) [馬秋菊 主編]
- 數據結構(C/C++描述) [阮宏一 主編]
- 數據結構--C語言描述(第二版) [王路群 主編]
- 數據結構、算法與應用(Java語言描述) [[美]Sartaj Sahni(薩爾塔杰.薩]
- 數據結構實驗程序 [智東杰 主 編]