第1章 數據結構的基本概念1
1.1 數據結構的概念和術語1
1.2 抽象數據類型3
1.2.1 數據類型3
1.2.2 數據抽象與抽象數據類型4
1.3 算法和算法分析5
1.3.1 算法5
1.3.2 算法設計的要求5
1.3.3 算法效率的度量6
1.4 面向對象概述8
1.4.1 面向對象的思想9
1.4.2 面向對象程序設計9
1.4.3 面向對象的語言9
1.4.4 面向對象的基本概念10
1.4.5 面向對象的基本特性11
1.5 本章小結13
習題113
第2章 C++初步知識14
2.1 C++語言14
2.2 數組14
2.2.1 一維數組15
2.2.2 二維數組17
2.2.3 字符數組和字符串20
2.3 指針24
2.3.1 指針的概念24
2.3.2 指針的定義24
2.3.3 指針的運算25
2.4 指針和數組27
2.4.1 指針與數組名27
2.4.2 指向數組的指針28
2.4.3 存儲指針的數組31
2.4.4 動態存儲32
2.5 結構34
2.5.1 結構類型的定義34
2.5.2 結構變量的說明35
2.5.3 結構成員的引用36
2.5.4 結構數組和結構指針37
2.6 函數39
2.6.1 函數的聲明、定義和調用40
2.6.2 函數的參數傳遞41
2.6.3 帶默認參數的函數42
2.6.4 內置函數43
2.6.5 函數的重載44
2.7 本章小結45
習題245
實驗訓練245
第3章 C++類及其對象的封裝性48
3.1 類的聲明和對象的定義48
3.1.1 聲明類類型48
3.1.2 定義對象的方法50
3.1.3 對象成員的引用51
3.2 類的成員函數52
3.2.1 成員函數的訪問屬性52
3.2.2 在類外定義成員函數52
3.2.3 內置成員函數53
3.2.4 成員函數的存儲方式54
3.3 構造函數和析構函數55
3.3.1 對象的初始化55
3.3.2 構造函數的作用55
3.3.3 帶參數的構造函數57
3.3.4 構造函數的重載58
3.3.5 拷貝構造函數58
3.3.6 析構函數59
3.4 相關特性61
3.4.1 引用61
3.4.2 友元67
3.4.3 運算符重載70
3.5 本章小結77
習題377
實驗訓練378
第4章 繼承性和多態性81
4.1 繼承與派生的概念81
4.1.1 派生類的聲明與構成81
4.1.2 派生類成員的訪問83
4.2 派生類的構造函數和析構函數87
4.2.1 簡單的派生類的構造函數87
4.2.2 有子對象的派生類的構造函數88
4.2.3 多級派生時的構造函數90
4.2.4 派生類的析構函數91
4.3 多繼承92
4.3.1 多繼承的聲明與使用92
4.3.2 多繼承引起的二義性問題94
4.3.3 虛基類的概念與使用96
4.4 多態性與虛函數99
4.4.1 多態的概念99
4.4.2 虛函數的定義與使用99
4.4.3 虛析構函數103
4.4.4 純虛函數與抽象類104
4.5 本章小結107
習題4107
實驗訓練4107
第5章 模板與標準模板庫112
5.1 模板112
5.1.1 模板的概念112
5.1.2 函數模板112
5.1.3 類模板117
5.2 標準模板庫120
5.3 序列式容器121
5.3.1 vector容器121
5.3.2 使用迭代器123
5.3.3 list容器124
5.4 關聯式容器125
5.4.1 pair類型126
5.4.2 map容器127
5.4.3 set容器128
5.5 本章小結130
習題5131
實驗訓練5131
第6章 線性表133
6.1 線性表的定義133
6.1.1 線性表的邏輯結構133
6.1.2 線性表的抽象類定義134
6.2 線性表的順序表示和實現135
6.2.1 線性表的順序表示135
6.2.2 順序表類的定義135
6.2.3 順序表類的實現136
6.3 線性表的鏈式表示和實現140
6.3.1 線性表的鏈式表示140
6.3.2 抽象鏈表類的定義140
6.3.3 抽象鏈表類各成員函數的實現142
6.4 單鏈表143
6.4.1 單鏈表的定義143
6.4.2 單鏈表類的定義144
6.4.3 單鏈表的常用成員函數的實現144
6.4.4 單鏈表舉例——一元多項式加法147
6.5 循環鏈表150
6.5.1 循環鏈表的定義150
6.5.2 循環鏈表類的定義150
6.5.3 循環鏈表常用函數的實現151
6.5.4 循環鏈表舉例——約瑟夫問題155
6.6 雙向鏈表155
6.6.1 雙向鏈表的定義155
6.6.2 雙向鏈表類的定義156
6.6.3 雙向鏈表的常用成員函數的實現157
6.7 本章小結161
習題6161
實驗訓練6162
第7章 堆棧、隊列和遞歸169
7.1 堆棧的概念及其運算169
7.2 抽象堆棧類的定義170
7.3 堆棧的定義及其實現170
7.3.1 順序棧的定義170
7.3.2 順序棧類的定義及典型成員函數
的實現171
7.3.3 多棧共享空間問題174
7.3.4 鏈棧的定義175
7.3.5 鏈式棧類的定義及典型成員函數
的實現176
7.4 堆棧的應用舉例179
7.4.1 數制轉換179
7.4.2 迷宮問題180
7.5 隊列的概念及其運算183
7.6 抽象隊列類的定義184
7.7 隊列的定義及其實現184
7.7.1 隊列的順序存儲結構184
7.7.2 循環隊列的定義186
7.7.3 順序循環隊列類的定義及常用
成員函數的實現187
7.7.4 鏈式隊列的定義189
7.7.5 鏈式隊列類的定義及常用成員
函數的實現190
7.7.6 鏈式隊列的應用舉例193
7.7.7 優先級隊列的定義194
7.7.8 優先級隊列類的定義及常用
成員函數的實現194
7.8 遞歸197
7.8.1 遞歸的概念197
7.8.2 遞歸的應用198
7.8.3 遞歸在計算機中的實現199
7.8.4 遞歸問題的非遞歸算法201
7.9 本章小結204
習題7204
實驗訓練7205
第8章 樹與二叉樹212
8.1 樹、二叉樹和森林的基本概念212
8.1.1 樹212
8.1.2 二叉樹213
8.1.3 樹與森林的存儲結構218
8.2 二叉樹的抽象類和樹的類222
8.2.1 二叉樹的抽象類222
8.2.2 樹的類227
8.3 二叉樹的遍歷和樹的遍歷233
8.3.1 二叉樹的遍歷233
8.3.2 樹的遍歷236
8.4 二叉排序樹239
8.5 二叉樹的計數244
8.6 哈夫曼樹及其應用244
8.6.1 優二叉樹244
8.6.2 哈夫曼編碼246
8.7 本章小結247
習題8247
實驗訓練8248
第9章 圖253
9.1 圖的基本概念253
9.1.1 圖的定義253
9.1.2 圖的術語254
9.1.3 圖的基本操作256
9.1.4 圖的存儲表示256
9.2 圖的抽象類260
9.2.1 圖的鄰接矩陣類261
9.2.2 圖的鄰接表類265
9.3 圖的遍歷271
9.3.1 深度優先搜索272
9.3.2 廣度優先搜索273
9.4 圖的連通性與小生成樹274
9.4.1 無向圖的連通分量和生成樹274
9.4.2 小生成樹274
9.4.3 關節點和重連通分量279
9.5 短路徑281
9.5.1 圖結點的可達性281
9.5.2 從某個源點到其余各頂點的 短路徑282
9.5.3 每一對頂點之間的短路徑284
9.6 活動網絡286
9.6.1 AOV網絡286
9.6.2 AOE網絡287
9.7 本章小結288
習題9289
實驗訓練9290
第10章 查找與散列結構300
10.1 基本概念300
10.2 靜態查找表301
10.2.1 順序表的查找301
10.2.2 有序表的查找303
10.2.3 索引順序表的查找305
10.3 動態查找表306
10.4 Hash表及其查找307
10.4.1 Hash表307
10.4.2 Hash函數的構造方法309
10.4.3 處理沖突的方法312
10.4.4 Hash表的查找及其分析313
10.5 本章小結315
習題10315
實驗訓練10316
第11章 排序324
11.1 排序的基本概念324
11.2 插入排序326
11.2.1 直接插入排序326
11.2.2 其他插入排序327
11.2.3 希爾排序330
11.3 快速排序331
11.4 選擇排序334
11.4.1 簡單選擇排序334