高職高專立體化教材·計(jì)算機(jī)系列:數(shù)據(jù)結(jié)構(gòu)(C語言版)
定 價(jià):28 元
- 作者:郝春梅 ,齊景嘉 著
- 出版時(shí)間:2010/6/1
- ISBN:9787302228141
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP312C
- 頁碼:261
- 紙張:膠版紙
- 版次:1
- 開本:16開
《數(shù)據(jù)結(jié)構(gòu)(C語言版)》系統(tǒng)地介紹了各種常用的數(shù)據(jù)結(jié)構(gòu)以及查找、排序算法,對(duì)每種數(shù)據(jù)結(jié)構(gòu)以實(shí)例作為切入點(diǎn),詳細(xì)闡述了基本概念、邏輯結(jié)構(gòu)、存儲(chǔ)表示、基本操作以及相關(guān)的應(yīng)用,書中每章均有典型案例,并給出了算法實(shí)現(xiàn)的思路及完整的c程序。為了便于學(xué)生自學(xué)和教師教學(xué),每章后均配有大量習(xí)題及參考答案。附錄B是各章實(shí)訓(xùn)題目及參考答案!稊(shù)據(jù)結(jié)構(gòu)(C語言版)》中所有程序均在TC2.0下調(diào)試運(yùn)行通過。
《數(shù)據(jù)結(jié)構(gòu)(C語言版)》內(nèi)容精練,通俗易懂,既便于教學(xué),又適合自學(xué)。《數(shù)據(jù)結(jié)構(gòu)(C語言版)》既可作為高職高專計(jì)算機(jī)專業(yè)及信息管理專業(yè)講授數(shù)據(jù)結(jié)構(gòu)課程的教材,也可作為從事計(jì)算機(jī)軟件與應(yīng)用的工作人員、參加自學(xué)考試的考生及社會(huì)上數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)者的參考用書。
前 言
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)應(yīng)用、計(jì)算機(jī)軟件及信息管理專業(yè)的一門重要的基礎(chǔ)課程,也是計(jì)算機(jī)課程體系中的核心課程之一,是設(shè)計(jì)和實(shí)現(xiàn)系統(tǒng)軟件及大型應(yīng)用軟件的技術(shù)基礎(chǔ),它主要研究各種基本數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和基本運(yùn)算的實(shí)現(xiàn),以及查找排序等常用算法的實(shí)現(xiàn)。通過學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程,使讀者學(xué)會(huì)如何把現(xiàn)實(shí)世界的問題轉(zhuǎn)化為計(jì)算機(jī)內(nèi)部的表示和處理,進(jìn)而學(xué)會(huì)組織數(shù)據(jù),選擇合適的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)算法,形成良好的程序設(shè)計(jì)風(fēng)格,提高邏輯思維和抽象思維的能力。
本書主要面向高職高專、成人高校等計(jì)算機(jī)類專業(yè)的學(xué)生,本著“培養(yǎng)技術(shù)應(yīng)用型人才”的原則,力求以應(yīng)用為主體,對(duì)基本理論作深入淺出的闡述。因此本教材具有如下特色。
(1)簡(jiǎn)潔性:盡量避開抽象理論的介紹和復(fù)雜公式的推導(dǎo),簡(jiǎn)明扼要地介紹學(xué)生需要掌握的基礎(chǔ)知識(shí)和技術(shù)。
(2)通俗性:對(duì)每章中的基本數(shù)據(jù)結(jié)構(gòu)均通過具體的實(shí)例引出,通過通俗易懂的語言介紹專業(yè)知識(shí)。
(3)實(shí)用性:本書采用C語言作為描述語言,在介紹各種數(shù)據(jù)結(jié)構(gòu)的基本操作及查找排序算法后均給出主函數(shù),使每個(gè)算法都能直接上機(jī)實(shí)現(xiàn),并且除第1章以外每章的最后一節(jié)都精選了涉及該章內(nèi)容的案例,另外,最后還配有專門的實(shí)訓(xùn)內(nèi)容,并給出了完整的C程序,供學(xué)生上機(jī)操作,方便學(xué)生自學(xué),同時(shí)也方便教師授課。
本教材共分9章,總課時(shí)數(shù)為70學(xué)時(shí)左右,其中上機(jī)實(shí)習(xí)20學(xué)時(shí)。
第1章介紹數(shù)據(jù)結(jié)構(gòu)的一般概念和算法分析的初步知識(shí);第2章~第5章分別討論了線性表、棧與隊(duì)列、串、數(shù)組等線性邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)以及對(duì)于不同存儲(chǔ)結(jié)構(gòu)的各種基本操作的算法實(shí)現(xiàn);第6章和第7章介紹了樹和圖這兩種重要的非線性邏輯結(jié)構(gòu)、存儲(chǔ)方法及重要的應(yīng)用;第8章和第9章討論了各種查找算法及排序算法。
本書由郝春梅任第一主編,齊景嘉任第二主編,董春波、盧金昊、吳波任副主編,各章編寫分工如下:第1章和第6章由大慶石油學(xué)院應(yīng)用技術(shù)職業(yè)學(xué)院盧金昊編寫;第2章由哈爾濱金融高等?茖W(xué)校吳波編寫;第3章和實(shí)訓(xùn)部分由哈爾濱金融高等?茖W(xué)校齊景嘉編寫;第4章和第5章由大慶職業(yè)學(xué)院董春波編寫;第7、8、9章由哈爾濱金融高等?茖W(xué)校郝春梅編寫;全書由哈爾濱金融高等專科學(xué)校郝春梅統(tǒng)稿和定稿,黑龍江大學(xué)李傲霜審閱了書稿,在此表示感謝。
本書編者都是多年從事本課程教學(xué)的一線教師,但由于水平有限,書中難免存在錯(cuò)誤與疏漏之處,敬請(qǐng)讀者及同行們予以批評(píng)指正。
編 者
第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 算法的時(shí)間復(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 線性表的順序存儲(chǔ)結(jié)構(gòu) 20
2.2.1 順序表結(jié)構(gòu) 20
2.2.2 順序表的基本操作 22
2.3 線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 26
2.3.1 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 26
2.3.2 單鏈表上的基本運(yùn)算 26
2.3.3 循環(huán)鏈表和雙向鏈表 33
2.4 順序表與鏈表的比較 36
2.5 線性表的應(yīng)用 36
本章小結(jié) 43
習(xí)題 43
第3章 棧和隊(duì)列 47
3.1 棧 47
3.1.1 棧的引例 47
3.1.2 棧的定義及基本操作 47
3.1.3 棧的順序存儲(chǔ)表示和操作的實(shí)現(xiàn) 48
3.1.4 棧的鏈?zhǔn)酱鎯?chǔ)表示和操作的實(shí)現(xiàn) 51
3.2 棧的應(yīng)用 53
3.3 隊(duì)列 56
3.3.1 隊(duì)列的引例 56
3.3.2 隊(duì)列的定義及基本操作 56
3.3.3 隊(duì)列的順序存儲(chǔ)表示和操作的實(shí)現(xiàn) 57
3.3.4 隊(duì)列的鏈?zhǔn)酱鎯?chǔ)表示和操作的實(shí)現(xiàn) 61
3.4 隊(duì)列的應(yīng)用 64
本章小結(jié) 66
習(xí)題 67
第4章 串 71
4.1 串的定義及基本操作 71
4.1.1 串的基本概念 71
4.1.2 串的基本操作 72
4.2 串的存儲(chǔ)結(jié)構(gòu) 73
4.2.1 串的順序存儲(chǔ)結(jié)構(gòu) 73
4.2.2 串的堆式存儲(chǔ) 78
4.2.3 串的塊鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 81
4.3 串的應(yīng)用 81
本章小結(jié) 84
習(xí)題 84
第5章 數(shù)組 86
5.1 數(shù)組的定義和運(yùn)算 86
5.2 數(shù)組的順序存儲(chǔ)結(jié)構(gòu) 87
5.3 矩陣的壓縮存儲(chǔ)結(jié)構(gòu) 89
5.3.1 特殊矩陣 89
5.3.2 稀疏矩陣 91
5.4 廣義表的定義 94
5.5 廣義表的存儲(chǔ)結(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 二叉樹的存儲(chǔ)結(jié)構(gòu) 110
6.3.1 順序存儲(chǔ)結(jié)構(gòu) 110
6.3.2 鏈?zhǔn)酱鎯?chǔ)結(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 樹的存儲(chǔ)結(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 圖的存儲(chǔ)結(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 每一對(duì)頂點(diǎn)之間的最短路徑 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 動(dòng)態(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)實(shí)訓(xùn)及答案 233
參考文獻(xiàn) 261
在計(jì)算機(jī)領(lǐng)域,一個(gè)算法實(shí)質(zhì)上是針對(duì)所處理問題的需要,在數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)的基礎(chǔ)上實(shí)施的一種運(yùn)算。由于數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)不是唯一的,所以處理同一個(gè)問題的算法也不是唯一的;即使對(duì)于具有相同邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)的問題而言,由于設(shè)計(jì)思想和設(shè)計(jì)技巧不同,編寫出來的算法也不大相同。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)這門課程的目的,就是要學(xué)會(huì)根據(jù)實(shí)際問題的需要,為數(shù)據(jù)選擇合適的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),進(jìn)而設(shè)計(jì)出合理和實(shí)用的算法。
1.4.1算法的基本概念
既然算法在程序設(shè)計(jì)中如此重要,那么什么是算法呢?我們先看看這樣的問題:假設(shè)計(jì)算兩個(gè)整型數(shù)據(jù)的和,我們可以采用某種語言將這個(gè)求和運(yùn)算的過程描述出來,那么這個(gè)運(yùn)算過程的描述,就可以看成是一個(gè)小小的算法;另外,將一組給定的數(shù)據(jù)由小到大進(jìn)行排序,解決的方法有若干種,而每一種排序方法就是一種算法。從上面的問題描述中,我們對(duì)算法應(yīng)該有了一個(gè)大概的了解,簡(jiǎn)單地說,算法類似于程序設(shè)計(jì)中的函數(shù)。
1.算法
算法(Algorithm)是指用于解決特定問題的方法,是對(duì)問題求解過程的一種描述。它是指令的有限序列,其中每一條指令表示計(jì)算機(jī)的一個(gè)或多個(gè)操作。
2.算法的特征
算法是解決問題的特定方法,但它不同于計(jì)算方法,原因是算法有它自己的一些特征。
(1)有窮性。一個(gè)算法必須總是(對(duì)任何合法的輸入值)在執(zhí)行有窮步之后結(jié)束,且每一步都可在有窮時(shí)間內(nèi)完成。即一個(gè)算法對(duì)于任意一組合法輸入值,在執(zhí)行有窮步驟之后一定要結(jié)束。
(2)確定性。對(duì)于每種情況下所對(duì)應(yīng)執(zhí)行的操作,在算法中都有確切的規(guī)定,算法的執(zhí)行者或閱讀者都能明確其含義及如何執(zhí)行。并且在任何條件下,算法都只有一條執(zhí)行路徑。
(3)可行性。算法中的所有操作都可以通過已經(jīng)實(shí)現(xiàn)的基本運(yùn)算執(zhí)行有限次來實(shí)現(xiàn)。
(4)有輸入。一個(gè)算法應(yīng)該有0個(gè)或多個(gè)由外界提供的量(輸入)。沒有輸入的算法是缺乏靈活性的算法。算法開始時(shí),一般要給出初始數(shù)據(jù),這里0個(gè)輸入是指算法的初始數(shù)據(jù)在算法內(nèi)部給出,不需要從外部輸入數(shù)據(jù)。