《數(shù)據(jù)結(jié)構(gòu)(第2版)》介紹了各種常用的數(shù)據(jù)結(jié)構(gòu)及其操作,包括線性表、棧和隊(duì)列、串、數(shù)組、樹、圖、查找和排序等。全書使用標(biāo)準(zhǔn)的C語言作為算法描述工具。《數(shù)據(jù)結(jié)構(gòu)(第2版)》內(nèi)容通俗易懂,側(cè)重于應(yīng)用,力求內(nèi)容與應(yīng)用實(shí)例相結(jié)合,并附有上機(jī)實(shí)驗(yàn)和實(shí)訓(xùn)指導(dǎo),有利于提高讀者分析問題和解決問題的能力。 《數(shù)據(jù)結(jié)構(gòu)(第2版)》可以作為高職高專院校計(jì)算機(jī)相關(guān)專業(yè)的教材,也可以作為專升本、自學(xué)考試的輔導(dǎo)教材。
本書內(nèi)容通俗易懂,側(cè)重于應(yīng)用,力求內(nèi)容與應(yīng)用實(shí)例相結(jié)合,并附有上機(jī)實(shí)驗(yàn)和實(shí)訓(xùn)指導(dǎo),有利于提高讀者分析問題和解決問題的能力。
前言
第1章 概論
1.1 基本概念和術(shù)語
1.1.1 邏輯結(jié)構(gòu)
1.1.2 存儲(chǔ)結(jié)構(gòu)
1.2 算法的描述與分析
1.2.1 算法描述
1.2.2 算法分析
1.2.3 時(shí)間復(fù)雜度
1.2.4 空間復(fù)雜度
本章小結(jié)
習(xí)題
第2章 線性表
2.1 線性表及其邏輯結(jié)構(gòu)
2.1.1 線性表的定義
2.1.2 線性表的運(yùn)算
2.2 線性表的順序存儲(chǔ)
2.2.1 順序表結(jié)構(gòu)
2.2.2 順序表的基本操作
2.3 線性表的鏈?zhǔn)酱鎯?chǔ)
2.3.1 單鏈表結(jié)構(gòu)
2.3.2 單鏈表的基本操作
2.4 單向循環(huán)鏈表
2.5 雙向循環(huán)鏈表
2.5.1 雙向鏈表
2.5.2 雙向循環(huán)鏈表
本章小結(jié)
習(xí)題
第3章 棧和隊(duì)列
3.1 棧
3.1.1 棧的定義與基本運(yùn)算
3.1.2 順序棧
3.1.3 鏈棧
3.2 隊(duì)列
3.2.1 隊(duì)列的定義及基本運(yùn)算
3.2.2 順序隊(duì)列
3.2.3 鏈隊(duì)列
3.3 棧和隊(duì)列的應(yīng)用
3.3.1 棧的應(yīng)用
3.3.2 隊(duì)列的應(yīng)用
本章小結(jié)
習(xí)題
第4章 串
4.1 串及其運(yùn)算
4.1.1 串的基本概念
4.1.2 串的基本運(yùn)算
4.2 串的存儲(chǔ)結(jié)構(gòu)
4.2.1 串的順序存儲(chǔ)
4.2.2 串的鏈?zhǔn)酱鎯?chǔ)
4.3 串運(yùn)算的實(shí)現(xiàn)
4.4 串的模式匹配運(yùn)算
4.4.1 有回溯的模式匹配算法(BF算法)
4.4.2 無回溯的模式匹配算法(KMP算法)
本章小結(jié)
習(xí)題
第5章 數(shù)組和廣義表
5.1 數(shù)組
5.1.1 數(shù)組的定義
5.1.2 數(shù)組的順序存儲(chǔ)
5.2 矩陣的壓縮存儲(chǔ)
5.2.1 特殊矩陣
5.2.2 稀疏矩陣
5.3 廣義表
5.3.1 廣義表的定義與運(yùn)算
5.3.2 廣義表的存儲(chǔ)
本章小結(jié)
習(xí)題
第6章 樹
6.1 樹的概念
6.1.1 樹的定義
6.1.2 樹的基本術(shù)語
6.1.3 樹的基本操作
6.2 二叉樹
6.2.1 二叉樹的定義
6.2.2 二叉樹的性質(zhì)
6.2.3 二叉樹的存儲(chǔ)結(jié)構(gòu)
6.3 遍歷二叉樹
6.3.1 二叉樹遍歷方法
6.3.2 二叉樹遍歷的遞歸算法
6.3.3 二叉樹遍歷的非遞歸算法
6.4 二叉樹的遞歸編程應(yīng)用
6.5 線索二叉樹
6.5.1 線索二叉樹的概念及存儲(chǔ)
6.5.2 有關(guān)線索二叉樹的算法
6.6 樹和森林
6.6.1 樹的存儲(chǔ)結(jié)構(gòu)
6.6.2 樹、森林和二叉樹的轉(zhuǎn)換
6.7 哈夫曼樹及哈夫曼編碼
本章小結(jié)
習(xí)題
第7章 圖
7.1 圖的基本概念
7.1.1 圖的定義
7.1.2 圖的基本術(shù)語
7.2 圖的存儲(chǔ)結(jié)構(gòu)
7.2.1 鄰接矩陣
7.2.2 鄰接表
7.3 圖的遍歷
7.3.1 深度優(yōu)先搜索
7.3.2 廣度優(yōu)先搜索
7.4 生成樹
7.4.1 生成樹
7.4.2 最小生成樹
7.5 最短路徑
7.5.1 單源點(diǎn)最短路徑
7.5.2 所有頂點(diǎn)對(duì)之間的最短路徑
7.6 拓?fù)渑判?br>7.6.1 頂點(diǎn)活動(dòng)網(wǎng)
7.6.2 拓?fù)渑判?br>本章小結(jié)
習(xí)題
第8章 排序
8.1 基本概念
8.2 插入排序
8.2.1 直接插入排序
8.2.2 希爾排序
8.3 交換排序
8.3.1 冒泡排序
8.3.2 快速排序
8.4 選擇排序
8.4.1 直接選擇排序
8.4.2 堆排序
8.5 歸并排序
8.6 排序方法的比較和選擇
8.6.1 排序方法的比較
8.6.2 排序方法的選擇山
本章小結(jié)
習(xí)題
第9章 查找
9.1 基本概念
9.2 線性表的查找
9.2.1 順序查找
9.2.2 二分查找
9.2.3 分塊查找
9.3 樹上的查找
9.4 散列查找
9.4.1 基本概念
9.4.2 散列函數(shù)的構(gòu)造方法
9.4.3 沖突處理方法
9.4.4 散列查找及分析
本章小結(jié)
附錄
參考文獻(xiàn)
圖是一種網(wǎng)狀數(shù)據(jù)結(jié)構(gòu),屬于多對(duì)多的非線性結(jié)構(gòu),圖中的每個(gè)結(jié)點(diǎn)可以有多個(gè)直接前趨和直接后繼。圖的存儲(chǔ)包括存儲(chǔ)圖中頂點(diǎn)的信息和邊的信息兩個(gè)方面。這兩個(gè)部分既可以分開單獨(dú)存儲(chǔ),也可以用結(jié)構(gòu)體形式一起存儲(chǔ)。圖的存儲(chǔ)結(jié)構(gòu)有鄰接矩陣、鄰接表等。
圖的遍歷包含深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷。對(duì)于用鄰接矩陣結(jié)構(gòu)存儲(chǔ)的圖,從某個(gè)給定的頂點(diǎn)出發(fā)的圖的遍歷得到的訪問頂點(diǎn)次序是唯一的,而對(duì)于鄰接表結(jié)構(gòu)存儲(chǔ)的圖從某個(gè)給定的頂點(diǎn)出發(fā)的圖的遍歷得到的訪問頂點(diǎn)次序隨建立鄰接表的不同而可能不同。
一個(gè)連通圖的生成樹含有該圖的全部n個(gè)頂點(diǎn)和其中n-1條邊(不構(gòu)成回路),其中權(quán)值之和最小的生成樹稱為最小生成樹。求最小生成樹有兩種不同的方法,一種是普里姆算法;另一種是克魯斯卡爾算法。如果所采用的方法不同,得到的最小生成樹中邊的次序也可能不同,但最小生成樹的權(quán)值之和相同。
求圖的最短路徑有兩種算法,其一是單源點(diǎn)的最短路徑,用迪杰斯特拉算法來實(shí)現(xiàn);其二是所有頂點(diǎn)對(duì)的最短路徑,用弗洛伊德算法來實(shí)現(xiàn)。