內容介紹
本書是數據結構和算法領域的經典之作,十餘年來,暢銷不衰!全書共分為三部分:第一部分首先介紹了數據結構和算法的概念,以及使用它們的原因和意義,然後講解了數據結構和算法中最常用的技術——指針和遞歸,最後還介紹了算法的分析方法,旨在為讀者學習這本書打下堅實的基礎;第二部分對鍊表、棧、佇列、集合、哈希表、堆、圖等常用數據結構進行了深入闡述;第三部分對排序、搜尋數值計算、數據壓縮、數據加密、圖算法、幾何算法等經典算法進行了精闢的分析和講解。本書的眾多特色使得它在同類書中獨樹一幟:具體實現都採用正式的C語言代碼而不是偽代碼,在很多數據結構和算法的實現過程中,有大量細節問題是偽代碼不能解決的;每一章都有精心組織的主題和套用;全部示例來自真實的套用,不只是一般的練習;對每種數據結構、算法和示例都進行了詳細分析;每一章的末尾都會有一系列問題和對應的回答,旨在強調這一章的重要思想……
本書中的代碼尤為值得強調:所有實現都採用C語言編寫,所有代碼都優先用於教學目的,所有代碼都在4種平台上經過完整測試,頭檔案記錄了所有公共的接口,命名規則適用於全書所有的代碼,所有的代碼都包含大量注釋……
本書內容包括:
· 數據結構和算法的概念,以及使用它們的原因和意義
· 指針和遞歸
· 算法分析
· 常用數據結構:鍊表、棧、佇列、集合、哈希表、樹、堆、優先權佇列以及圖
· 排序和搜尋
· 數值計算
· 數據壓縮
· 數據加密
· 圖算法
· 幾何算法
作者介紹
Kyle Loudon是美國加州洛斯加托斯Jeppesen Dataplan公司的一名軟體工程師,主管圖形接口開發小組,主攻航跡規劃軟體的研發,這些軟體主要用於商業航空公司、私營航空部門和其他一些航空製造業。在來到Jeppesen之前,Kyle在IBM公司是一名系統程式設計師。在技術上,Kyle主要對作業系統、網路、人機互動等領域感興趣。1992年,Kyle在普渡大學拿到了計算機科學學士學位,並取得了法語的第二學位,同時他還被選入斐陶斐榮譽學會(美國大學優等生之榮譽學會)。他在普渡大學計算機系教了三年的計算機課程。在這期間,他完成了他個人的第一本書《Understanding Computers》,這本書用理論結合實踐的方式介紹計算機的方方面面。如今,儘管他繼續工作在矽谷的軟體業,但他仍然堅韌不拔地在追求一個更高的學位。除了計算機,Kyle多年來喜歡打網球、教網球。他還喜歡山地騎行、滑冰,偶爾也和朋友們一起參加高爾夫課程。另外,Kyle還喜歡各種形式的戲劇、美食,以及某些風格的音樂和藝術;他期望成為鋼琴家和藝術家,但希望渺茫。他現在在Jeppesen的工作是從他1992年開始駕駛飛機之後找到的。現在,他是一個擁有美國聯邦航空局頒發的商業飛行員執照的飛行員。
作品目錄
1. 前言2. 第1部分 預備知識
3. 第1章 概述
4. 數據結構簡介
5. 算法簡介
6. 小酌軟體工程
7. 如何使用本書
8. 第2章 指針操作
9. 指針基礎
10. 存儲空間分配
11. 數據集合與指針的算術運算
12. 作為函式參數的指針
13. 泛型指針與類型轉換
14. 函式指針
15. 問與答
16. 相關主題
17. 第3章 遞歸
18. 基本遞歸
19. 尾遞歸
20. 問與答
21. 相關主題
22. 第4章 算法分析
23. 最壞情況分析
24. O表示法
25. 計算的複雜度
26. 實例分析:插入排序
27. 問與答
28. 相關主題
29. 第2部分 數據結構
30. 第5章 鍊表
31. 單鍊表介紹
32. 單鍊表接口的定義
33. 單鍊表的實現與分析
34. 使用鍊表的例子:頁幀管理
35. 雙向鍊表介紹
36. 雙向鍊表接口的定義
37. 雙向鍊表的實現與分析
38. 循環鍊表介紹
39. 循環鍊表接口的定義
40. 循環鍊表的實現與分析
41. 使用循環鍊表的例子:第二次機會頁面置換法
42. 問與答
43. 相關主題
44. 第6章 棧和佇列
45. 棧的描述
46. 棧的接口定義
47. 棧的實現與分析
48. 佇列的描述
49. 佇列的接口定義
50. 佇列的實現與分析
51. 佇列示例:事件處理
52. 問與答
53. 相關主題
54. 第7章 集合
55. 集合介紹
56. 集合的性質
57. 集合接口的定義
58. 集合抽象數據類型的實現和分析
59. Set示例:集合覆蓋
60. 問與答
61. 相關主題
62. 第8章 哈希表
63. 鏈式哈希表的描述
64. 鏈式哈希表的接口定義
65. 鏈式哈希表的實現與分析
66. 鏈式哈希表的例子:符號表
67. 開地址哈希表的描述
68. 開地址哈希函式的接口定義
69. 開地址哈希表的實現與分析
70. 問與答
71. 相關主題
72. 第9章 樹
73. 二叉樹介紹
74. 二叉樹的接口定義
75. 二叉樹的實現與分析
76. 二叉樹示例:表達式處理
77. 二叉搜尋樹介紹
78. 二叉搜尋樹的接口定義
79. 二叉搜尋樹的實現與分析
80. 問與答
81. 相關主題
82. 第10章 堆和優先佇列
83. 堆的描述
84. 堆的接口定義
85. 堆的實現與分析
86. 優先佇列的描述
87. 優先佇列的接口定義
88. 優先佇列的實現與分析
89. 優先佇列的示例:包裹分揀
90. 問與答
91. 相關主題
92. 第11章 圖
93. 圖的描述
94. 圖的接口定義
95. 圖的實現與分析
96. 關於圖的套用舉例:計算網路跳數
97. 關於圖的套用舉例:拓撲排序
98. 問與答
99. 相關主題
100. 第3部分 算法
101. 第12章 排序和搜尋
102. 插入排序的描述
103. 插入排序的接口定義
104. 插入排序的實現與分析
105. 快速排序的描述
106. 快速排序的接口定義
107. 快速排序的實現與分析
108. 快速排序的例子:目錄列表
109. 歸併排序的描述
110. 歸併排序的接口定義
111. 歸併排序的實現與分析
112. 計數排序的描述
113. 計數排序的接口定義
114. 計數排序的實現與分析
115. 基數排序的描述
116. 基數排序的接口定義
117. 基數排序的實現與分析
118. 二分查找的描述
119. 二分查找的接口定義
120. 二分查找的實現與分析
121. 二分查找的例子:拼寫檢查器
122. 問與答
123. 相關主題
124. 第13章 數值計算
125. 多項式插值法
126. 多項式插值的接口定義
127. 多項式插值的實現與分析
128. 最小二乘估計法
129. 最小二乘估計的接口定義
130. 最小二乘估計的實現和分析
131. 方程求解介紹
132. 方程求解的接口定義
133. 方程求解的實現與分析
134. 問與答
135. 相關主題
136. 第14章 數據壓縮
137. 位操作的描述
138. 位操作的接口定義
139. 位操作的實現與分析
140. 霍夫曼編碼的描述
141. 霍夫曼編碼的接口定義
142. 霍夫曼編碼的分析與實現
143. 霍夫曼編碼的例子:網路最佳化
144. LZ77的描述
145. LZ77的接口定義
146. LZ77的實現與分析
147. 問與答
148. 相關主題
149. 第15章 數據加密
150. DES算法介紹
151. DES的接口定義
152. DES算法的實現和分析
153. DES套用舉例:分組加密模式
154. RSA算法介紹
155. RSA的接口定義
156. RSA算法的實現與分析
157. 問與答
158. 相關主題
159. 第16章 圖算法
160. 最小生成樹的描述
161. 最小生成樹的接口定義
162. 最小生成樹的實現與分析
163. 最短路徑的描述
164. 最短路徑的接口定義
165. 最短路徑的實現與分析
166. 最短路徑的例子:路由表
167. 旅行商問題的描述
168. 旅行商問題的接口定義
169. 旅行商問題的實現與分析
170. 問與答
171. 相關主題
172. 第17章 幾何算法
173. 測試線段是否相交
174. 測試線段是否相交的標準方法
175. 檢測線段是否相交的接口定義
176. 檢測線段是否相交的實現與分析
177. 凸包簡介
178. Jarvis’s March
179. 凸包的接口定義
180. 凸包的實現與分析
181. 球面弧長
182. 求解球面弧長的接口定義
183. 求解球面弧長的實現和分析
184. 球面弧長的套用舉例:地球上兩點之間的近似距離
185. 問與答
186. 相關主題