本書主要內(nèi)容包括數(shù)據(jù)結(jié)構(gòu)緒論,線性表,棧與隊列,串、數(shù)組和廣義表,樹,圖,查找,排序,以及課程設(shè)計指導(dǎo)。在每章開始給出了本章導(dǎo)讀和教學目標,使學生在學習之前就能明白要重點掌握的內(nèi)容;部分章后附有習題及實訓,以便學生鞏固所學知識。課程設(shè)計指導(dǎo)一章給出了幾種設(shè)計題目及設(shè)計思路供學生選擇,有助于教師指導(dǎo)學生完成小型項目的設(shè)計任務(wù)。
全書采用C語言作為數(shù)據(jù)結(jié)構(gòu)和算法的描述語言,C語言具有靈活的數(shù)據(jù)類型和豐富的運算符,能夠支持各種復(fù)雜數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)。此外,C語言編寫的程序通常具有較高的執(zhí)行效率,因為C語言接近硬件,能夠生成高效的機器碼,這對于需要處理大量數(shù)據(jù)和復(fù)雜計算的數(shù)據(jù)結(jié)構(gòu)應(yīng)用來說非常重要。書中的全部程序?qū)W生上機就可以按照操作步驟運行,全代碼實現(xiàn)是考慮到程序設(shè)計語言學習環(huán)節(jié)相對薄弱的同學也能學會數(shù)據(jù)結(jié)構(gòu),而不會為編寫程序所難倒。
本書可作為高等院校計算機類專業(yè)或信息類相關(guān)專業(yè)的教材,也可作為非計算機專業(yè)學生的選修教材,還可作為計算機應(yīng)用人員和工程技術(shù)人員的自學參考書。
用Python實現(xiàn),在軍隊級獲獎項目中運用數(shù)據(jù)結(jié)構(gòu)知識實現(xiàn)加密。
數(shù)據(jù)結(jié)構(gòu)是計算機學科的核心課程,也是計算機專業(yè)一門重要的專業(yè)基礎(chǔ)課。這門課程主要研究如何合理地組織數(shù)據(jù);如何在計算機中有效地表示數(shù)據(jù)和處理數(shù)據(jù)。學習這門課程的教學要求是: 使學生學會分析、研究計算機加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便選擇適當?shù)倪壿嫿Y(jié)構(gòu)、存儲結(jié)構(gòu)及相應(yīng)的算法,并初步掌握算法的時間分析和空間分析技術(shù)。另外,學習本課程也是復(fù)雜程序設(shè)計的訓練過程,可以幫助學生編寫結(jié)構(gòu)清楚、正確易讀、符合軟件工程的規(guī)范的程序,為后繼課程的學習打下良好的基礎(chǔ)。在人工智能時代,數(shù)據(jù)結(jié)構(gòu)的知識在各種知識圖譜、算法模型設(shè)計中的作用越來越突出。
全書共9章。第1章介紹數(shù)據(jù)結(jié)構(gòu)和算法的基本概念和常用術(shù)語;第2~6章介紹基本的數(shù)據(jù)結(jié)構(gòu),分別討論線性表,棧與隊列,串、數(shù)組和廣義表,樹和圖幾種結(jié)構(gòu)類型數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),以及相應(yīng)的算法;第7章和第8章介紹幾種常用的查找和排序方法;第9章是本書的特色,增加了項目設(shè)計指導(dǎo)的內(nèi)容,使學生在學完基本知識的同時,能夠綜合利用所學知識完成一些實際課題的設(shè)計與制作。另外,為便于教學,第2~8章后面還配有習題和實訓,并提供了實訓練習題的相應(yīng)參考答案。全書概念表述清楚、簡潔,內(nèi)容由淺入深,強調(diào)實踐環(huán)節(jié),有利于教學和自學。
全書采用C語言作為數(shù)據(jù)結(jié)構(gòu)和算法的描述語言,之所以選擇C語言作為全書的描述語言,是因為C語言對于底層邏輯的描述更清晰,C語言具有靈活的數(shù)據(jù)類型和豐富的運算符,能夠支持各種復(fù)雜數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)。此外,C語言編寫的程序通常具有較高的執(zhí)行效率,因為C語言接近硬件,能夠生成高效的機器碼。這對于需要處理大量數(shù)據(jù)和復(fù)雜計算的數(shù)據(jù)結(jié)構(gòu)應(yīng)用來說非常重要。C語言中的結(jié)構(gòu)體(struct)可以用來定義復(fù)雜的數(shù)據(jù)類型,這些數(shù)據(jù)類型可以表示數(shù)據(jù)結(jié)構(gòu)中的結(jié)點和元素。指針(pointer)則用來實現(xiàn)數(shù)據(jù)元素之間的鏈接關(guān)系,構(gòu)建出各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如鏈表、樹、圖等。結(jié)構(gòu)體和指針的結(jié)合使用使得C語言在實現(xiàn)數(shù)據(jù)結(jié)構(gòu)時具有強大的表達能力。本書由喬國榮負責全書的編寫,牟田宇負責實訓、習題及答案編寫,本書作者喬國榮講授的數(shù)據(jù)結(jié)構(gòu)課程在2009年獲評遼寧省精品課。
在本書的編寫過程中,編者得到了所在單位領(lǐng)導(dǎo)與同事的大力支持,在此一并表示衷心的感謝。
由于編者水平有限,書中難免有一些不足之處,懇請讀者批評指正。
編者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)及存儲結(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時間復(fù)雜度6
小結(jié)7
習題17
第2章線性表10
2.1線性表的邏輯結(jié)構(gòu)10
2.1.1線性表的定義10
2.1.2線性表的基本操作11
2.2線性表的順序存儲結(jié)構(gòu)11
2.2.1線性表的順序存儲順序表11
2.2.2順序表基本操作的實現(xiàn)12
2.2.3順序表的應(yīng)用舉例15
2.3線性表的鏈式存儲結(jié)構(gòu)17
2.3.1線性表的鏈式存儲鏈表17
2.3.2單鏈表19
2.3.3循環(huán)鏈表26
2.3.4雙向鏈表26
2.3.5單鏈表應(yīng)用舉例28小結(jié)31
習題232
實訓135
第3章棧與隊列37
3.1棧37
3.1.1棧的定義37
3.1.2棧的順序存儲及其基本操作的實現(xiàn)38
3.1.3棧的鏈式存儲及其基本操作的實現(xiàn)42
3.1.4棧的應(yīng)用舉例45
3.2隊列47
3.2.1隊列的定義47
3.2.2隊列的順序存儲及其基本操作的實現(xiàn)48
3.2.3隊列的鏈式存儲及其基本操作的實現(xiàn)52
3.2.4隊列的應(yīng)用舉例54
小結(jié)55
習題355
實訓258
第4章串、數(shù)組和廣義表65
4.1串65
4.1.1串的定義和特性65
4.1.2串的順序存儲及其基本操作實現(xiàn)66
4.1.3串的鏈式存儲及其基本操作實現(xiàn)73
4.1.4串的應(yīng)用舉例73
4.2數(shù)組74
4.2.1數(shù)組的定義和運算74
4.2.2數(shù)組的順序存儲結(jié)構(gòu)74
4.2.3矩陣的壓縮存儲75
4.2.4稀疏矩陣76
4.3廣義表81
4.3.1廣義表的定義和特性81
4.3.2廣義表的存儲結(jié)構(gòu)及其基本操作實現(xiàn)82
小結(jié)83
習題483
實訓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二叉樹的存儲結(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樹的存儲結(jié)構(gòu)101
5.4.2二叉樹與樹之間的轉(zhuǎn)換102
5.4.3森林與二叉樹的轉(zhuǎn)換103
5.4.4樹與森林的遍歷103
5.5二叉樹應(yīng)用實例104
5.5.1二叉排序樹104
5.5.2平衡二叉樹110
5.5.3B樹112
5.5.4哈夫曼樹114
小結(jié)116
習題5117
實訓4121
實訓4.1二叉樹的操作121
實訓4.2樹的應(yīng)用121
第6章圖126
6.1圖的基本概念126
6.1.1圖的定義126
6.1.2圖的基本術(shù)語127
6.2圖的存儲結(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每對頂點之間的最短路徑146
6.6拓撲排序149
6.6.1AOV網(wǎng)149
6.6.2拓撲排序的實現(xiàn)150
小結(jié)152
習題6153
實訓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
習題7172
實訓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
習題8195
實訓7198
第9章課程設(shè)計指導(dǎo)202
9.1課程設(shè)計大綱202
9.2課程設(shè)計題目及設(shè)計要求202
9.3飛機售票系統(tǒng)實例205
小結(jié)210