高職高專立體化教材·計算機(jī)系列:數(shù)據(jù)結(jié)構(gòu)(C語言版)
定 價:28 元
- 作者:郝春梅 ,齊景嘉 著
- 出版時間:2010/6/1
- ISBN:9787302228141
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP312C
- 頁碼:261
- 紙張:膠版紙
- 版次:1
- 開本:16開
《數(shù)據(jù)結(jié)構(gòu)(C語言版)》系統(tǒng)地介紹了各種常用的數(shù)據(jù)結(jié)構(gòu)以及查找、排序算法,對每種數(shù)據(jù)結(jié)構(gòu)以實例作為切入點,詳細(xì)闡述了基本概念、邏輯結(jié)構(gòu)、存儲表示、基本操作以及相關(guān)的應(yīng)用,書中每章均有典型案例,并給出了算法實現(xiàn)的思路及完整的c程序。為了便于學(xué)生自學(xué)和教師教學(xué),每章后均配有大量習(xí)題及參考答案。附錄B是各章實訓(xùn)題目及參考答案。《數(shù)據(jù)結(jié)構(gòu)(C語言版)》中所有程序均在TC2.0下調(diào)試運行通過。
《數(shù)據(jù)結(jié)構(gòu)(C語言版)》內(nèi)容精練,通俗易懂,既便于教學(xué),又適合自學(xué)!稊(shù)據(jù)結(jié)構(gòu)(C語言版)》既可作為高職高專計算機(jī)專業(yè)及信息管理專業(yè)講授數(shù)據(jù)結(jié)構(gòu)課程的教材,也可作為從事計算機(jī)軟件與應(yīng)用的工作人員、參加自學(xué)考試的考生及社會上數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)者的參考用書。
前 言
數(shù)據(jù)結(jié)構(gòu)是計算機(jī)應(yīng)用、計算機(jī)軟件及信息管理專業(yè)的一門重要的基礎(chǔ)課程,也是計算機(jī)課程體系中的核心課程之一,是設(shè)計和實現(xiàn)系統(tǒng)軟件及大型應(yīng)用軟件的技術(shù)基礎(chǔ),它主要研究各種基本數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和基本運算的實現(xiàn),以及查找排序等常用算法的實現(xiàn)。通過學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程,使讀者學(xué)會如何把現(xiàn)實世界的問題轉(zhuǎn)化為計算機(jī)內(nèi)部的表示和處理,進(jìn)而學(xué)會組織數(shù)據(jù),選擇合適的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),設(shè)計算法,形成良好的程序設(shè)計風(fēng)格,提高邏輯思維和抽象思維的能力。
本書主要面向高職高專、成人高校等計算機(jī)類專業(yè)的學(xué)生,本著“培養(yǎng)技術(shù)應(yīng)用型人才”的原則,力求以應(yīng)用為主體,對基本理論作深入淺出的闡述。因此本教材具有如下特色。
(1)簡潔性:盡量避開抽象理論的介紹和復(fù)雜公式的推導(dǎo),簡明扼要地介紹學(xué)生需要掌握的基礎(chǔ)知識和技術(shù)。
(2)通俗性:對每章中的基本數(shù)據(jù)結(jié)構(gòu)均通過具體的實例引出,通過通俗易懂的語言介紹專業(yè)知識。
(3)實用性:本書采用C語言作為描述語言,在介紹各種數(shù)據(jù)結(jié)構(gòu)的基本操作及查找排序算法后均給出主函數(shù),使每個算法都能直接上機(jī)實現(xiàn),并且除第1章以外每章的最后一節(jié)都精選了涉及該章內(nèi)容的案例,另外,最后還配有專門的實訓(xùn)內(nèi)容,并給出了完整的C程序,供學(xué)生上機(jī)操作,方便學(xué)生自學(xué),同時也方便教師授課。
本教材共分9章,總課時數(shù)為70學(xué)時左右,其中上機(jī)實習(xí)20學(xué)時。
第1章介紹數(shù)據(jù)結(jié)構(gòu)的一般概念和算法分析的初步知識;第2章~第5章分別討論了線性表、棧與隊列、串、數(shù)組等線性邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)以及對于不同存儲結(jié)構(gòu)的各種基本操作的算法實現(xiàn);第6章和第7章介紹了樹和圖這兩種重要的非線性邏輯結(jié)構(gòu)、存儲方法及重要的應(yīng)用;第8章和第9章討論了各種查找算法及排序算法。
本書由郝春梅任第一主編,齊景嘉任第二主編,董春波、盧金昊、吳波任副主編,各章編寫分工如下:第1章和第6章由大慶石油學(xué)院應(yīng)用技術(shù)職業(yè)學(xué)院盧金昊編寫;第2章由哈爾濱金融高等?茖W(xué)校吳波編寫;第3章和實訓(xùn)部分由哈爾濱金融高等專科學(xué)校齊景嘉編寫;第4章和第5章由大慶職業(yè)學(xué)院董春波編寫;第7、8、9章由哈爾濱金融高等專科學(xué)校郝春梅編寫;全書由哈爾濱金融高等?茖W(xué)校郝春梅統(tǒng)稿和定稿,黑龍江大學(xué)李傲霜審閱了書稿,在此表示感謝。
本書編者都是多年從事本課程教學(xué)的一線教師,但由于水平有限,書中難免存在錯誤與疏漏之處,敬請讀者及同行們予以批評指正。
編 者
第1章 緒論 1
1.1 引言 1
1.2 基本概念與術(shù)語 4
1.3 抽象數(shù)據(jù)類型 9
1.3.1 數(shù)據(jù)類型 9
1.3.2 抽象數(shù)據(jù)類型概述 10
1.4 算法和算法分析 11
1.4.1 算法的基本概念 11
1.4.2 算法的時間復(fù)雜度 14
1.4.3 算法的空間復(fù)雜度 16
本章小結(jié) 16
習(xí)題 17
第2章 線性表 19
2.1 線性表的定義及其基本操作 19
2.1.1 線性表的引例 19
2.1.2 線性表的定義 20
2.1.3 線性表的基本操作 20
2.2 線性表的順序存儲結(jié)構(gòu) 20
2.2.1 順序表結(jié)構(gòu) 20
2.2.2 順序表的基本操作 22
2.3 線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu) 26
2.3.1 鏈?zhǔn)酱鎯Y(jié)構(gòu) 26
2.3.2 單鏈表上的基本運算 26
2.3.3 循環(huán)鏈表和雙向鏈表 33
2.4 順序表與鏈表的比較 36
2.5 線性表的應(yīng)用 36
本章小結(jié) 43
習(xí)題 43
第3章 棧和隊列 47
3.1 棧 47
3.1.1 棧的引例 47
3.1.2 棧的定義及基本操作 47
3.1.3 棧的順序存儲表示和操作的實現(xiàn) 48
3.1.4 棧的鏈?zhǔn)酱鎯Ρ硎竞筒僮鞯膶崿F(xiàn) 51
3.2 棧的應(yīng)用 53
3.3 隊列 56
3.3.1 隊列的引例 56
3.3.2 隊列的定義及基本操作 56
3.3.3 隊列的順序存儲表示和操作的實現(xiàn) 57
3.3.4 隊列的鏈?zhǔn)酱鎯Ρ硎竞筒僮鞯膶崿F(xiàn) 61
3.4 隊列的應(yīng)用 64
本章小結(jié) 66
習(xí)題 67
第4章 串 71
4.1 串的定義及基本操作 71
4.1.1 串的基本概念 71
4.1.2 串的基本操作 72
4.2 串的存儲結(jié)構(gòu) 73
4.2.1 串的順序存儲結(jié)構(gòu) 73
4.2.2 串的堆式存儲 78
4.2.3 串的塊鏈?zhǔn)酱鎯Y(jié)構(gòu) 81
4.3 串的應(yīng)用 81
本章小結(jié) 84
習(xí)題 84
第5章 數(shù)組 86
5.1 數(shù)組的定義和運算 86
5.2 數(shù)組的順序存儲結(jié)構(gòu) 87
5.3 矩陣的壓縮存儲結(jié)構(gòu) 89
5.3.1 特殊矩陣 89
5.3.2 稀疏矩陣 91
5.4 廣義表的定義 94
5.5 廣義表的存儲結(jié)構(gòu) 95
5.5.1 頭尾表示法 95
5.5.2 孩子兄弟表示法 96
5.6 數(shù)組的應(yīng)用 97
本章小結(jié) 101
習(xí)題 101
第6章 樹和二叉樹 104
6.1 樹的概念和基本操作 104
6.1.1 樹的引例 104
6.1.2 樹的定義和基本術(shù)語 104
6.1.3 樹的基本操作 106
6.2 二叉樹 107
6.2.1 二叉樹的定義 107
6.2.2 二叉樹的性質(zhì) 107
6.2.3 二叉樹的基本操作 109
6.3 二叉樹的存儲結(jié)構(gòu) 110
6.3.1 順序存儲結(jié)構(gòu) 110
6.3.2 鏈?zhǔn)酱鎯Y(jié)構(gòu) 110
6.4 二叉樹的遍歷 112
6.4.1 先序遍歷 112
6.4.2 中序遍歷 113
6.4.3 后序遍歷 113
6.4.4 層次遍歷 114
6.5 線索二叉樹 115
6.5.1 線索二叉樹的概念 115
6.5.2 中序線索二叉樹的構(gòu)造算法 116
6.5.3 線索二叉樹的遍歷 117
6.6 哈夫曼樹及其應(yīng)用 119
6.6.1 哈夫曼樹的定義 119
6.6.2 構(gòu)造哈夫曼樹 120
6.6.3 哈夫曼樹的應(yīng)用 122
6.7 樹與森林 124
6.7.1 樹的存儲結(jié)構(gòu) 124
6.7.2 樹、森林與二叉樹的轉(zhuǎn)換 126
6.8 二叉樹的應(yīng)用 128
本章小結(jié) 131
習(xí)題 131
第7章 圖 135
7.1 圖的定義和術(shù)語 135
7.1.1 圖的引例 135
7.1.2 圖的定義 136
7.1.3 圖的基本術(shù)語 136
7.2 圖的存儲結(jié)構(gòu) 139
7.2.1 鄰接矩陣 139
7.2.2 鄰接鏈表 141
7.3 圖的遍歷 144
7.3.1 深度優(yōu)先搜索 144
7.3.2 廣度優(yōu)先搜索 147
7.4 最小生成樹 149
7.4.1 普里姆(Prim)算法 149
7.4.2 克魯斯卡爾(Kruskal)算法 150
7.5 最短路徑 151
7.5.1 單源最短路徑 151
7.5.2 每一對頂點之間的最短路徑 153
7.6 AOV網(wǎng)拓?fù)渑判?nbsp;157
7.6.1 AOV網(wǎng) 157
7.6.2 AOV網(wǎng)拓?fù)渑判?nbsp;158
7.7 圖的應(yīng)用 162
本章小結(jié) 166
習(xí)題 166
第8章 查找 170
8.1 基本概念 170
8.2 靜態(tài)查找表 171
8.2.1 順序查找 171
8.2.2 折半查找 173
8.2.3 分塊查找 175
8.3 動態(tài)查找表 176
8.3.1 二叉排序樹的概念 176
8.3.2 二叉排序樹的查找 177
8.3.3 二叉排序樹的插入和生成 178
8.3.4 二叉排序樹的刪除 179
8.3.5 二叉排序樹查找算法效率分析 180
8.4 哈希表查找 181
8.4.1 哈希表的概念 181
8.4.2 哈希函數(shù)的構(gòu)造方法 181
8.4.3 處理沖突的方法 182
8.4.4 哈希表的查找 184
8.5 查找的應(yīng)用 185
本章小結(jié) 188
習(xí)題 189
第9章 排序 191
9.1 基本概念 191
9.2 插入排序 192
9.2.1 直接插入排序 192
9.2.2 希爾排序 194
9.3 交換排序 195
9.3.1 冒泡排序 195
9.3.2 快速排序 197
9.4 選擇排序 200
9.4.1 直接選擇排序 200
9.4.2 堆排序 201
9.5 歸并排序 205
9.6 各種內(nèi)部排序方法的比較 207
9.7 排序的應(yīng)用 208
本章小結(jié) 210
習(xí)題 211
附錄A 習(xí)題答案 213
附錄B 數(shù)據(jù)結(jié)構(gòu)實訓(xùn)及答案 233
參考文獻(xiàn) 261
在計算機(jī)領(lǐng)域,一個算法實質(zhì)上是針對所處理問題的需要,在數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)的基礎(chǔ)上實施的一種運算。由于數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)不是唯一的,所以處理同一個問題的算法也不是唯一的;即使對于具有相同邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)的問題而言,由于設(shè)計思想和設(shè)計技巧不同,編寫出來的算法也不大相同。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)這門課程的目的,就是要學(xué)會根據(jù)實際問題的需要,為數(shù)據(jù)選擇合適的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),進(jìn)而設(shè)計出合理和實用的算法。
1.4.1算法的基本概念
既然算法在程序設(shè)計中如此重要,那么什么是算法呢?我們先看看這樣的問題:假設(shè)計算兩個整型數(shù)據(jù)的和,我們可以采用某種語言將這個求和運算的過程描述出來,那么這個運算過程的描述,就可以看成是一個小小的算法;另外,將一組給定的數(shù)據(jù)由小到大進(jìn)行排序,解決的方法有若干種,而每一種排序方法就是一種算法。從上面的問題描述中,我們對算法應(yīng)該有了一個大概的了解,簡單地說,算法類似于程序設(shè)計中的函數(shù)。
1.算法
算法(Algorithm)是指用于解決特定問題的方法,是對問題求解過程的一種描述。它是指令的有限序列,其中每一條指令表示計算機(jī)的一個或多個操作。
2.算法的特征
算法是解決問題的特定方法,但它不同于計算方法,原因是算法有它自己的一些特征。
(1)有窮性。一個算法必須總是(對任何合法的輸入值)在執(zhí)行有窮步之后結(jié)束,且每一步都可在有窮時間內(nèi)完成。即一個算法對于任意一組合法輸入值,在執(zhí)行有窮步驟之后一定要結(jié)束。
(2)確定性。對于每種情況下所對應(yīng)執(zhí)行的操作,在算法中都有確切的規(guī)定,算法的執(zhí)行者或閱讀者都能明確其含義及如何執(zhí)行。并且在任何條件下,算法都只有一條執(zhí)行路徑。
(3)可行性。算法中的所有操作都可以通過已經(jīng)實現(xiàn)的基本運算執(zhí)行有限次來實現(xiàn)。
(4)有輸入。一個算法應(yīng)該有0個或多個由外界提供的量(輸入)。沒有輸入的算法是缺乏靈活性的算法。算法開始時,一般要給出初始數(shù)據(jù),這里0個輸入是指算法的初始數(shù)據(jù)在算法內(nèi)部給出,不需要從外部輸入數(shù)據(jù)。