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