數(shù)據(jù)結(jié)構(gòu)是高等學(xué)校計(jì)算機(jī)及其相關(guān)專業(yè)的核心課程,是計(jì)算機(jī)程序設(shè)計(jì)的基礎(chǔ)。本書(shū)按照“像外行一樣思考,像專家一樣實(shí)踐”的解決問(wèn)題的思維方法,列舉大量實(shí)際或工程案例,從具體問(wèn)題中引出抽象概念,運(yùn)用類(lèi)比、圖形化描述等各種方式,對(duì)經(jīng)典數(shù)據(jù)結(jié)構(gòu)內(nèi)容做深入淺出的介紹。在介紹數(shù)據(jù)結(jié)構(gòu)和算法的基本概念和算法分析方法的基礎(chǔ)之上,從軟件開(kāi)發(fā)的角度,通過(guò)應(yīng)用背景或知識(shí)背景介紹、數(shù)據(jù)分析、函數(shù)設(shè)計(jì)、算法設(shè)計(jì)、測(cè)試調(diào)試等環(huán)節(jié),分別對(duì)順序表、鏈表、棧、隊(duì)列、串、數(shù)組、樹(shù)、圖等基本類(lèi)型的數(shù)據(jù)結(jié)構(gòu)進(jìn)行了分析和討論;介紹數(shù)據(jù)的典型操作方法,如數(shù)據(jù)排序方法和查找方法;介紹常見(jiàn)的如遞歸法、分治法、動(dòng)態(tài)規(guī)劃、貪心法等經(jīng)典算法。
周幸妮,西安電子科技大學(xué)副教授,長(zhǎng)期從事“數(shù)據(jù)結(jié)構(gòu)”、“C程序設(shè)計(jì)語(yǔ)言”等課程的教學(xué)工作,著有《C程序設(shè)計(jì)》等教材。
第1章 緒論11.1 從編程說(shuō)起11.2 程序要處理的數(shù)據(jù)51.3 數(shù)據(jù)結(jié)構(gòu)的引入111.4 數(shù)據(jù)結(jié)構(gòu)的基本概念131.4.1 數(shù)據(jù)結(jié)構(gòu)基本術(shù)語(yǔ)131.4.2 數(shù)據(jù)結(jié)構(gòu)的三個(gè)要素131.5 如何設(shè)計(jì)算法161.5.1 算法的定義及表示方法161.5.2 算法設(shè)計(jì)與函數(shù)設(shè)計(jì)的關(guān)系171.5.3 軟件設(shè)計(jì)描述方法181.5.4 算法設(shè)計(jì)的一般步驟191.6 如何評(píng)價(jià)算法的優(yōu)劣211.6.1 算法的設(shè)計(jì)要求211.6.2 算法效率的度量方法221.7 算法性能的事前分析方法231.7.1 問(wèn)題的規(guī)模與算法的策略231.7.2 算法效率的上限與下限251.7.3 漸進(jìn)的上限——算法的時(shí)間 復(fù)雜度281.7.4 算法時(shí)間復(fù)雜度的綜合討論291.7.5 算法的空間效率分析方法331.8 算法性能綜合考量371.9 本章小結(jié)38習(xí)題38第2章 結(jié)點(diǎn)邏輯關(guān)系為線性的結(jié)構(gòu)——線性表412.1 從邏輯結(jié)構(gòu)角度看線性表412.1.1 實(shí)際問(wèn)題中的線性關(guān)系412.1.2 線性表的邏輯結(jié)構(gòu)422.2 線性表的存儲(chǔ)結(jié)構(gòu)方法之一——順序表432.2.1 順序表的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)432.2.2 順序表的運(yùn)算462.2.3 順序存儲(chǔ)結(jié)構(gòu)的討論532.3 線性表的存儲(chǔ)結(jié)構(gòu)方法之二——鏈表532.3.1 單鏈表的存儲(chǔ)562.3.2 單鏈表的運(yùn)算602.3.3 單鏈表的討論782.3.4 循環(huán)鏈表782.3.5 雙向鏈表812.3.6 鏈表小結(jié)862.4 線性表的應(yīng)用舉例872.4.1 逆序輸出單鏈表結(jié)點(diǎn)值872.4.2 一元多項(xiàng)式的相加882.5 順序表和鏈表的比較952.6 本章小結(jié)96習(xí)題97第3章 運(yùn)算受限的線性表——棧和隊(duì)列1003.1 !凑障热牒蟪龅姆绞焦芾淼木性表1003.1.1 棧處理模式的引入1003.1.2 棧的邏輯結(jié)構(gòu)1043.1.3 棧的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)1063.1.4 棧的操作1073.1.5 各種棧結(jié)構(gòu)的比較1233.1.6 棧的應(yīng)用舉例1233.2 隊(duì)列——按照先入先出方式管理的線性表1323.2.1 隊(duì)列處理模式的引入1333.2.2 隊(duì)列的邏輯結(jié)構(gòu)1363.2.3 隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)1373.2.4 順序隊(duì)列的基本操作1483.2.5 隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)1523.2.6 鏈隊(duì)列的基本操作1533.2.7 各種隊(duì)列結(jié)構(gòu)的比較1603.2.8 隊(duì)列的應(yīng)用舉例1613.3 本章小結(jié)171習(xí)題172第4章 內(nèi)容特殊的線性表——多維數(shù)組與字符串1754.1 多維數(shù)組1754.1.1 數(shù)組的概念1754.1.2 數(shù)組的存儲(chǔ)結(jié)構(gòu)1774.2 矩陣的壓縮存儲(chǔ)1814.2.1 對(duì)稱矩陣的壓縮存儲(chǔ)1824.2.2 三角矩陣的壓縮存儲(chǔ)1834.2.3 對(duì)角矩陣的壓縮存儲(chǔ)1834.2.4 稀疏矩陣的壓縮存儲(chǔ)1854.3 字符串1894.3.1 字符串的定義1894.3.2 字符串的存儲(chǔ)結(jié)構(gòu)1904.3.3 字符串的查找——模式匹配1954.4 本章小結(jié)211習(xí)題213第5章 結(jié)點(diǎn)邏輯關(guān)系分層次的非線性結(jié)構(gòu)——樹(shù)2165.1 實(shí)際問(wèn)題中的樹(shù)2165.2 樹(shù)的邏輯結(jié)構(gòu)2195.2.1 樹(shù)的定義和基本術(shù)語(yǔ)2195.2.2 樹(shù)的操作定義2225.3 樹(shù)的存儲(chǔ)結(jié)構(gòu)2225.3.1 樹(shù)的連續(xù)存儲(chǔ)方式2235.3.2 樹(shù)的鏈?zhǔn)酱鎯?chǔ)方式2245.4 二叉樹(shù)的邏輯結(jié)構(gòu)2265.4.1 二叉樹(shù)的概念2295.4.2 二叉樹(shù)的基本性質(zhì)2305.4.3 二叉樹(shù)的操作定義2315.5 二叉樹(shù)的存儲(chǔ)結(jié)構(gòu)及實(shí)現(xiàn)2315.5.1 二叉樹(shù)的順序結(jié)構(gòu)2325.5.2 二叉樹(shù)的鏈?zhǔn)酱鎯?chǔ) 結(jié)構(gòu)——二叉鏈表2355.5.3 建立動(dòng)態(tài)二叉鏈表2365.6 二叉樹(shù)結(jié)點(diǎn)的查找 問(wèn)題——樹(shù)的遍歷2405.6.1 樹(shù)的廣度優(yōu)先遍歷2425.6.2 樹(shù)的深度優(yōu)先遍歷2445.6.3 樹(shù)的遍歷的應(yīng)用2555.7 樹(shù)的應(yīng)用2595.7.1 表達(dá)式樹(shù)2595.7.2 線索二叉樹(shù)2605.7.3 哈夫曼樹(shù)及哈夫曼編碼2655.8 廣義表2785.8.1 廣義表的定義2795.8.2 廣義表的存儲(chǔ)2815.8.3 廣義表的基本運(yùn)算2875.9 本章小結(jié)293習(xí)題295第6章 結(jié)點(diǎn)邏輯關(guān)系任意的非線性結(jié)構(gòu)——圖2996.1 實(shí)際問(wèn)題中的圖及抽象2996.2 圖的邏輯結(jié)構(gòu)3046.2.1 圖的定義和基本術(shù)語(yǔ)3046.2.2 圖的操作定義3076.3 圖的存儲(chǔ)結(jié)構(gòu)及實(shí)現(xiàn)3086.3.1 圖的數(shù)組表示法1—— 鄰接矩陣3086.3.2 圖的數(shù)組表示法2—— 邊集數(shù)組3106.3.3 圖的鏈表表示法1——鄰接表3116.3.4 圖的鏈表表示法2—— 十字鏈表3166.3.5 圖的鏈表表示法3——鄰接多重表3176.3.6 圖各種存儲(chǔ)結(jié)構(gòu)的歸結(jié)比較3196.4 圖的基本操作3206.4.1 鄰接矩陣的操作3206.4.2 鄰接表的操作3226.5 圖的頂點(diǎn)查找問(wèn)題——圖的遍歷3286.5.1 圖的廣度優(yōu)先遍歷BFS3296.5.2 圖的深度優(yōu)先遍歷DFS3346.5.3 圖的遍歷小結(jié)3406.6 圖的經(jīng)典應(yīng)用——圖中的樹(shù)問(wèn)題3406.6.1 生成樹(shù)3426.6.2 最小生成樹(shù)MST3436.6.3 求最小生成樹(shù)算法1——Prim 算法3446.6.4 求最小生成樹(shù)算法2——Kruskal算法3496.6.5 生成樹(shù)算法小結(jié)3566.7 圖的經(jīng)典應(yīng)用——最短路徑問(wèn)題3576.7.1 最短路徑問(wèn)題的引入3576.7.2 單源最短路徑算法——Dijkstra算法3596.7.3 各頂點(diǎn)對(duì)間最短路徑算法——Floyd算法3646.7.4 最短路徑問(wèn)題小結(jié)3696.8 圖的經(jīng)典應(yīng)用——活動(dòng)頂點(diǎn)與活動(dòng)邊的問(wèn)題3706.8.1 圖的活動(dòng)頂點(diǎn)排序問(wèn)題的引入3706.8.2 AOV網(wǎng)與拓?fù)渑判颉顒?dòng)頂點(diǎn)排序問(wèn)題3736.8.3 AOE網(wǎng)與關(guān)鍵路徑——活動(dòng)邊最長(zhǎng)問(wèn)題3786.8.4 活動(dòng)頂點(diǎn)與活動(dòng)邊問(wèn)題小結(jié)3906.9 本章小結(jié)390習(xí)題391第7章 數(shù)據(jù)的處理方法——排序技術(shù)3977.1 概述3977.1.1 排序的基本概念3977.1.2 排序算法的分類(lèi)3997.2 插入排序3997.2.1 直接插入排序3997.2.2 希爾排序4027.3 交換排序4047.3.1 冒泡排序4047.3.2 快速排序4067.4 選擇排序4097.4.1 簡(jiǎn)單選擇排序4107.4.2 堆排序4117.5 歸并排序4157.6 分配排序4187.6.1 桶排序4187.6.2 基數(shù)排序4217.7 各種排序算法的比較4247.8 本章小結(jié)427習(xí)題428第8章 數(shù)據(jù)的處理——索引與查找技術(shù)4318.1 索引的基本概念4338.1.1 索引的定義4338.1.2 索引的邏輯特征4348.1.3 索引的主要操作4358.2 線性索引技術(shù)4358.2.1 稠密索引4358.2.2 分塊索引4368.2.3 多重表4378.2.4 倒排表4398.3 樹(shù)形索引4418.3.1 二叉排序樹(shù)4418.3.2 B樹(shù)4488.4 查找概述4528.4.1 查找的基本概念4528.4.2 查找算法的性能4538.5 線性表的查找技術(shù)4538.5.1 順序查找4538.5.2 有序表查找4548.5.3 索引查找4598.6 樹(shù)表的查找技術(shù)4618.6.1 二叉排序樹(shù)4618.6.2 B樹(shù)4628.6.3 在非數(shù)值有序表上的查找——字典樹(shù)4628.7 散列表的查找技術(shù)4648.7.1 散列概述4658.7.2 散列函數(shù)的設(shè)計(jì)4678.7.3 處理沖突的方法4698.7.4 散列查找的性能分析4738.8 本章小結(jié)474習(xí)題476第9章 經(jīng)典算法4799.1 遞歸算法4799.1.1 遞歸的概念及要素4799.1.2 遞歸的應(yīng)用場(chǎng)景4819.1.3 遞歸的計(jì)算機(jī)實(shí)現(xiàn)4829.1.4 遞歸方法特點(diǎn)分析4839.1.5 遞歸算法實(shí)例4859.1.6 遞歸小結(jié)4879.2 分治算法4879.2.1 分治是什么4879.2.2 分治法的適用條件4889.2.3 分治問(wèn)題的類(lèi)型4889.2.4 分治法小結(jié)4909.3 動(dòng)態(tài)規(guī)劃4919.3.1 什么是動(dòng)態(tài)規(guī)劃4919.3.2 動(dòng)態(tài)規(guī)劃的解題方法4939.3.3 動(dòng)態(tài)規(guī)劃解題實(shí)例4959.3.4 動(dòng)態(tài)規(guī)劃小結(jié)5009.4 貪心算法5019.4.1 貪心算法是什么5019.