定 價(jià):49 元
叢書(shū)名:高等學(xué)校計(jì)算機(jī)專(zhuān)業(yè)系列教材
- 作者:孫涵編著
- 出版時(shí)間:2020/3/1
- ISBN:9787111648208
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類(lèi):TP311.12
- 頁(yè)碼:188
- 紙張:膠版紙
- 版次:1
- 開(kāi)本:16K
本書(shū)以系統(tǒng)能力培養(yǎng)為宗旨,基于C語(yǔ)言,介紹了數(shù)據(jù)結(jié)構(gòu)相關(guān)知識(shí)。本書(shū)各章均以實(shí)例引入,使學(xué)生理解不同數(shù)據(jù)結(jié)構(gòu)應(yīng)用于哪些場(chǎng)景。針對(duì)每種數(shù)據(jù)結(jié)構(gòu),均以理解和實(shí)現(xiàn)物理世界里各種聯(lián)系在信息世界中的邏輯表示和在計(jì)算機(jī)中實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)和操作兩條主線進(jìn)行講授。并配有大量的實(shí)踐練習(xí)和教學(xué)資源,適合作為高校數(shù)據(jù)結(jié)構(gòu)課程的教材。
“數(shù)據(jù)結(jié)構(gòu)”是計(jì)算機(jī)類(lèi)專(zhuān)業(yè)的基礎(chǔ)課程,也是相關(guān)理工類(lèi)專(zhuān)業(yè)的熱門(mén)選修課程。本書(shū)是為該課程編寫(xiě)的教材,適合計(jì)算機(jī)類(lèi)專(zhuān)業(yè)和相關(guān)理工類(lèi)專(zhuān)業(yè)的本科生學(xué)習(xí)。
本書(shū)主要介紹如何合理地組織數(shù)據(jù)、有效地存儲(chǔ)和處理數(shù)據(jù)、正確地設(shè)計(jì)算法以及對(duì)算法的復(fù)雜度進(jìn)行分析和評(píng)價(jià)。通過(guò)深入理解各種基本數(shù)據(jù)結(jié)構(gòu)的邏輯關(guān)系、物理存儲(chǔ)和基本操作,初步建立數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、實(shí)現(xiàn)和運(yùn)用的概念。同時(shí),結(jié)合各種典型案例,討論不同數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)、適用范圍以及基本算法復(fù)雜度的分析方法,為后續(xù)的專(zhuān)業(yè)課程學(xué)習(xí)提供必要的基礎(chǔ)知識(shí)。
本書(shū)的學(xué)習(xí)目標(biāo)如下。
目標(biāo)1:掌握線性表、棧和隊(duì)列、數(shù)組和廣義表、樹(shù)和二叉樹(shù)、圖等各種基本數(shù)據(jù)結(jié)構(gòu)的邏輯表達(dá)、物理存儲(chǔ)和基本操作;掌握查找、排序的經(jīng)典算法。
目標(biāo)2:能夠針對(duì)具體應(yīng)用問(wèn)題,根據(jù)問(wèn)題的約束條件分析各種可選方案在數(shù)據(jù)存儲(chǔ)、算法效率上的利弊,并選擇恰當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)、存儲(chǔ)表示和與之對(duì)應(yīng)的操作方法。
目標(biāo)3:能夠結(jié)合具體應(yīng)用案例,合理選擇和改進(jìn)經(jīng)典的數(shù)據(jù)結(jié)構(gòu),使之針對(duì)具體應(yīng)用能夠有效地存儲(chǔ)和處理數(shù)據(jù),能夠在此基礎(chǔ)上正確地設(shè)計(jì)算法,并對(duì)算法進(jìn)行有效的分析和評(píng)價(jià)。
本書(shū)共分為8章。第1章主要介紹數(shù)據(jù)結(jié)構(gòu)相關(guān)的概念及術(shù)語(yǔ),以及算法的定義、特性和算法設(shè)計(jì)的目標(biāo)。第2~4章主要討論各種基本結(jié)構(gòu)的抽象數(shù)據(jù)類(lèi)型、順序和鏈?zhǔn)奖硎九c實(shí)現(xiàn),以及相關(guān)的應(yīng)用。第5章和第6章在討論樹(shù)和圖的抽象數(shù)據(jù)類(lèi)型、順序和鏈?zhǔn)奖硎九c實(shí)現(xiàn)的基礎(chǔ)上,重點(diǎn)討論樹(shù)和圖的遍歷方法以及基于此的典型應(yīng)用。第7章和第8章分別討論查找和排序的經(jīng)典算法與改進(jìn)策略。
對(duì)于廣大讀者來(lái)說(shuō),學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程的關(guān)鍵是把握兩條主線。
一條主線是如何理解和實(shí)現(xiàn)物理世界中的各種聯(lián)系在信息世界中的邏輯表示。物理世界中的萬(wàn)般聯(lián)系都是形象而具體的,需要通過(guò)抽象建模抓住這些聯(lián)系的本質(zhì),即線性、樹(shù)形或者圖狀結(jié)構(gòu),從而將其轉(zhuǎn)換為信息世界中的邏輯表示。例如:生活中的各種排隊(duì)可以抽象成線性結(jié)構(gòu)中的隊(duì)列,家族譜可以映射為樹(shù)形結(jié)構(gòu),專(zhuān)業(yè)課程的先修/后修關(guān)系可以構(gòu)成有向的圖結(jié)構(gòu)。抽象建模與表示能力是工科類(lèi)專(zhuān)業(yè)學(xué)生必須具備的基本能力。不論是不是計(jì)算機(jī)類(lèi)專(zhuān)業(yè)的學(xué)生,在學(xué)習(xí)這門(mén)課程時(shí),都必須牢牢把握這條主線。
另一條主線是如何在計(jì)算機(jī)中實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)和操作。存儲(chǔ)的方式主要分為順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)兩大類(lèi);静僮饕话惆ǔ跏蓟颁N(xiāo)毀操作、訪問(wèn)型操作和加工型操作三大類(lèi)。這三類(lèi)操作在兩種不同存儲(chǔ)模式下的算法的效率是有差異的,需要進(jìn)行比較分析,總結(jié)各自的優(yōu)勢(shì)和不足,從而針對(duì)具體的現(xiàn)實(shí)問(wèn)題,選擇恰當(dāng)?shù)拇鎯?chǔ)方式來(lái)保證操作執(zhí)行的效率。在比較分析基礎(chǔ)上得到有效結(jié)論是這條主線中的能力訓(xùn)練要求。
此外,算法設(shè)計(jì)與優(yōu)化也是值得關(guān)注的問(wèn)題,本書(shū)中的查找和排序部分將展示算法設(shè)計(jì)與優(yōu)化的思路。例如,排序算法如何從時(shí)間復(fù)雜度O(n2)的經(jīng)典算法開(kāi)始,通過(guò)對(duì)恰當(dāng)結(jié)構(gòu)的引入將算法時(shí)間復(fù)雜度降到O(nlogn);查找算法如何從時(shí)間復(fù)雜度O(n)的窮舉算法開(kāi)始,通過(guò)對(duì)數(shù)據(jù)的排序約束和樹(shù)形結(jié)構(gòu)的引入,將時(shí)間復(fù)雜度降到O(logn),甚至在一些特殊規(guī)則的約束下能夠接近O(1)。我們不僅要掌握經(jīng)典算法本身,更要關(guān)注算法優(yōu)化的策略和方向,以便在解決實(shí)際問(wèn)題時(shí)能夠設(shè)計(jì)出高效的算法。
最后,從不同學(xué)習(xí)者的角度來(lái)討論一下如何學(xué)習(xí)本門(mén)課程。
對(duì)于計(jì)算機(jī)類(lèi)專(zhuān)業(yè)的學(xué)生,本書(shū)所涉及的內(nèi)容均需掌握。在此基礎(chǔ)上,學(xué)生需要大量的訓(xùn)練,以具備抽象建模能力,能夠就實(shí)際問(wèn)題選擇或設(shè)計(jì)恰當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)。此外,在編程實(shí)現(xiàn)過(guò)程中,能夠基于問(wèn)題的約束,在比較、分析的基礎(chǔ)上選擇恰當(dāng)?shù)拇鎯?chǔ)方式和算法的實(shí)現(xiàn)方式,能夠?qū)λ惴ǖ臅r(shí)間和空間復(fù)雜度進(jìn)行合理的分析,能夠?qū)λ惴ǖ母倪M(jìn)和優(yōu)化有恰當(dāng)?shù)乃悸,從而為?shí)際問(wèn)題提供高效的解決方案。
對(duì)于其他理工類(lèi)專(zhuān)業(yè)的學(xué)生,希望通過(guò)本門(mén)課程的學(xué)習(xí)達(dá)成兩點(diǎn)目標(biāo):一是具備抽象建模能力,能夠?qū)ξ锢硎澜缰械膯?wèn)題描述進(jìn)行抽象建模,從而在信息世界里進(jìn)行合理表達(dá);二是具備算法選擇能力,能夠根據(jù)輸入數(shù)據(jù)的表現(xiàn)形式、數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)方式和基于此的算法效率特征,選擇相應(yīng)的數(shù)據(jù)結(jié)構(gòu)和算法來(lái)高效地解決實(shí)際問(wèn)題。
本書(shū)在構(gòu)思和準(zhǔn)備過(guò)程中參考了國(guó)內(nèi)外相關(guān)的數(shù)據(jù)結(jié)構(gòu)教材,特別是嚴(yán)蔚敏、殷人昆、陳越、鄧俊輝等老師編寫(xiě)的教材,這些經(jīng)典教材的內(nèi)容、寫(xiě)法給了作者很多啟發(fā)。在本書(shū)的編寫(xiě)過(guò)程中,南京航空航天大學(xué)的秦小麟老師給予了很多指導(dǎo)意見(jiàn)。在此一并向這些老師表示感謝。本書(shū)第1~3章由孫涵編寫(xiě),第4章和第8章由高航老師編寫(xiě),第5~7章由黃元元老師編寫(xiě),全書(shū)由孫涵負(fù)責(zé)統(tǒng)稿和審定。
盡管本書(shū)是作者多年教學(xué)經(jīng)驗(yàn)的總結(jié),但限于作者的學(xué)識(shí),書(shū)中難免有疏漏與不足之處,敬請(qǐng)各位同行與讀者批評(píng)指正,以利于我們不斷提升教學(xué)水平、豐富課程內(nèi)容。
孫涵
南京航空航天大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院
2019年12月
前言
第1章 概論 1
1.1 引言 1
1.2 數(shù)據(jù)結(jié)構(gòu)相關(guān)概念及術(shù)語(yǔ) 1
1.3 抽象數(shù)據(jù)類(lèi)型的表示與實(shí)現(xiàn) 3
1.4 算法與算法分析 6
1.4.1 算法 6
1.4.2 算法分析與度量 8
1.5 小結(jié) 10
1.6 練習(xí) 10
第2章 線性表 11
2.1 引言 11
2.2 線性表的抽象數(shù)據(jù)類(lèi)型 11
2.3 線性表的順序表示與實(shí)現(xiàn) 15
2.3.1 順序表的定義和特點(diǎn) 15
2.3.2 順序表的存儲(chǔ)結(jié)構(gòu) 15
2.3.3 順序表基本操作的實(shí)現(xiàn)與性能分析 16
2.4 線性表的鏈?zhǔn)奖硎九c實(shí)現(xiàn) 19
2.4.1 單鏈表 20
2.4.2 其他形式的鏈表 24
2.5 線性表的應(yīng)用舉例 27
2.6 小結(jié) 31
2.7 練習(xí) 31
第3章 棧和隊(duì)列 32
3.1 引言 32
3.2 棧的抽象數(shù)據(jù)類(lèi)型 32
3.3 棧的順序表示與實(shí)現(xiàn) 33
3.4 棧的鏈?zhǔn)奖硎九c實(shí)現(xiàn) 36
3.5 棧的應(yīng)用舉例 37
3.5.1 逆序輸出問(wèn)題 37
3.5.2 最近匹配與比較問(wèn)題 38
3.5.3 遞歸與回溯問(wèn)題 43
3.6 隊(duì)列的抽象數(shù)據(jù)類(lèi)型 47
3.7 隊(duì)列的順序表示與實(shí)現(xiàn) 48
3.8 隊(duì)列的鏈?zhǔn)奖硎九c實(shí)現(xiàn) 50
3.9 隊(duì)列的應(yīng)用舉例 52
3.10 小結(jié) 53
3.11 練習(xí) 53
第4章 數(shù)組、廣義表和字符串 54
4.1 引言 54
4.2 數(shù)組 54
4.2.1 一維數(shù)組 54
4.2.2 二維數(shù)組 55
4.3 特殊矩陣的壓縮存儲(chǔ) 56
4.3.1 對(duì)稱(chēng)矩陣 56
4.3.2 對(duì)角矩陣 57
4.4 稀疏矩陣的壓縮存儲(chǔ) 57
4.4.1 稀疏矩陣的三元組表示 57
4.4.2 三元組的順序表表示 58
4.4.3 三元組的十字鏈表表示 61
4.5 廣義表 62
4.5.1 廣義表的概念 62
4.5.2 廣義表的抽象數(shù)據(jù)類(lèi)型 63
4.5.3 廣義表的存儲(chǔ)結(jié)構(gòu) 64
4.6 字符串 66
4.6.1 字符串的抽象數(shù)據(jù)類(lèi)型 66
4.6.2 字符串的存儲(chǔ)結(jié)構(gòu)與子串定位 67
4.7 小結(jié) 68
4.8 練習(xí) 68
第5章 樹(shù)和二叉樹(shù) 70
5.1 引言 70
5.2 樹(shù)的定義和基本術(shù)語(yǔ) 70
5.2.1 樹(shù)的定義 70
5.2.2 樹(shù)的邏輯表示 71
5.2.3 樹(shù)的基本術(shù)語(yǔ) 72
5.2.4 樹(shù)的抽象數(shù)據(jù)類(lèi)型 72
5.3 二叉樹(shù) 73
5.3.1 二叉樹(shù)的定義 73
5.3.2 二叉樹(shù)的抽象數(shù)據(jù)類(lèi)型 74
5.3.3 二叉樹(shù)的性質(zhì) 76
5.3.4 二叉樹(shù)的存儲(chǔ)結(jié)構(gòu) 77
5.3.5 二叉樹(shù)的遍歷 79
5.3.6 二叉樹(shù)遍歷算法的
應(yīng)用舉例 81
5.4 樹(shù)和森林 85
5.4.1 樹(shù)與二叉樹(shù)的轉(zhuǎn)換 85
5.4.2 森林與二叉樹(shù)的轉(zhuǎn)換 86
5.4.3 樹(shù)和森林的遍歷 87
5.5 霍夫曼樹(shù) 88
5.5.1 霍夫曼樹(shù)的定義 88
5.5.2 霍夫曼樹(shù)的構(gòu)造 90
5.5.3 霍夫曼編碼 90
5.5.4 霍夫曼樹(shù)和霍夫曼編碼的算法實(shí)現(xiàn) 92
5.6 小結(jié) 94
5.7 練習(xí) 94
第6章 圖 95
6.1 引言 95
6.2 圖的定義、基本術(shù)語(yǔ)和抽象數(shù)據(jù)類(lèi)型 95
6.3 圖的存儲(chǔ)方式 97
6.3.1 鄰接矩陣 97
6.3.2 鄰接表 99
6.4 圖的遍歷 101
6.4.1 深度優(yōu)先遍歷 101
6.4.2 廣度優(yōu)先遍歷 102
6.4.3 圖的遍歷算法的應(yīng)用舉例 103
6.5 最小生成樹(shù) 107
6.5.1 最小生成樹(shù)的定義 107
6.5.2 普里姆算法 108
6.5.3 克魯斯卡爾算法 111
6.6 拓?fù)渑判蚺c關(guān)鍵路徑 112
6.6.1 拓?fù)渑判?112
6.6.2 AOE網(wǎng)與關(guān)鍵路徑 113
6.7 最短路徑問(wèn)題 116
6.7.1 單源最短路徑問(wèn)題 116
6.7.2 所有頂點(diǎn)對(duì)之間的最短路徑 119
6.8 小結(jié) 121
6.9 練習(xí) 122
第7章 查找 123
7.1 引言 123
7.2 查找表的定義與抽象數(shù)據(jù)類(lèi)型 123
7.3 順序表的靜態(tài)查找 124
7.3.1 順序查找 125
7.3.2 折半查找 126
7.3.3 索引查找 129
7.4 樹(shù)表的動(dòng)態(tài)查找 130
7.4.1 二叉排序樹(shù) 130
7.4.2 平衡二叉排序樹(shù) 138
7.4.3 B-樹(shù) 141
7.4.4 B+樹(shù) 146
7.5 哈希表的查找 147
7.5.1 哈希表的定義 147
7.5.2 哈希函數(shù)的構(gòu)造方法 148
7.5.3 處理沖突的方式 150
7.5.4 哈希表的查找 152
7.5.5 性能分析 153
7.6 小結(jié) 155
7.7 練習(xí) 156
第8章 排序 157
8.1 引言 157
8.2 排序的定義與分類(lèi) 157
8.2.1 排序的定義 157
8.2.2 排序的分類(lèi) 157
8.2.3 排序的數(shù)據(jù)類(lèi)型 158
8.3 插入排序 158
8.3.1 直接插入排序 158
8.3.2 希爾排序 160
8.4 交換排序 162
8.4.1 簡(jiǎn)單交換排序 162
8.4.2 快速排序 164
8.5 選擇排序 166
8.5.1 簡(jiǎn)單選擇排序 167
8.5.2 樹(shù)形選擇排序 168
8.5.3 堆排序 169
8.6 歸并排序 173
8.7 基數(shù)排序 175
8.7.1 多關(guān)鍵字的排序 175
8.7.2 基數(shù)排序的實(shí)現(xiàn) 176
8.8 各種內(nèi)部排序方法的比較 178
8.9 小結(jié) 179
8.10 練習(xí) 179