數據結構——C語言描述(第三版)

數據結構——C語言描述(第三版)

《數據結構——C語言描述(第三版)》是2016年西安電子科技大學出版社出版的圖書,作者是陳慧南。

內容簡介

本書第二版及其配套教材為普通高等教育“十一五”國家級規劃教材。本次修訂除保留上版中的經典數據結構知識外,還增加了伸展樹跳表等新內容。本書結構嚴謹,內容深入淺出,反映了抽象、封裝和信息隱蔽等現代軟體設計理念,重視算法的時間和空間分析,包括搜尋和排序時間的下界分析。本書使用C語言描述。

本書重視實踐性和程式設計。書中算法都有完整的C程式,程式代碼構思精巧、結構清晰、注釋詳細,所有程式都已在TC 2.01下編譯通過並能正確運行。這些程式既是學習數據結構和算法的很好示例,也是很好的C程式設計示例。本書最後一章是實習指導和實習題,指導學生按軟體工程學的方法設計算法、編寫程式和書寫文檔。本書配有大量的實例和圖示,並有豐富的習題和實習題,易教易學。本書涵蓋計算機學科專業考研大綱數據結構部分的考查內容。

本書可作為計算機類、電子信息類、電氣類、自動化類、電子商務、信息管理與信息系統等相關專業數據結構課程的教材和考研參考書,也可供從事計算機軟體和套用工作的工程技術人員參考。

本書與西安電子科技大學出版社出版的《〈數據結構——C語言描述〉學習指導和習題解析》一書配合使用,效果更佳。

目錄

第1章 概論 1

1.1 什麼是數據結構 1

1.1.1 基本概念 1

1.1.2 數據的邏輯結構 2

1.1.3 數據的存儲結構 3

1.1.4 數據結構的運算 4

1.2 數據抽象和抽象數據類型 5

1.2.1 抽象、數據抽象和過程抽象 5

1.2.2 封裝與信息隱蔽 5

1.2.3 數據類型和抽象數據類型 5

1.2.4 數據結構與抽象數據類型 6

1.3 描述數據結構 7

1.3.1 數據結構的規範 7

1.3.2 實現數據結構 7

1.4 算法和算法分析 9

1.4.1 算法及其性能標準 9

1.4.2 算法的時間複雜度 10

1.4.3 漸近時間複雜度 12

1.4.4 最壞、最好和平均情況時間複雜度 13

1.4.5 算法的空間複雜度 13

小結 13

習題1 14

第2章 數組和鍊表 16

2.1 結構與聯合 16

2.1.1 結構 16

2.1.2 聯合 17

2.2 數組 18

2.2.1 一維數組 18

2.2.2 二維數組 18

2.2.3 多維數組 20

2.3 鍊表 20

2.3.1 指針 20

2.3.2 單鍊表 24

2.3.3 帶表頭結點的單鍊表 30

2.3.4 循環鍊表 31

2.3.5 雙向鍊表 31

小結 33

習題2 33

第3章 堆疊和佇列 35

3.1 堆疊 35

3.1.1 堆疊ADT 35

3.1.2 堆疊的順序表示 36

3.1.3 堆疊的連結表示 38

3.2 佇列 39

3.2.1 佇列ADT 39

3.2.2 佇列的順序表示 40

3.2.3 佇列的連結表示 43

*3.3 表達式的計算 43

3.3.1 表達式 43

3.3.2 中綴表達式轉換為後綴表達式 44

3.3.3 計算後綴表達式的值 48

*3.4 遞歸和遞歸過程 50

3.4.1 遞歸的概念 50

3.4.2 遞歸的實現 51

*3.5 演示和測試 53

小結 55

習題3 55

第4章 線性表和數組ADT 57

4.1 線性表 57

4.1.1 線性表ADT 57

4.1.2 線性表的順序表示 58

4.1.3 線性表的連結表示 61

4.1.4 兩種存儲表示的比較 65

*4.2 多項式的算術運算 65

4.2.1 多項式ADT 65

4.2.2 多項式的連結表示 66

4.2.3 多項式的輸入和輸出 67

4.2.4 多項式相加 69

4.3 數組作為抽象數據類型 70

4.4 特殊矩陣 71

4.4.1 對稱矩陣 71

*4.4.2 帶狀矩陣 72

4.5 稀疏矩陣 73

4.5.1 稀疏矩陣ADT 73

4.5.2 稀疏矩陣的順序表示 74

4.5.3 稀疏矩陣轉置 75

*4.5.4 稀疏矩陣相乘 78

4.5.5 稀疏矩陣的正交鍊表表示 81

*4.5.6 建立正交鍊表 83

*4.5.7 列印正交鍊表 84

小結 85

習題4 85

第5章 字元串和廣義表 87

5.1 字元串 87

5.1.1 字元串ADT 87

5.1.2 字元串的存儲表示 88

5.1.3 簡單模式匹配算法 89

*5.1.4 模式匹配的KMP算法 92

*5.2 廣義表 96

5.2.1 廣義表的概念 96

5.2.2 廣義表ADT 97

5.2.3 廣義表的存儲表示 98

5.2.4 廣義表的算法 99

小結 100

習題5 100

第6章 樹 101

6.1 樹的基本概念 101

6.1.1 樹的定義 101

6.1.2 基本術語 102

6.2 二叉樹 103

6.2.1 二叉樹的定義和性質 103

6.2.2 二叉樹ADT 105

6.2.3 二叉樹的存儲表示 106

6.2.4 二叉樹的遍歷 109

*6.2.5 二叉樹遍歷的非遞歸算法 113

*6.2.6 二叉樹遍歷的套用實例 115

*6.2.7 線索二叉樹 117

6.3 樹和森林 121

6.3.1 森林與二叉樹的轉換 121

6.3.2 樹和森林的存儲表示 122

6.3.3 樹和森林的遍歷 124

*6.4 堆和優先權佇列 125

6.4.1 堆 125

6.4.2 優先權佇列 128

6.5 哈夫曼樹和哈夫曼編碼 131

6.5.1 樹的路徑長度 131

6.5.2 哈夫曼樹和哈夫曼算法 132

6.5.3 哈夫曼編碼 134

*6.6 並查集和等價關係 136

6.6.1 並查集 136

6.6.2 並查集的實現 136

6.6.3 集合按等價關係分組 139

小結 140

習題6 140

第7章 集合和搜尋 142

7.1 集合及其表示 142

7.1.1 集合和搜尋 142

7.1.2 集合ADT 143

7.1.3 集合的表示 144

7.2 順序搜尋 144

7.3 二分搜尋 146

7.3.1 對半搜尋 147

7.3.2 二叉判定樹 148

*7.3.3 斐波那契搜尋 150

7.3.4 插值搜尋 151

7.4 分塊搜尋 152

*7.5 搜尋算法的時間下界 153

小結 154

習題7 154

第8章 搜尋樹 155

8.1 二叉搜尋樹 155

8.1.1 二叉搜尋樹的定義 155

8.1.2 二叉搜尋樹的搜尋 155

8.1.3 二叉搜尋樹的插入 156

8.1.4 二叉搜尋樹的刪除 158

*8.1.5 二叉搜尋樹的高度 160

8.2 二叉平衡樹 161

8.2.1 二叉平衡樹的定義 161

8.2.2 二叉平衡樹的平衡旋轉 162

8.2.3 二叉平衡樹的插入 168

8.2.4 二叉平衡樹的刪除 171

8.2.5 二叉平衡樹的高度 174

8.3 B-樹 174

8.3.1 m叉搜尋樹 174

8.3.2 B-樹的定義 176

8.3.3 B-樹的高度 176

8.3.4 B-樹的搜尋 177

8.3.5 B-樹的插入 177

8.3.6 B-樹的刪除 180

*8.4 鍵樹 182

8.4.1 鍵樹的定義 182

8.4.2 雙鏈樹 183

8.4.3 Trie樹 184

*8.5 伸展樹 185

小結 187

習題8 188

第9章 跳表和散列表 189

9.1 字典 189

*9.2 跳表 189

9.2.1 什麼是跳表 190

9.2.2 跳表的搜尋 193

9.2.3 跳表的插入 194

9.2.4 跳表的刪除 195

9.3 散列表 196

9.3.1 散列技術 196

9.3.2 散列函式 197

9.3.3 解決衝突的拉鏈法 198

9.3.4 解決衝突的線性探查法 199

9.3.5 解決衝突的其他開地址法 203

9.3.6 性能分析 205

小結 206

習題9 206

第10章 圖 207

10.1 圖的基本概念 207

10.1.1 圖的定義與術語 207

10.1.2 圖ADT 209

10.2 圖的存儲結構 210

10.2.1 矩陣表示法 210

10.2.2 鄰接表表示法 214

*10.2.3 正交鍊表和多重表表示法 217

10.3 圖的遍歷 219

10.3.1 深度優先遍歷 219

10.3.2 寬度優先遍歷 221

10.4 拓撲排序和關鍵路徑 223

10.4.1 拓撲排序 223

*10.4.2 關鍵路徑 227

10.5 最小代價生成樹 230

10.5.1 普里姆算法 231

*10.5.2 克魯斯卡爾算法 232

*10.6 最短路徑 234

10.6.1 單源最短路徑 235

10.6.2 所有頂點之間的最短路徑 238

小結 240

習題10 241

第11章 內排序 243

11.1 排序的基本概念 243

11.2 插入排序 244

11.2.1 直接插入排序 244

*11.2.2 希爾排序 248

11.2.3 對半插入排序 249

11.3 交換排序 249

11.3.1 冒泡排序 250

11.3.2 快速排序 251

11.4 合併排序 256

11.4.1 兩路合併排序 256

11.4.2 合併排序的疊代算法 256

*11.4.3 鍊表上的合併排序 258

11.5 選擇排序 261

11.5.1 簡單選擇排序 262

*11.5.2 堆排序 263

*11.6 排序算法的時間下界 264

*11.7 基數排序 265

小結 269

習題11 269

第12章 檔案和外排序 271

*12.1 輔助存儲器簡介 271

12.1.1 主存儲器和輔助存儲器 271

12.1.2 磁碟存儲器 271

12.2 檔案 273

12.2.1 檔案的基本概念 273

12.2.2 檔案的組織方式 273

12.2.3 C語言檔案 277

12.3 檔案的索引結構 278

12.3.1 靜態索引結構 278

12.3.2 動態索引結構 279

*12.4 外排序 280

12.4.1 外排序的基本過程 280

12.4.2 初始遊程的生成 280

12.4.3 多路合併 282

12.4.4 最佳合併樹 284

小結 285

習題12 286

第13章 實習指導和實習題 287

13.1 實習目的和要求 287

13.1.1 實習目的 287

13.1.2 實習要求 287

13.2 實習步驟 288

13.3 實習報告 288

13.4 實習題 289

實習1 數組操作 289

實習2 鍊表操作 290

實習3 表達式計算 290

實習4 佇列運算和用戶界面設計 291

實習5 線性表運算及套用 291

實習6 一元多項式的相加和相乘 291

實習7 對稱矩陣的壓縮存儲 292

實習8 稀疏矩陣的三元組表 292

實習9 稀疏矩陣的正交鍊表 292

實習10 字元串運算和文本處理 293

實習11 二叉樹的基本運算和套用 293

實習12 哈夫曼編碼和解碼系統 294

實習13 B-樹檢索 294

實習14 散列表檢索 295

實習15 圖運算及其套用 295

實習16 內排序算法及其性能比較 296

實習17 外排序 296

13.5 實習報告範例 297

13.5.1 實習題:表達式計算 297

13.5.2 實習報告 297

13.6 上機考核 303

13.6.1 考核目的 303

13.6.2 考核目標 303

13.6.3 考核要求 303

13.6.4 軟體環境 303

13.6.5 考核方式 303

13.6.6 試題樣例 303

附錄A 軟體工程概述 305

附錄B 考研大綱和教材內容 312

附錄C 專用名詞中英文對照表 316

參考文獻 322

相關詞條

熱門詞條

聯絡我們