編輯推薦
(1)根據教育部頒發的《高等學校計算機科學與技術專業公共核心知識體係與課程》規範編寫。
(2)內容涵蓋數據結構與算法的基本概念和算法分析的簡單方法,以及C語言編程的要點。
(3)作者在討論每一個知識單元時,結閤30多年教學的經驗和考試輔導的體會,閤理安排瞭教材內容,力求透徹、全麵。對學生讀書容易忽略的地方和隱藏在書中所討論問題後麵的東西,都有適當的提示。
(4)是學習數據結構與算法課程的教材,也可以作為計算機專業考研的輔導教材或其他計算機或軟件考試的復習教材。
內容簡介
本書是根據教育部《高等學校計算機科學與技術專業公共核心知識體係與課程》編寫的數據結構主教材。全書共8章。第1章介紹數據結構的地位和主要知識點,數據結構和算法的基本概念和算法分析的簡單方法,以及C語言編程的要點。第2~8章分彆介紹瞭綫性錶、棧和隊列及其應用、多維數組、特殊矩陣、稀疏矩陣、字符串和廣義錶、樹與二叉樹、圖、查找、排序,並做瞭適當延伸。作者在討論每一個知識單元時,結閤30多年教學的經驗和考試輔導的體會,閤理安排教材內容,力求透徹、全麵,對學生讀書容易忽略的地方和隱藏在書中所討論問題後麵的東西都有適當的提示。
本書的編寫得到清華大學2015年精品教材建設項目的資助。本書既可作為高等學校計算機科學與技術專業和軟件工程專業本科生學習數據結構與算法課程的教材,也可以作為計算機專業考研的輔導教材或其他計算機或軟件考試的復習教材,還可作為計算機或軟件係統開發人員的參考資料。
目錄
第1章 緒論 1
1.1 數據結構的概念及分類 1
1.1.1 為什麼要學習數據結構 1
1.1.2 與數據結構相關的基本術語 2
1.1.3 數據結構的分類 5
1.1.4 數據結構的存儲結構 6
1.1.5 定義在數據結構上的操作 7
1.1.6 “好”數據結構 7
1.2 使用C語言描述數據結構 7
1.2.1 C語言的數據類型 8
1.2.2 算法的控製結構 9
1.2.3 算法的函數結構 10
1.2.4 動態存儲分配 12
1.2.5 邏輯和關係運算的約定 12
1.2.6 輸入與輸齣 13
1.3 算法和算法設計 13
1.3.1 算法的定義和特性 13
1.3.2 算法的設計步驟 14
1.3.3 算法設計的基本方法 15
1.4 算法分析與度量 18
1.4.1 算法的評價標準 18
1.4.2 算法的時間和空間復雜度度量 18
1.4.3 算法的漸近分析 21
小結 24
習題 24
第2章 綫性錶 27
2.1 綫性錶 27
2.1.1 綫性錶的定義和特點 27
2.1.2 綫性錶的主要操作 28
2.2 順序錶 29
2.2.1 順序錶的定義和特點 29
2.2.2 順序錶的結構定義 30
2.2.3 順序錶查找操作的實現 31
2.2.4 順序錶插入和刪除操作的實現 32
2.2.5 順序錶的應用:集閤運算 34
2.3 單鏈錶 35
2.3.1 單鏈錶的定義和特點 35
2.3.2 單鏈錶的結構定義 36
2.3.3 單鏈錶中的插入與刪除 36
2.3.4 帶頭結點的單鏈錶 40
2.3.5 單鏈錶的遍曆與創建 42
2.3.6 單鏈錶的應用:集閤運算 44
2.3.7 循環鏈錶 46
2.3.8 雙嚮鏈錶 50
2.3.9 靜態鏈錶 53
2.4 順序錶與綫性鏈錶的比較 54
2.5 綫性錶的應用:一元多項式及其運算 56
2.5.1 一元多項式的錶示 56
2.5.2 多項式的結構定義 57
2.5.3 多項式的加法 59
2.5.4 擴展閱讀:多項式的乘法 60
小結 62
習題 63
第3章 棧和隊列 66
3.1 棧 66
3.1.1 棧的概念 66
3.1.2 順序棧 67
3.1.3 擴展閱讀:多棧處理 70
3.1.4 鏈式棧 73
3.1.5 擴展閱讀:棧的混洗 74
3.2 隊列 76
3.2.1 隊列的概念 76
3.2.2 循環隊列 76
3.2.3 鏈式隊列 80
3.3 棧的應用 82
3.3.1 數製轉換 82
3.3.2 括號匹配 83
3.3.3 錶達式的計算與優先級處理 84
3.3.4 棧與遞歸的實現 88
3.4 隊列的應用 91
3.5 在算法設計中使用遞歸 92
3.5.1 漢諾塔問題與分治法 92
3.5.2 直接把遞歸過程改為非遞歸過程 94
3.5.3 擴展閱讀:遞歸過程的非遞歸模擬算法 95
3.5.4 迷宮問題與迴溯法 98
3.5.5 計算組閤數與動態規劃 101
3.6 擴展閱讀:雙端隊列 102
3.6.1 雙端隊列的概念 102
3.6.2 輸入受限的雙端隊列 103
3.6.3 輸齣受限的雙端隊列 104
3.6.4 雙端隊列的存儲錶示 104
3.7 擴展閱讀:優先隊列 106
3.7.1 優先隊列的概念 106
3.7.2 優先隊列的實現 107
小結 108
習題 108
第4章 數組、串和廣義錶 112
4.1 數組 112
4.1.1 一維數組 112
4.1.2 多維數組 114
4.2 特殊矩陣的壓縮存儲 116
4.2.1 對稱矩陣的壓縮存儲 117
4.2.2 三對角矩陣的壓縮存儲 118
4.2.3 擴展閱讀:w對角矩陣的壓縮存儲 119
4.3 稀疏矩陣 120
4.3.1 稀疏矩陣的概念 120
4.3.2 稀疏矩陣的順序存儲錶示 121
4.3.3 稀疏矩陣的鏈錶錶示 124
4.4 字符串 125
4.4.1 字符串的概念 126
4.4.2 字符串的初始化和賦值 126
4.4.3 自定義字符串的存儲錶示 128
4.4.4 串的模式匹配 132
4.5 廣義錶 140
4.5.1 廣義錶的概念 140
4.5.2 廣義錶的性質 141
4.5.3 廣義錶的鏈接錶示 141
4.5.4 擴展閱讀:三元多項式的錶示 147
前言/序言
第2版前言
本書第2版的初稿完成於2015年12月,作為另一本教材《數據結構精講與習題詳解》(第2版)的寫作參照,相互融閤,相互補充,首先完成瞭該書,再迴過頭來第二次修改本書,所以本書實際上是第2版的修訂本。
自從1978年美籍華人冀中田*次在中國講授“數據結構”課開始,很多老師對課程的內容和講授方法做瞭大量的研究,也可以說是在做中學,總結齣許多好的經驗,使得課程的教學比當時進步瞭很多。我本人在這門課程的教學中也積纍瞭一些心得,非常希望與正在學習這門課程的同學們分享,這是我修改這本教材的初衷。
既然數據結構與算法相輔相成,密不可分,而算法就是解決問題的過程描述,那麼,描述數據結構與算法的語言就應該是過程性的。早期用僞代碼描述,實踐證明不可持續,因為很多用僞代碼描述的算法轉換為使用某種編程語言編寫的程序後,怎麼也通不過。原因是很多人編程語言的實踐能力太差,算法的實現細節太粗糙。所以我認為,使用某種過程性語言,如C、C++等,對於學習和實現數據結構與算法是閤適的。
由於數據結構課程學時的限製(多數學校為48~64學時),作為本科生的教材,包含的知識容量應有一定限度。知識點太少,學生在未來的學習和工作中可聯想的思考空間狹窄,使解決問題的能力受限;知識點太多,必然淪為百科全書式的閱讀,基礎不牢靠,同樣使得解決問題的能力受限。通過教學實踐證明,本書的第1版在內容上取材是恰當的,範圍上取材的深度和廣度也是恰當的,但聯想不夠,某些算法的實現上偏嚮使用僞代碼描述,造成部分讀者在學習上和實踐上的睏惑。本書第2版修改部分包括:
(1)在結構上從第1版的10章改為8章,雖然章數壓縮瞭,但敘述內容不減反增。增加的知識點大多作為“擴展閱讀”齣現,它們不作為考核內容,主要是拓展視野。
(2)各章的“想想看”改為“思考題”,目的是增加一些互動環節。這些思考題觸及的都是可聯想的內容,或者是對理解正文有用的知識“點撥”。所謂“學問”就是有“學”還要有“問”。正麵的“問”有助於理解“應該做什麼”,反麵的“問”有助於理解“不該做什麼”。
(3)書中所有使用C語言書寫的算法,包括輔助教材《數據結構精講與習題詳解》(第2版)中的800道算法題,都重新使用VC++ 6.0編譯程序調試過,有的還按照軟件工程的要求做瞭邊界值測試。因為書中算法的正確運行需要構建運行環境,所以對於書中所涉及的主要數據結構的存儲錶示,絕大多數都在第2版給齣瞭結構定義、初始化或創建算法、輸齣算法等,這樣可由讀者自行搭建運行環境。
(4)第3章增加瞭多棧共享同一存儲時的棧浮動技術、遞歸程序的非遞歸模擬方法、優先隊列的內容;第4章增加瞭w對角矩陣的壓縮存儲、稀疏矩陣的鏈錶存儲、串的BM模式匹配算法的內容;第5章增加瞭等價類與並查集的內容;第6章增加瞭構造*小生成樹的破圈法、Dijkstra算法的內容;第7章增加瞭跳錶、紅黑樹、伸展樹、字典樹的內容。此外對保留的內容有部分增刪。教材現有內容基本覆蓋大多數學校的教學大綱和考研大綱。
(5)附錄增加瞭詞匯索引,書中齣現的重要概念都收錄在索引中,大大方便瞭讀者查閱相關的詞匯。
各章所附習題不包括選擇題,但精選瞭許多綜閤應用題,這些習題的參考解答請參看作者的另一本配套教材《數據結構精講與習題詳解》。
因為作者的水平有限,可能在某些方麵有考慮不周的地方,書中難免存在疏漏或錯誤,誠懇希望讀者提齣寶貴意見。
作 者
2016年8月於清華大學
數據結構(C語言版)(第2版)/清華大學計算機係列教材 下載 mobi epub pdf txt 電子書