本書主要內(nèi)容包括數(shù)據(jù)結(jié)構(gòu)緒論,線性表,棧與隊(duì)列,串、數(shù)組和廣義表,樹,圖,查找,排序,以及課程設(shè)計(jì)指導(dǎo)。在每章開始給出了本章導(dǎo)讀和教學(xué)目標(biāo),使學(xué)生在學(xué)習(xí)之前就能明白要重點(diǎn)掌握的內(nèi)容;部分章后附有習(xí)題及實(shí)訓(xùn),以便學(xué)生鞏固所學(xué)知識(shí)。課程設(shè)計(jì)指導(dǎo)一章給出了幾種設(shè)計(jì)題目及設(shè)計(jì)思路供學(xué)生選擇,有助于教師指導(dǎo)學(xué)生完成小型項(xiàng)目的設(shè)計(jì)任務(wù)。
全書采用C語言作為數(shù)據(jù)結(jié)構(gòu)和算法的描述語言,C語言具有靈活的數(shù)據(jù)類型和豐富的運(yùn)算符,能夠支持各種復(fù)雜數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。此外,C語言編寫的程序通常具有較高的執(zhí)行效率,因?yàn)镃語言接近硬件,能夠生成高效的機(jī)器碼,這對(duì)于需要處理大量數(shù)據(jù)和復(fù)雜計(jì)算的數(shù)據(jù)結(jié)構(gòu)應(yīng)用來說非常重要。書中的全部程序?qū)W生上機(jī)就可以按照操作步驟運(yùn)行,全代碼實(shí)現(xiàn)是考慮到程序設(shè)計(jì)語言學(xué)習(xí)環(huán)節(jié)相對(duì)薄弱的同學(xué)也能學(xué)會(huì)數(shù)據(jù)結(jié)構(gòu),而不會(huì)為編寫程序所難倒。
本書可作為高等院校計(jì)算機(jī)類專業(yè)或信息類相關(guān)專業(yè)的教材,也可作為非計(jì)算機(jī)專業(yè)學(xué)生的選修教材,還可作為計(jì)算機(jī)應(yīng)用人員和工程技術(shù)人員的自學(xué)參考書。
用Python實(shí)現(xiàn),在軍隊(duì)級(jí)獲獎(jiǎng)項(xiàng)目中運(yùn)用數(shù)據(jù)結(jié)構(gòu)知識(shí)實(shí)現(xiàn)加密。
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)學(xué)科的核心課程,也是計(jì)算機(jī)專業(yè)一門重要的專業(yè)基礎(chǔ)課。這門課程主要研究如何合理地組織數(shù)據(jù);如何在計(jì)算機(jī)中有效地表示數(shù)據(jù)和處理數(shù)據(jù)。學(xué)習(xí)這門課程的教學(xué)要求是: 使學(xué)生學(xué)會(huì)分析、研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及相應(yīng)的算法,并初步掌握算法的時(shí)間分析和空間分析技術(shù)。另外,學(xué)習(xí)本課程也是復(fù)雜程序設(shè)計(jì)的訓(xùn)練過程,可以幫助學(xué)生編寫結(jié)構(gòu)清楚、正確易讀、符合軟件工程的規(guī)范的程序,為后繼課程的學(xué)習(xí)打下良好的基礎(chǔ)。在人工智能時(shí)代,數(shù)據(jù)結(jié)構(gòu)的知識(shí)在各種知識(shí)圖譜、算法模型設(shè)計(jì)中的作用越來越突出。
全書共9章。第1章介紹數(shù)據(jù)結(jié)構(gòu)和算法的基本概念和常用術(shù)語;第2~6章介紹基本的數(shù)據(jù)結(jié)構(gòu),分別討論線性表,棧與隊(duì)列,串、數(shù)組和廣義表,樹和圖幾種結(jié)構(gòu)類型數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),以及相應(yīng)的算法;第7章和第8章介紹幾種常用的查找和排序方法;第9章是本書的特色,增加了項(xiàng)目設(shè)計(jì)指導(dǎo)的內(nèi)容,使學(xué)生在學(xué)完基本知識(shí)的同時(shí),能夠綜合利用所學(xué)知識(shí)完成一些實(shí)際課題的設(shè)計(jì)與制作。另外,為便于教學(xué),第2~8章后面還配有習(xí)題和實(shí)訓(xùn),并提供了實(shí)訓(xùn)練習(xí)題的相應(yīng)參考答案。全書概念表述清楚、簡潔,內(nèi)容由淺入深,強(qiáng)調(diào)實(shí)踐環(huán)節(jié),有利于教學(xué)和自學(xué)。
全書采用C語言作為數(shù)據(jù)結(jié)構(gòu)和算法的描述語言,之所以選擇C語言作為全書的描述語言,是因?yàn)镃語言對(duì)于底層邏輯的描述更清晰,C語言具有靈活的數(shù)據(jù)類型和豐富的運(yùn)算符,能夠支持各種復(fù)雜數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。此外,C語言編寫的程序通常具有較高的執(zhí)行效率,因?yàn)镃語言接近硬件,能夠生成高效的機(jī)器碼。這對(duì)于需要處理大量數(shù)據(jù)和復(fù)雜計(jì)算的數(shù)據(jù)結(jié)構(gòu)應(yīng)用來說非常重要。C語言中的結(jié)構(gòu)體(struct)可以用來定義復(fù)雜的數(shù)據(jù)類型,這些數(shù)據(jù)類型可以表示數(shù)據(jù)結(jié)構(gòu)中的結(jié)點(diǎn)和元素。指針(pointer)則用來實(shí)現(xiàn)數(shù)據(jù)元素之間的鏈接關(guān)系,構(gòu)建出各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如鏈表、樹、圖等。結(jié)構(gòu)體和指針的結(jié)合使用使得C語言在實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)時(shí)具有強(qiáng)大的表達(dá)能力。本書由喬國榮負(fù)責(zé)全書的編寫,牟田宇負(fù)責(zé)實(shí)訓(xùn)、習(xí)題及答案編寫,本書作者喬國榮講授的數(shù)據(jù)結(jié)構(gòu)課程在2009年獲評(píng)遼寧省精品課。
在本書的編寫過程中,編者得到了所在單位領(lǐng)導(dǎo)與同事的大力支持,在此一并表示衷心的感謝。
由于編者水平有限,書中難免有一些不足之處,懇請(qǐng)讀者批評(píng)指正。
編者2025年4月
第1章緒論1
1.1數(shù)據(jù)結(jié)構(gòu)的基本概念1
1.1.1數(shù)據(jù)結(jié)構(gòu)的定義1
1.1.2數(shù)據(jù)的邏輯結(jié)構(gòu)及存儲(chǔ)結(jié)構(gòu)2
1.1.3數(shù)據(jù)結(jié)構(gòu)有關(guān)概念及術(shù)語4
1.2算法和算法描述4
1.2.1什么是算法4
1.2.2算法描述5
1.3算法分析6
1.3.1空間復(fù)雜度6
1.3.2時(shí)間復(fù)雜度6
小結(jié)7
習(xí)題17
第2章線性表10
2.1線性表的邏輯結(jié)構(gòu)10
2.1.1線性表的定義10
2.1.2線性表的基本操作11
2.2線性表的順序存儲(chǔ)結(jié)構(gòu)11
2.2.1線性表的順序存儲(chǔ)順序表11
2.2.2順序表基本操作的實(shí)現(xiàn)12
2.2.3順序表的應(yīng)用舉例15
2.3線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)17
2.3.1線性表的鏈?zhǔn)酱鎯?chǔ)鏈表17
2.3.2單鏈表19
2.3.3循環(huán)鏈表26
2.3.4雙向鏈表26
2.3.5單鏈表應(yīng)用舉例28小結(jié)31
習(xí)題232
實(shí)訓(xùn)135
第3章棧與隊(duì)列37
3.1棧37
3.1.1棧的定義37
3.1.2棧的順序存儲(chǔ)及其基本操作的實(shí)現(xiàn)38
3.1.3棧的鏈?zhǔn)酱鎯?chǔ)及其基本操作的實(shí)現(xiàn)42
3.1.4棧的應(yīng)用舉例45
3.2隊(duì)列47
3.2.1隊(duì)列的定義47
3.2.2隊(duì)列的順序存儲(chǔ)及其基本操作的實(shí)現(xiàn)48
3.2.3隊(duì)列的鏈?zhǔn)酱鎯?chǔ)及其基本操作的實(shí)現(xiàn)52
3.2.4隊(duì)列的應(yīng)用舉例54
小結(jié)55
習(xí)題355
實(shí)訓(xùn)258
第4章串、數(shù)組和廣義表65
4.1串65
4.1.1串的定義和特性65
4.1.2串的順序存儲(chǔ)及其基本操作實(shí)現(xiàn)66
4.1.3串的鏈?zhǔn)酱鎯?chǔ)及其基本操作實(shí)現(xiàn)73
4.1.4串的應(yīng)用舉例73
4.2數(shù)組74
4.2.1數(shù)組的定義和運(yùn)算74
4.2.2數(shù)組的順序存儲(chǔ)結(jié)構(gòu)74
4.2.3矩陣的壓縮存儲(chǔ)75
4.2.4稀疏矩陣76
4.3廣義表81
4.3.1廣義表的定義和特性81
4.3.2廣義表的存儲(chǔ)結(jié)構(gòu)及其基本操作實(shí)現(xiàn)82
小結(jié)83
習(xí)題483
實(shí)訓(xùn)385
第5章樹88
5.1樹的定義與表示88
5.1.1樹的定義及基本術(shù)語88
5.1.2樹的表示89
5.2二叉樹及其遍歷89
5.2.1二叉樹的定義89
5.2.2二叉樹的重要性質(zhì)90
5.2.3二叉樹的存儲(chǔ)結(jié)構(gòu)91
5.2.4二叉樹的遍歷92
5.3線索二叉樹98
5.3.1線索二叉樹的定義98
5.3.2線索二叉樹的基本操作100
5.4樹和森林101
5.4.1樹的存儲(chǔ)結(jié)構(gòu)101
5.4.2二叉樹與樹之間的轉(zhuǎn)換102
5.4.3森林與二叉樹的轉(zhuǎn)換103
5.4.4樹與森林的遍歷103
5.5二叉樹應(yīng)用實(shí)例104
5.5.1二叉排序樹104
5.5.2平衡二叉樹110
5.5.3B樹112
5.5.4哈夫曼樹114
小結(jié)116
習(xí)題5117
實(shí)訓(xùn)4121
實(shí)訓(xùn)4.1二叉樹的操作121
實(shí)訓(xùn)4.2樹的應(yīng)用121
第6章圖126
6.1圖的基本概念126
6.1.1圖的定義126
6.1.2圖的基本術(shù)語127
6.2圖的存儲(chǔ)結(jié)構(gòu)129
6.2.1鄰接矩陣129
6.2.2鄰接表130
6.3圖的遍歷132
6.3.1深度優(yōu)先搜索132
6.3.2廣度優(yōu)先搜索134
6.4最小生成樹136
6.4.1普里姆算法137
6.4.2克魯斯卡爾算法139
6.5最短路徑142
6.5.1單源最短路徑142
6.5.2每對(duì)頂點(diǎn)之間的最短路徑146
6.6拓?fù)渑判?49
6.6.1AOV網(wǎng)149
6.6.2拓?fù)渑判虻膶?shí)現(xiàn)150
小結(jié)152
習(xí)題6153
實(shí)訓(xùn)5155
第7章查找158
7.1查找的基本概念158
7.2順序查找159
7.3二分查找160
7.4分塊查找162
7.5哈希表查找165
7.5.1哈希表查找的基本概念165
7.5.2構(gòu)造哈希函數(shù)的方法165
7.5.3哈希沖突的解決方法167
7.5.4哈希查找效率的分析171
小結(jié)172
習(xí)題7172
實(shí)訓(xùn)6175
第8章排序177
8.1排序的基本概念177
8.2插入排序178
8.2.1直接插入排序178
8.2.2二分法插入排序180
8.2.3希爾排序181
8.3選擇排序182
8.3.1簡單選擇排序182
8.3.2堆排序183
8.4交換排序186
8.4.1冒泡排序186
8.4.2快速排序188
8.5歸并排序190
8.6基數(shù)排序192
小結(jié)195
習(xí)題8195
實(shí)訓(xùn)7198
第9章課程設(shè)計(jì)指導(dǎo)202
9.1課程設(shè)計(jì)大綱202
9.2課程設(shè)計(jì)題目及設(shè)計(jì)要求202
9.3飛機(jī)售票系統(tǒng)實(shí)例205
小結(jié)210