數據結構——C語言描述(第二版)(陳慧南)十一五

數據結構——C語言描述(第二版)(陳慧南)十一五

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

內容簡介

本書為普通高等教育“十一五”國家級規劃教材。

本書保留經典數據結構知識,並引入伸展樹和跳表等新內容,反映抽象、封裝和信息隱蔽等現代軟體設計理念,重視算法的時間和空間分析,包括搜尋和排序時間的下界分析。本書使用C語言描述,內容新舊取捨恰當,廣度和深度適中。

本書為普通高等教育“十一五”國家級規劃教材。

本書保留經典數據結構知識,並引入伸展樹和跳表等新內容,反映抽象、封裝和信息隱蔽等現代軟體設計理念,重視算法的時間和空間分析,包括搜尋和排序時間的下界分析。本書使用C語言描述,內容新舊取捨恰當,廣度和深度適中。

本書重視實踐性和程式設計。書中算法都有完整的C程式,程式代碼注釋詳細,結構清晰,構思精巧,所有程式都已在TC 2.01下編譯通過並能正確運行。這些程式既是學習數據結構和算法的很好示例,也是很好的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 實現數據結構 8

1.4 算法和算法分析 9

1.4.1 算法及其性能標準 9

1.4.2 算法的時間複雜度 10

1.4.3 漸近時間複雜度 12

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

1.4.5 算法的空間複雜度 13

小結 14

習題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 數組作為抽象數據類型 71

4.4 特殊矩陣 72

4.4.1 對稱矩陣 72

*4.4.2 帶狀矩陣 72

4.5 稀疏矩陣 74

4.5.1 稀疏矩陣ADT 74

4.5.2 稀疏矩陣的順序表示 74

4.5.3 稀疏矩陣轉置 76

*4.5.4 稀疏矩陣相乘 78

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

*4.5.6 建立正交鍊表 84

*4.5.7 列印正交鍊表 85

小結 86

習題4 86

第5章 字元串和廣義表 88

5.1 字元串 88

5.1.1 字元串ADT 88

5.1.2 字元串的存儲表示 89

5.1.3 簡單模式匹配算法 90

*5.1.4 模式匹配的KMP算法 93

*5.2 廣義表 97

5.2.1 廣義表的概念 97

5.2.2 廣義表ADT 98

5.2.3 廣義表的存儲表示 99

5.2.4 廣義表的算法 100

小結 101

習題5 101

第6章 樹 102

6.1 樹的基本概念 102

6.1.1 樹的定義 102

6.1.2 基本術語 103

6.2 二叉樹 104

6.2.1 二叉樹的定義和性質 104

6.2.2 二叉樹ADT 106

6.2.3 二叉樹的存儲表示 107

6.2.4 二叉樹的遍歷 111

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

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

*6.2.7 線索二叉樹 119

6.3 樹和森林 122

6.3.1 森林與二叉樹的轉換 122

6.3.2 樹和森林的存儲表示 123

6.3.3 樹和森林的遍歷 125

*6.4 堆和優先權佇列 126

6.4.1 堆 127

6.4.2 優先權佇列 129

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

6.5.1 樹的路徑長度 132

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

6.5.3 哈夫曼編碼 136

*6.6 並查集和等價關係 137

6.6.1 並查集 137

6.6.2 並查集的實現 138

6.6.3 集合按等價關係分組 141

小結 142

習題6 142

第7章 集合和搜尋 145

7.1 集合及其表示 145

7.1.1 集合和搜尋 145

7.1.2 集合ADT 146

7.1.3 集合的表示 147

7.2 順序搜尋 147

7.3 二分搜尋 149

7.3.1 對半搜尋 150

7.3.2 二叉判定樹 151

*7.3.3 斐波那契搜尋 153

*7.4 搜尋算法的時間下界 154

小結 155

習題7 156

第8章 搜尋樹 157

8.1 二叉搜尋樹 157

8.1.1 二叉搜尋樹的定義 157

8.1.2 二叉搜尋樹的搜尋 157

8.1.3 二叉搜尋樹的插入 158

8.1.4 二叉搜尋樹的刪除 160

*8.1.5 二叉搜尋樹的高度 162

8.2 二叉平衡樹 163

8.2.1 二叉平衡樹的定義 163

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

8.2.3 二叉平衡樹的插入 170

8.2.4 二叉平衡樹的刪除 173

8.2.5 二叉平衡數的高度 176

8.3 B - 樹 176

8.3.1 m叉搜尋樹 176

8.3.2 B -樹的定義 178

8.3.3 B -樹的高度 179

8.3.4 B -樹的搜尋 179

8.3.5 B -樹的插入 179

8.3.6 B -樹的刪除 182

*8.4 鍵樹 184

8.4.1 鍵樹的定義 184

8.4.2 雙鏈樹 185

8.4.3 Trie樹 186

*8.5 伸展樹 187

小結 190

習題8 190

第9章 跳表和散列表 192

9.1 字典 192

*9.2 跳表 192

9.2.1 什麼是跳表 193

9.2.2 跳表的搜尋 196

9.2.3 跳表的插入 197

9.2.4 跳表的刪除 198

9.3 散列表 199

9.3.1 散列技術 199

9.3.2 散列函式 200

9.3.3 解決衝突的拉鏈法 202

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

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

9.3.6 性能分析 209

小結 209

習題9 210

第10章 圖 211

10.1 圖的基本概念 211

10.1.1 圖的定義與術語 211

10.1.2 圖ADT 214

10.2 圖的存儲結構 215

10.2.1 矩陣表示法 215

10.2.2 鄰接表表示法 218

*10.2.3 多重表表示法 221

10.3 圖的遍歷 222

10.3.1 深度優先遍歷 222

10.3.2 寬度優先遍歷 224

10.4 拓撲排序和關鍵路徑 226

10.4.1 拓撲排序 226

*10.4.2 關鍵路徑 230

10.5 最小代價生成樹 233

10.5.1 普里姆算法 234

*10.5.2 克魯斯卡爾算法 235

*10.6 最短路徑 237

10.6.1 單源最短路徑 238

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

小結 244

習題10 244

第11章 內排序 247

11.1 排序的基本概念 247

11.2 插入排序 248

11.2.1 直接插入排序 248

11.2.2* 希爾排序 252

11.3 交換排序 253

11.3.1 冒泡排序 253

11.3.2 快速排序 255

11.4 合併排序 260

11.4.1 兩路合併排序 260

11.4.2 合併排序的疊代算法 260

*11.4.3 鍊表上的合併排序 262

11.5 選擇排序 265

11.5.1 簡單選擇排序 266

*11.5.2 堆排序 267

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

*11.7 基數排序 269

小結 273

習題11 273

第12章 檔案和外排序 275

*12.1 輔助存儲器簡介 275

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

12.1.2 磁碟存儲器 275

12.2 檔案 277

12.2.1 檔案的基本概念 277

12.2.2 檔案的組織方式 277

12.2.3 C語言檔案 281

12.3 檔案的索引結構 282

12.3.1 靜態索引結構 282

12.3.2 動態索引結構 283

*12.4 外排序 283

12.4.1 外排序的基本過程 284

12.4.2 初始遊程的生成 284

12.4.3 多路合併 286

12.4.4 最佳合併樹 288

小結 289

習題12 290

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

13.1 實習目的和要求 291

13.1.1 實習目的 291

13.1.2 實習要求 291

13.2 實習步驟 292

13.3 實習報告 292

13.4 實習題 293

實習1 數組操作 293

實習2 鍊表操作 294

實習3 表達式計算 294

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

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

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

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

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

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

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

實習11 二叉樹的基本運算 297

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

實習13 B-樹檢索 298

實習14 散列表檢索 299

實習15 圖運算及其套用 299

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

實習17 外排序 300

13.5 實習報告範例 301

13.5.1 實習題:表達式計算 301

13.5.2 實習報告 301

附錄A 軟體工程概述 307

A.1 軟體開發方法 307

A.2 軟體文檔寫作 309

A.3 系統測試方法 310

附錄B 專用名詞中英文對照表 314

參考文獻 320

相關詞條

熱門詞條

聯絡我們