作者簡介
Sartaj Sahni,多年來一直從事數據結構和算法方面的研究和教育工作,具有豐富的教學經驗,曾獲得IEEE計算機協會1997年Taylor L. Booth教育獎。他撰寫了多部有關數據結構和算法方面的著作。本書是他在該領域為廣大讀者奉獻的又一力作 。
譯者簡介:
汪詩林,1968年3月生,國防科技大學計算機學院在職博士。近年來主要從事計算機軟體、資料庫、多媒體及虛擬現實等領域的教學和研究工作,獨立完成多項軟體研製任務,共發表教學和科研論文近30篇,獲部委級科技進步成果二等獎2項,三等獎4項,獲校級優秀教學成果三等獎1項。編寫及編譯教材各1部(《數字邏輯》、《最新人工智慧語言——CommonLisp及CLOS的系統開發方法》)。1997年參加全國第一屆863高級技術人才培訓班。
王廣芳,1938年2月生,國防科技大學計算機學院教授。多年來從事計算機軟體的教學工作和科研工作,特別是數據結構、作業系統的教學與研究工作。編著出版《數據結構》、《作業系統原理與方法》、((作業系統原理》等教材。曾獲國家級優秀教學成果一等獎1項,部委級優秀教學成果二等獎1項。參加多項有關計算機軟體的研製工作,特別是有關作業系統的研製工作,曾獲部委級科技進步一等獎2項、二等獎3項、3等獎2項。
內容簡介
《數據結構、算法與套用:C++語言描述》為數據結構與算法的繼續學習和研究奠定了一個堅實的基礎。更為可貴的是,《數據結構、算法與套用:C++語言描述》不僅僅介紹了理論知識,還提供了50多個套用實例及600多道練習題。
媒體評論
“縱覽全書可以看出作者具有豐富的教材編寫經驗。它是一本新的、有關
數據結構和
算法的教材,適合於當前計算機本科教學的需要。”
——Sang W.Lee,密西根大學
“注重套用不僅可以使課堂教學更生動,而且可以激勵學生投身於相關的套用。”
——Yu Lo C.Chang,新漢普郡大學
目錄
譯者序
前言
第一部分 預備知識
第1章 C++程式設計1
1.1 引言1
1.2 函式與參數2
1.2.1 傳值參數2
1.2.2 模板函式3
1.2.3 引用參數3
1.2.4 常量引用參數4
1.2.5 返回值4
1.2.6 遞歸函式5
1.3 動態存儲分配9
1.3.1 操作符new9
1.3.2 一維數組9
1.3.3 異常處理10
1.3.4 操作符delete10
1.3.5 二維數組10
1.4 類13
1.4.1 類Currency13
1.4.2 使用不同的描述方法18
1.4.3 操作符重載20
1.4.4 引發異常22
1.4.5 友元和保護類成員23
1.4.6 增加#ifndef, #define和#endif語句24
1.5 測試與調試24
1.5.1 什麼是測試24
1.5.2 設計測試數據26
1.5.3 調試28
1.6 參考及推薦讀物29
第2章 程式性能30
2.1 引言30
2.2 空間複雜性31
2.2.1 空間複雜性的組成31
2.2.2 舉例35
2.3 時間複雜性37
2.3.1 時間複雜性的組成37
2.3.2 操作計數37
2.3.3 執行步數44
2.4 漸進符號(O、 健?、 o)55
2.4.1 大寫O符號56
2.4.2 椒??58
2.4.3 符號59
2.4.4 小寫o符號60
2.4.5 特性60
2.4.6 複雜性分析舉例61
2.5 實際複雜性66
2.6 性能測量68
2.6.1 選擇實例的大小69
2.6.2 設計測試數據69
2.6.3 進行實驗69
2.7 參考及推薦讀物74
第二部分 數據結構
第3章 數據描述75
3.1 引言75
3.2 線性表76
3.3 公式化描述77
3.3.1 基本概念77
3.3.2 異常類NoMem79
3.3.3 操作79
3.3.4 評價83
3.4 鍊表描述86
3.4.1 類ChainNode 和Chain86
3.4.2 操作88
3.4.3 擴充類Chain91
3.4.4 鍊表遍歷器類92
3.4.5 循環鍊表93
3.4.6 與公式化描述方法的比較94
3.4.7 雙向鍊表95
3.4.8 小結96
3.5 間接定址99
3.5.1 基本概念99
3.5.2 操作100
3.6 模擬指針102
3.6.1 SimSpace的操作103
3.6.2 採用模擬指針的鍊表106
3.7 描述方法的比較110
3.8 套用111
3.8.1 箱子排序111
3.8.2 基數排序116
3.8.3 等價類117
3.8.4 凸包122
3.9 參考及推薦讀物127
第4章 數組和矩陣128
4.1 數組128
4.1.1 抽象數據類型128
4.1.2 C++數組129
4.1.3 行主映射和列主映射129
4.1.4 類Array1D131
4.1.5 類Array2D133
4.2 矩陣137
4.2.1 定義和操作137
4.2.2 類Matrix138
4.3 特殊矩陣141
4.3.1 定義和套用141
4.3.2 對角矩陣143
9.3.4 最大堆的初始化280
9.3.5 類MaxHeap281
9.4 左高樹285
9.4.1 高度與寬度優先的最大及最小左高樹285
9.4.2 最大HBLT的插入287
9.4.3 最大HBLT的刪除287
9.4.4 合併兩棵最大HBLT287
9.4.5 初始化最大HBLT289
9.4.6 類MaxHBLT289
9.5 套用293
9.5.1 堆排序293
9.5.2 機器調度294
9.5.3 霍夫曼編碼297
9.6 參考及推薦讀物302
第10章 競賽樹303
10.1 引言303
10.2 抽象數據類型WinnerTree306
10.3 類WinnerTree307
10.3.1 定義307
10.3.2 類定義307
10.3.3 構造函式、析構函式及Winner函式308
10.3.4 初始化贏者樹308
10.3.5 重新組織比賽310
10.4 輸者樹311
10.5 套用312
10.5.1 用最先匹配法求解箱子裝載問題312
10.5.2 用相鄰匹配法求解箱子裝載問題316
第11章 搜尋樹319
11.1 二叉搜尋樹320
11.1.1 基本概念320
11.1.2 抽象數據類型BSTree和IndexedBSTree321
11.1.3 類BSTree322
11.1.4 搜尋322
11.1.5 插入323
11.1.6 刪除324
11.1.7 類DBSTree326
11.1.8 二叉搜尋樹的高度327
11.2 AVL樹328
11.2.1 基本概念328
11.2.2 AVL樹的高度328
11.2.3 AVL樹的描述329
11.2.4 AVL搜尋樹的搜尋329
11.2.5 AVL搜尋樹的插入329
11.2.6 AVL搜尋樹的刪除332
11.3 紅-黑樹334
11.3.1 基本概念334
11.3.2 紅-黑樹的描述336
11.3.3 紅-黑樹的搜尋336
11.3.4 紅-黑樹的插入336
11.3.5 紅-黑樹的刪除339
11.3.6 實現細節的考慮及複雜性分析343
11.4 B-樹344
11.4.1 索引順序訪問方法344
11.4.2 m 叉搜尋樹345
11.4.3 m 序B-樹346
11.4.4 B-樹的高度347
11.4.5 B-樹的搜尋348
11.4.6 B-樹的插入348
11.4.7 B-樹的刪除350
11.4.8 節點結構353
11.5 套用354
11.5.1 直方圖354
11.5.2 用最優匹配法求解箱子裝載問題357
11.5.3 交叉分布359
11.6 參考及推薦讀物363
第12章 圖365
12.1 基本概念365
12.2 套用366
12.3 特性368
12.4 抽象數據類型Graph和Digraph370
12.5 無向圖和有向圖的描述371
12.5.1 鄰接矩陣371
12.5.2 鄰接壓縮表373
12.5.3 鄰接鍊表374
12.6 網路描述375
12.7 類定義376
12.7.1 不同的類376
12.7.2 鄰接矩陣類377
12.7.3 擴充Chain類380
12.7.4 類LinkedBase381
12.7.5 連結類382
12.8 圖的遍歷386
12.8.1 基本概念386
12.8.2 鄰接矩陣的遍歷函式387
12.8.3 鄰接鍊表的遍歷函式388
12.9 語言特性389
12.9.1 虛函式和多態性389
12.9.2 純虛函式和抽象類391
12.9.3 虛基類391
12.9.4 抽象類和抽象數據類型393
12.10 圖的搜尋算法394
12.10.1 寬度優先搜尋394
12.10.2 類Network395
12.10.3 BFS的實現395
12.10.4 BFS的複雜性分析396
12.10.5 深度優先搜尋397
12.11 套用399
12.11.1 尋找路徑399
12.11.2 連通圖及其構件400
12.11.3 生成樹402
第三部分 算法設計方法
第13章 貪婪算法405
13.1 最最佳化問題405
13.2 算法思想406
13.3 套用409
13.3.1 貨箱裝船409
13.3.2 0/1背包問題 410
13.3.3 拓撲排序412
13.3.4 二分覆蓋415
13.3.5 單源最短路徑421
13.3.6 最小耗費生成樹424
13.4 參考及推薦讀物433
第14章 分而治之算法434
14.1 算法思想434
14.2 套用440
14.2.1 殘缺棋盤440
14.2.2 歸併排序443
14.2.3 快速排序447
14.2.4 選擇452
14.2.5 距離最近的點對454
14.3 解遞歸方程462
14.4 複雜性的下限463
14.4.1 最小最大問題的下限464
14.4.2 排序算法的下限465
第15章 動態規劃467
15.1 算法思想467
15.2 套用469
15.2.1 0/1背包問題469
15.2.2 圖像壓縮471
15.2.3 矩陣乘法鏈476
15.2.4 最短路徑480
15.2.5 網路的無交叉子集483
15.2.6 元件摺疊486
15.3 參考及推薦讀物491
第16章 回溯492
16.1 算法思想492
16.2 套用496
16.2.1 貨箱裝船496
16.2.2 0/1背包問題503