圖書簡介,圖書目錄,
圖書簡介
本書主要講解如何將數據結構概念用C++程式語言進行實作。本書將複雜的理論結合圖文並茂的解說方式,並搭配豐富的圖表及範例介紹,將數據結構中重要的觀念及演算方法加以詮釋,集中學習焦點。本書適合數據結構的初學者使用,也可以作為計算機相關專業的教科書。
圖書目錄
第1章 數據結構導論 1
1.1 數據結構簡介 2
1.1.1 數據結構的套用 2
1.1.2 算法 4
1.1.3 算法的描述工具 5
1.2 認識程式設計 7
1.2.1 高級程式設計語言 7
1.2.2 程式設計要領 8
1.3 程式設計的風格 8
1.3.1 自頂向下與模組化設計 8
1.3.2 可讀性設計 8
1.3.3 控制結構設計 9
1.3.4 面向對象設計 10
1.4 面向對象設計與C++ 12
1.4.1 C++的面向對象功能 12
1.4.2 類的基本概念 13
1.4.3 訪問許可權關鍵字 14
1.4.4 繼承關係 15
1.4.5 多態 16
1.5 遞歸算法 17
1.5.1 遞歸的定義 17
1.5.2 斐波拉契數列 19
1.5.3 漢諾塔問題 20
1.6 程式效率的分析 25
1.6.1 Big-oh 27
1.6.2 Ω(omega) 28
1.6.3 θ(theta) 28
本章習題 29
第2章 線性表 33
2.1 線性表的定義 34
2.1.1 線性表的用途 34
2.2 數組 35
2.2.1 一維數組 35
2.2.2 二維數組 37
2.2.3 多維數組 41
2.2.4 結構數組 45
2.2.5 C++的字元串 48
2.2.6 字元串數組 50
2.2.7 String類 51
2.2.8 指針數組 52
2.3 矩陣 54
2.3.1 ...
2.3.1矩陣的運算54
2.3.2稀疏矩陣57
2.3.3上三角形矩陣60
2.3.4下三角形矩陣62
2.3.5帶狀矩陣66
本章習題66
第3章鍊表70
3.1動態分配記憶體71
3.1.1C++的動態分配變數72
3.1.2動態配置數組73
3.2單向鍊表74
3.2.1單向鍊表的創建與遍歷74
3.2.2單向鍊表插入新節點76
3.2.3單向鍊表刪除節點78
3.2.4單向鍊表的反轉80
3.3環形鍊表82
3.3.1環形鍊表中插入新節點83
3.3.2環形鍊表節點的刪除84
3.3.3環形鍊表的連線功能86
3.4雙向鍊表87
3.4.1雙向鍊表的建立與遍歷87
3.4.2雙向鍊表中加入新節點88
3.4.3雙向鍊表節點的刪除90
3.5鍊表相關套用簡介91
3.5.1多項式表式法92
3.5.2稀疏矩陣表示法95
本章習題97
第4章堆疊與佇列103
4.1堆疊簡介104
4.1.1堆疊的基本操作105
4.1.2用數組實現堆疊105
4.1.3用鍊表實現堆疊107
4.1.4堆疊類樣板的實現108
4.1.5老鼠走迷宮109
4.1.6八皇后問題112
4.2算術表達式的表示法114
4.2.1中序轉為前序與後序115
4.2.2前序與後序轉為中序120
4.2.3中序表示法求值122
4.2.4前序法的求值運算124
4.2.5後序法的求值運算125
4.3佇列125
4.3.1佇列的基本操作126
4.3.2用數組實現佇列126
4.4佇列的相關套用129
4.4.1環形佇列129
4.4.2雙向佇列133
4.4.3優先佇列134
本章習題135
第5章樹狀結構147
5.1樹的基本概念148
5.1.1專有名詞介紹149
5.2二叉樹150
5.2.1二叉樹的特性150
5.2.2特殊二叉樹簡介152
5.3二叉樹的存儲方式153
5.3.1一維數組表示法153
5.3.2鍊表表示法155
5.4二叉樹的遍歷156
5.4.1中序遍歷157
5.4.2後序遍歷158
5.4.3前序遍歷158
5.4.4二叉樹節點的插入與刪除160
5.4.5二叉運算樹165
5.5線索二叉樹167
5.5.1二叉樹轉為線索二叉樹167
5.6樹的二叉樹表示法171
5.6.1樹轉化為二叉樹171
5.6.2二叉樹轉換成樹173
5.6.3森林化為二叉樹174
5.6.4二叉樹轉換成森林175
5.6.5樹與森林的遍歷176
5.6.6確定唯一二叉樹180
5.7最佳化二叉查找樹182
5.7.1擴充二叉樹182
5.7.2霍夫曼樹184
5.8平衡樹185
5.8.1平衡樹的定義185
5.9高級樹狀結構的研究187
5.9.1決策樹187
5.9.2B樹189
5.9.3二叉空間分割樹190
5.9.4四叉樹與八叉樹191
本章習題192
第6章圖形結構202
6.1圖形簡介203
6.1.1圖的定義204
6.1.2無向圖204
6.1.3有向圖206
6.2圖的數據表示法207
6.2.1鄰接矩陣法207
6.2.2鄰接表法210
6.2.3鄰接複合鍊表法212
6.2.4索引表格法214
6.3圖的遍歷217
6.3.1深度優先遍曆法217
6.3.2廣度優先遍曆法219
6.4生成樹221
6.4.1DFS生成樹和BFS生成樹222
6.4.2最小生成樹223
6.4.3Kruskal算法224
6.4.4Prim算法227
6.5圖的最短路徑228
6.5.1單點對全部頂點229
6.5.2兩兩頂點間的最短路徑232
6.6AOV網路與拓樸排序235
6.6.1拓樸排列簡介236
6.7AOE網路237
6.7.1關鍵路徑238
本章習題239
第7章排序248
7.1排序簡介249
7.1.1排序的分類250
7.2內部排序法251
7.2.1冒泡排序法251
7.2.2選擇排序法254
7.2.3插入排序法256
7.2.4希爾排序法258
7.2.5合併排序法260
7.2.6快速排序法260
7.2.7堆積排序法263
7.2.8基數排序法269
7.3外部排序法272
7.3.1直接合併排序法272
7.3.2k路合併法275
7.3.3多相合併法276
本章習題276
第8章查找286
8.1常見的查找方法287
8.1.1順序查找法287
8.1.2二分查找法288
8.1.3插值查找法290
8.1.4斐波那契查找法292
8.2哈希查找法295
8.2.1哈希法簡介296
8.3常見的哈希函式297
8.3.1除留餘數法297
8.3.2平方取中法297
8.3.3摺疊法298
8.3.4數字分析法299
8.4碰撞與溢出問題的處理300
8.4.1線性探測法300
8.4.2平方探測301
8.4.3再哈希301
8.4.4鍊表301
本章習題303
附錄AC/C++編譯程式的介紹與安裝309
A.1C/C++編譯程式簡介310
A.2DevC++的安裝與介紹313
附錄BC++程式設計語言簡介319
B.1C++語言的基本概念320
B.2C++語言的運算符與表達式323
B.3C++語言的流程控制327
B.4 C++語言的高級語法332
B.5C++語言與面向對象概念341
附錄C數據結構專有名詞索引349