數(shù)據(jù)結(jié)構(gòu)與算法
定 價(jià):59.8 元
叢書名:計(jì)算機(jī)系列教材
- 作者:余久久、蔡政策、虞焰興、凌勇、李昌群、唐珊、陳杰、王嬙
- 出版時(shí)間:2025/8/1
- ISBN:9787302698852
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP311.12
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書緊緊圍繞《高等學(xué)校計(jì)算機(jī)專業(yè)核心課程教學(xué)實(shí)施方案》,并參照安徽省高等學(xué)校計(jì)算機(jī)教育研究會(huì)課程建設(shè)專業(yè)委員會(huì)提出的地方應(yīng)用型本科“數(shù)據(jù)結(jié)構(gòu)”課程教學(xué)大綱編寫而成。全書共分為8章,第1章為緒論,主要介紹數(shù)據(jù)結(jié)構(gòu)和算法的基本概念。第2~4章介紹線性數(shù)據(jù)結(jié)構(gòu)的類型、特點(diǎn)及其操作算法等,其中,第2章具體介紹普通的線性表,第3章具體介紹棧與隊(duì)列這樣“操作受限”的線性表,第4章則具體介紹一些特殊的線性表(串)與推廣的線性表(數(shù)組、廣義表)。第5、6章介紹樹與圖,主要介紹具有非線性數(shù)據(jù)結(jié)構(gòu)的樹、圖等較為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)特征及操作算法。第7、8章介紹查找與排序,主要介紹各種常見的查找與排序算法,以及優(yōu)化存儲(chǔ)結(jié)構(gòu)的思想等。為了起到銜接課堂教學(xué)、方便實(shí)驗(yàn)教學(xué)的作用,本書附錄給出了6個(gè)基礎(chǔ)性的數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)題,并配有完整的Python源代碼,能夠在PythonIDLE環(huán)境下順利運(yùn)行,供學(xué)生上機(jī)調(diào)試參考。本書難易適度,結(jié)構(gòu)清晰,圖文并茂,文字表達(dá)通俗易懂、實(shí)用性強(qiáng)。注重理論和實(shí)踐的結(jié)合,強(qiáng)調(diào)Python程序算法設(shè)計(jì)素養(yǎng)與教育,可幫助讀者進(jìn)一步掌握數(shù)據(jù)結(jié)構(gòu)的基本知識(shí)和技能,學(xué)會(huì)運(yùn)用數(shù)據(jù)結(jié)構(gòu)知識(shí)解決實(shí)際問題。本書適合作為地方應(yīng)用型本科高校計(jì)算機(jī)及相關(guān)專業(yè)“數(shù)據(jù)結(jié)構(gòu)”課程的教材、計(jì)算機(jī)類專業(yè)碩士研究生入學(xué)考試“數(shù)據(jù)結(jié)構(gòu)”課程的考研輔導(dǎo)書,也可作為高職院校軟件技術(shù)類專業(yè)學(xué)生的課外學(xué)習(xí)輔導(dǎo)教材。還可以作為參加計(jì)算機(jī)程序算法設(shè)計(jì)相關(guān)學(xué)科競(jìng)賽的培訓(xùn)教材,以及對(duì)數(shù)據(jù)結(jié)構(gòu)與算法知識(shí)感興趣的各類企業(yè)IT人員與計(jì)算機(jī)愛好者的參考書。
在內(nèi)容的選取與結(jié)構(gòu)安排上,本書選擇了語法簡(jiǎn)潔、功能強(qiáng)大,有著廣泛應(yīng)用領(lǐng)域Python作為描述語言。通過分類和講解典型結(jié)構(gòu)使讀者對(duì)數(shù)據(jù)結(jié)構(gòu)形成宏觀認(rèn)識(shí),強(qiáng)調(diào)算法設(shè)計(jì)素養(yǎng)與思政教育相結(jié)合,讀者能夠使用有效的方法處理各類數(shù)據(jù),并在構(gòu)建的數(shù)據(jù)結(jié)構(gòu)上設(shè)計(jì)出高效的算法。本書提供配套電子課件,讀者可登錄清華大學(xué)出版社網(wǎng)站下載。每章配有大量選擇題、簡(jiǎn)答題、算法設(shè)計(jì)題、應(yīng)用題等,附錄還配有完整的數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)及相應(yīng)的Python源代碼,幫助讀者鞏固所學(xué)知識(shí),提高Python程序算法設(shè)計(jì)與應(yīng)用能力。本書同時(shí)在安徽智慧教育平臺(tái)開設(shè)數(shù)據(jù)結(jié)構(gòu)MOOC教學(xué)視頻,可作為地方應(yīng)用型本科計(jì)算機(jī)類專業(yè)學(xué)生開展數(shù)據(jù)結(jié)構(gòu)課程“線上+線下”混合學(xué)習(xí)活動(dòng)的輔助教材。
前言
“數(shù)據(jù)結(jié)構(gòu)”是本科計(jì)算機(jī)及相關(guān)專業(yè)的一門核心課程,也是計(jì)算機(jī)學(xué)科中的一門理論性較強(qiáng)的專業(yè)基礎(chǔ)課。當(dāng)我們用計(jì)算機(jī)求解實(shí)際問題時(shí),必然涉及數(shù)據(jù)組織及數(shù)據(jù)處理,這些正是本課程的主要學(xué)習(xí)內(nèi)容。所以,數(shù)據(jù)結(jié)構(gòu)不僅是一般程序設(shè)計(jì)的知識(shí),而且是設(shè)計(jì)其他應(yīng)用系統(tǒng)程序的重要基礎(chǔ)。數(shù)據(jù)結(jié)構(gòu)與問題求解能力也是評(píng)判本科計(jì)算機(jī)類專業(yè)學(xué)生是否具有良好專業(yè)素養(yǎng)的標(biāo)準(zhǔn)。計(jì)算機(jī)類專業(yè)學(xué)生在學(xué)習(xí)時(shí),要學(xué)會(huì)靈活運(yùn)用各類數(shù)據(jù)結(jié)構(gòu)和算法知識(shí)去解決生活中的一些實(shí)際問題。因此,掌握扎實(shí)的數(shù)據(jù)結(jié)構(gòu)基本知識(shí),對(duì)于今后的專業(yè)學(xué)習(xí)、各類中小型Web程序設(shè)計(jì),以及大型軟件系統(tǒng)開發(fā)與維護(hù)等格外重要。對(duì)于初學(xué)者來說,許多專業(yè)術(shù)語較為抽象,不容易理解和掌握,本書采用通俗的語言以及案例和圖表講解,便于讀者真正理解和掌握。
黨的二十大報(bào)告提出,堅(jiān)持教育優(yōu)先發(fā)展,科技自立自強(qiáng),人才引領(lǐng)驅(qū)動(dòng),加快建設(shè)教育強(qiáng)國(guó),科技強(qiáng)國(guó),人才強(qiáng)國(guó)。隨著國(guó)內(nèi)人工智能及其相關(guān)技術(shù)的快速發(fā)展,作為學(xué)習(xí)人工智能技術(shù)的語言基礎(chǔ),Python語言以語法簡(jiǎn)單易懂、開發(fā)速度快捷、擅長(zhǎng)數(shù)據(jù)分析與處理、擁有強(qiáng)大的第三方工具庫(kù)等優(yōu)勢(shì),已被廣泛地應(yīng)用于諸多人工智能領(lǐng)域,已成為主流的計(jì)算機(jī)程序設(shè)計(jì)語言之一,受到越來越多的人青睞。國(guó)內(nèi)各高校計(jì)算機(jī)類專業(yè)均開設(shè)了“Python程序設(shè)計(jì)”課程,因此,本書采用Python作為數(shù)據(jù)結(jié)構(gòu)的描述語言,其相比于傳統(tǒng)的C/C++、Java語言,更容易學(xué)習(xí)。通過學(xué)習(xí)本書的內(nèi)容,讀者既可以加深對(duì)數(shù)據(jù)結(jié)構(gòu)基本概念的理解和認(rèn)識(shí),又能提高對(duì)各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行運(yùn)算分析與設(shè)計(jì)的能力,也為今后學(xué)習(xí)人工智能領(lǐng)域的相關(guān)知識(shí)打下堅(jiān)實(shí)的語言基礎(chǔ)。
本書共8章,面向地方應(yīng)用型本科計(jì)算機(jī)類專業(yè)“數(shù)據(jù)結(jié)構(gòu)”課程教學(xué)目標(biāo),系統(tǒng)地介紹了數(shù)據(jù)結(jié)構(gòu)中的各類線性結(jié)構(gòu)、樹結(jié)構(gòu)、圖結(jié)構(gòu),以及查找、排序方法,并用通俗易懂的語言圖文并茂地闡述了各種數(shù)據(jù)結(jié)構(gòu)的邏輯關(guān)系,以及在計(jì)算機(jī)中的存儲(chǔ)表示及其運(yùn)算等,每章的學(xué)習(xí)目標(biāo)中還都潛移默化地融入了元素。為了同步解決課程實(shí)驗(yàn)教學(xué)問題,附錄部分詳細(xì)給出了6個(gè)難度不大但具有代表性的數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)?紤]到地方應(yīng)用型本科計(jì)算機(jī)類專業(yè)學(xué)生的算法設(shè)計(jì)能力與編程水平有限,每個(gè)實(shí)驗(yàn)都給出了完整的Python源代碼,能夠在Python IDLE環(huán)境下順利運(yùn)行,可供學(xué)生上機(jī)調(diào)試參考。本書參考學(xué)時(shí)為52學(xué)時(shí)(其中包括12個(gè)實(shí)驗(yàn)學(xué)時(shí)),各章的參考學(xué)時(shí)如表1所示。當(dāng)然,在實(shí)際教學(xué)過程中,任課教師可根據(jù)實(shí)際教學(xué)安排適度增減教學(xué)內(nèi)容或適時(shí)調(diào)整實(shí)驗(yàn)內(nèi)容。需要說明的是,由于現(xiàn)在很多高校紛紛在國(guó)內(nèi)一些知名MOOC平臺(tái)上開設(shè)自己的“數(shù)據(jù)結(jié)構(gòu)”課程,數(shù)據(jù)結(jié)構(gòu)各類MOOC/SPOC學(xué)習(xí)資源也較為豐富,因此本課程若能采用“線上+線下”相結(jié)合的混合學(xué)習(xí)模式,教學(xué)效果會(huì)更佳,更好地培養(yǎng)學(xué)生的自主學(xué)習(xí)能力。表1學(xué)習(xí)內(nèi)容參考學(xué)時(shí)分配表
學(xué) 習(xí) 內(nèi) 容參考學(xué)時(shí)理論內(nèi)容
(40學(xué)時(shí))第1章緒論2第2章線性表4第3章棧與隊(duì)列6第4章串、數(shù)組與廣義表4第5章樹8第6章圖8第7章查找4第8章排序4實(shí)驗(yàn)內(nèi)容
(12學(xué)時(shí))實(shí)驗(yàn)1順序表的基本操作2實(shí)驗(yàn)2鏈表的基本操作2實(shí)驗(yàn)3利用順序棧實(shí)現(xiàn)數(shù)制轉(zhuǎn)換2實(shí)驗(yàn)4二叉樹的建立及遞歸遍歷2實(shí)驗(yàn)5二叉樹的應(yīng)用2實(shí)驗(yàn)6折半插入排序算法的實(shí)現(xiàn)2本書是編者多年從事地方應(yīng)用型本科高!皵(shù)據(jù)結(jié)構(gòu)”課程的教學(xué)實(shí)踐與感悟。是在對(duì)備課教案進(jìn)行認(rèn)真而系統(tǒng)的梳理后精心編寫而成,同時(shí)也凝聚了多位一線任課教師的教學(xué)心血與教研成果。本書以安徽高校省級(jí)質(zhì)量工程項(xiàng)目“軟件工程師培養(yǎng)計(jì)劃”(編號(hào): 2023zybj062)、“課程視域下基于OBE的地方應(yīng)用型軟件工程人才培養(yǎng)模式創(chuàng)新與實(shí)踐”(編號(hào): 2022jyxm494)、安徽省高校拔尖人才培育項(xiàng)目“應(yīng)用型本科軟件工程專業(yè)新工科建設(shè)研究”(編號(hào): gxbjZD2022087),以及安徽省高?蒲袆(chuàng)新團(tuán)隊(duì)(編號(hào): 2023AH010064)為依托,系項(xiàng)目研究成果之一。
本書由安徽三聯(lián)學(xué)院余久久、安徽國(guó)際商務(wù)職業(yè)學(xué)院蔡政策、安徽聲訊信息技術(shù)有限公司虞焰興擔(dān)任主編。安徽財(cái)貿(mào)職業(yè)學(xué)院凌勇、安徽糧食工程職業(yè)學(xué)院李昌群與唐珊、滁州學(xué)院陳杰、安徽國(guó)際商務(wù)職業(yè)學(xué)院王嬙擔(dān)任副主編,共同完成編寫。余久久負(fù)責(zé)完成全書內(nèi)容的統(tǒng)稿工作。在成書過程中,也得到了安徽三聯(lián)學(xué)院智慧交通現(xiàn)代產(chǎn)業(yè)學(xué)院鳳鵬飛、張繼山以及我校相關(guān)的大力支持。此外,安徽聲訊信息技術(shù)有限公司葛阿平、徐勇也為該書部分內(nèi)容的編寫工作提出了很多寶貴的建議,在此表示衷心的感謝。
本著學(xué)習(xí)與借鑒的目的,本書在編寫過程中參考了大量同類數(shù)據(jù)結(jié)構(gòu)與算法方面的書籍及相關(guān)文獻(xiàn)資料,以及百度、IT技術(shù)社區(qū)(論壇)、微信公眾號(hào)、國(guó)內(nèi)知名MOOC平臺(tái)等推送的數(shù)據(jù)結(jié)構(gòu)及算法應(yīng)用方面的網(wǎng)絡(luò)博文,在此謹(jǐn)向原作者表示誠(chéng)摯的謝意。由于編者水平有限,加之時(shí)間倉(cāng)促,書中的疏漏和不當(dāng)之處仍在所難免,還望各位同行批評(píng)指正。
編者2024年7月
余久久,男,碩士研究生,教授,F(xiàn)任安徽三聯(lián)學(xué)院計(jì)算機(jī)工程學(xué)院軟件工程教研室主任,本科軟件工程專業(yè)負(fù)責(zé)人,安慶師范大學(xué)碩士研究生導(dǎo)師。研究方向:現(xiàn)代軟件工程,敏捷軟件測(cè)試,現(xiàn)代教育技術(shù),高校信息化資源建設(shè)等。
目錄
第1章緒論1
1.1數(shù)據(jù)結(jié)構(gòu)研究的內(nèi)容1
1.1.1為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)2
1.1.2數(shù)據(jù)結(jié)構(gòu)中的例子4
1.1.3數(shù)據(jù)結(jié)構(gòu)研究的內(nèi)容8
1.2數(shù)據(jù)結(jié)構(gòu)中的基本概念8
1.2.1基本概念與術(shù)語8
1.2.2數(shù)據(jù)結(jié)構(gòu)9
1.3數(shù)據(jù)類型的表示與實(shí)現(xiàn)12
1.3.1數(shù)據(jù)類型12
1.3.2抽象數(shù)據(jù)類型13
1.4算法與算法分析15
1.4.1算法的定義及特性15
1.4.2算法的時(shí)間復(fù)雜度16
1.4.3算法的空間復(fù)雜度20
1.5Python語言簡(jiǎn)介21
1.5.1Python的標(biāo)準(zhǔn)數(shù)據(jù)類型21
1.5.2輸入/輸出和文件操作21
1.5.3面向?qū)ο缶幊?2
小結(jié)24
習(xí)題25第2章線性表27
2.1線性表的基本概念27
2.1.1線性表的定義27
2.1.2線性表的抽象數(shù)據(jù)類型描述29
2.2線性表的順序存儲(chǔ)結(jié)構(gòu)30
2.2.1線性表的順序表示30
2.2.2順序表的基本操作32
2.2.3順序表的應(yīng)用案例37
2.3線性表的鏈?zhǔn)奖硎竞蛯?shí)現(xiàn)39
2.3.1鏈表的存儲(chǔ)結(jié)構(gòu)39
2.3.2單鏈表的基本操作41
2.3.3雙向鏈表57
2.3.4循環(huán)鏈表64
2.4順序表和鏈表的比較69
2.5線性表的應(yīng)用——機(jī)場(chǎng)乘客排隊(duì)值機(jī)系統(tǒng)70
小結(jié)71
習(xí)題72第3章棧與隊(duì)列75
3.1棧75
3.1.1棧的基本概念75
3.1.2使用Python列表實(shí)現(xiàn)棧79
3.1.3棧的應(yīng)用場(chǎng)景81
3.2隊(duì)列83
3.2.1隊(duì)列的基本概念84
3.2.2使用collections.deque實(shí)現(xiàn)隊(duì)列85
3.2.3優(yōu)先隊(duì)列87
3.2.4隊(duì)列的應(yīng)用場(chǎng)景89
小結(jié)91
習(xí)題92第4章串、數(shù)組與廣義表94
4.1串94
4.1.1串的基本概念94
4.1.2串的順序存儲(chǔ)及運(yùn)算95
4.1.3串的鏈?zhǔn)酱鎯?chǔ)及運(yùn)算97
4.1.4串的模式匹配99
4.1.5串的應(yīng)用案例101
4.2數(shù)組102
4.2.1數(shù)組的基本概念102
4.2.2數(shù)組的順序存儲(chǔ)103
4.2.3特殊矩陣的壓縮存儲(chǔ)105
4.2.4數(shù)組的應(yīng)用案例106
4.3廣義表108
4.3.1廣義表的基本概念108
4.3.2廣義表的存儲(chǔ)結(jié)構(gòu)108
4.3.3廣義表的操作109
小結(jié)111
習(xí)題112第5章樹114
5.1樹和二叉樹114
5.1.1樹的定義與基本術(shù)語115
5.1.2二叉樹的定義與特點(diǎn)115
5.1.3樹與二叉樹的示例描述116
5.2二叉樹案例引入116
5.3二叉樹的性質(zhì)和存儲(chǔ)結(jié)構(gòu)118
5.3.1二叉樹的性質(zhì)118
5.3.2二叉樹的存儲(chǔ)結(jié)構(gòu)119
5.4遍歷二叉樹和線索二叉樹121
5.4.1遍歷二叉樹121
5.4.2線索二叉樹130
5.5樹和森林132
5.5.1樹的表示方法132
5.5.2森林和二叉樹的轉(zhuǎn)換134
5.5.3哈夫曼樹136
5.6案例分析與實(shí)現(xiàn)138
小結(jié)141
習(xí)題141第6章圖144
6.1圖的基本概念144
6.1.1圖的定義144
6.1.2圖的基本術(shù)語144
6.2圖的存儲(chǔ)結(jié)構(gòu)146
6.2.1鄰接矩陣146
6.2.2鄰接表147
6.3圖的遍歷149
6.3.1深度優(yōu)先遍歷149
6.3.2廣度優(yōu)先遍歷150
6.4圖的最小生成樹152
6.4.1基本概念152
6.4.2Prim算法152
6.4.3Kruskal算法154
6.5最短路徑156
6.5.1基本概念156
6.5.2應(yīng)用實(shí)例157
6.6拓?fù)渑判?59
6.6.1基本概念159
6.6.2拓?fù)渑判虻膶?shí)現(xiàn)160
6.7關(guān)鍵路徑162
6.7.1基本概念162
6.7.2關(guān)鍵路徑的算法164
小結(jié)165
習(xí)題165第7章查找168
7.1查找的基本概念168
7.2線性表的查找169
7.2.1順序查找169
7.2.2折半查找170
7.2.3分塊查找172
7.3二叉樹的查找174
7.3.1二叉排序樹174
7.3.2平衡二叉樹183
7.4哈希表的查找185
7.4.1哈希表186
7.4.2哈希函數(shù)的構(gòu)造方法187
7.4.3沖突處理的方法188
7.4.4哈希表查找的算法分析190
小結(jié)191
習(xí)題191第8章排序194
8.1認(rèn)識(shí)排序194
8.1.1排序的基本概念194
8.1.2排序算法的評(píng)價(jià)指標(biāo)195
8.2插入排序195
8.2.1直接插入排序196
8.2.2二分法插入排序197
8.2.3希爾排序199
8.3交換排序200
8.3.1冒泡排序200
8.3.2快速排序202
8.4選擇排序203
8.4.1簡(jiǎn)單選擇排序203
8.4.2堆排序204
8.5歸并排序207
8.6基數(shù)排序208
小結(jié)210
習(xí)題212附錄A實(shí)驗(yàn)215
實(shí)驗(yàn)1順序表的基本操作215
實(shí)驗(yàn)2鏈表的基本操作217
實(shí)驗(yàn)3利用順序棧實(shí)現(xiàn)數(shù)制轉(zhuǎn)換220
實(shí)驗(yàn)4二叉樹的建立及遞歸遍歷221
實(shí)驗(yàn)5二叉樹的應(yīng)用224
實(shí)驗(yàn)6折半插入排序算法的實(shí)現(xiàn)226參考文獻(xiàn)230