《數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用》是面向青少年信息學(xué)奧林匹克競賽活動訓(xùn)練的教材!稊(shù)據(jù)結(jié)構(gòu)及其應(yīng)用》共分為6章,分別是概述(數(shù)據(jù)結(jié)構(gòu)基礎(chǔ))、線性結(jié)構(gòu)及其應(yīng)用、線性結(jié)構(gòu)的深入應(yīng)用、層次結(jié)構(gòu)(樹)及其應(yīng)用、網(wǎng)狀結(jié)構(gòu)(圖)及其應(yīng)用、數(shù)據(jù)結(jié)構(gòu)深入應(yīng)用!稊(shù)據(jù)結(jié)構(gòu)及其應(yīng)用》以最主要的三種數(shù)據(jù)組織的邏輯結(jié)構(gòu)(線性、層次、網(wǎng)狀)為主線,將數(shù)據(jù)結(jié)構(gòu)知識恰當(dāng)?shù)貞?yīng)用到實際問題的解決中,詳細分析了每一種邏輯結(jié)構(gòu)的不同的存儲方式以及基于不同存儲方式建立的對問題求解的算法。每章均配有適量習(xí)題。
《數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用》特色是描述簡單、易懂、易學(xué),有機地將實際問題求解、競賽問題求解與數(shù)據(jù)結(jié)構(gòu)緊密結(jié)合,使讀者感悟到數(shù)據(jù)結(jié)構(gòu)與算法之間的關(guān)系,體會數(shù)據(jù)結(jié)構(gòu)的具體應(yīng)用之奧妙。
《數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用》也可以作為大學(xué)生學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的配套輔導(dǎo)教材。
《數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用》遵循青少年信息學(xué)奧林匹克競賽大綱的要求,深入淺出地介紹了數(shù)據(jù)結(jié)構(gòu)的基本知識、數(shù)據(jù)結(jié)構(gòu)在程序設(shè)計中的作用以及數(shù)據(jù)結(jié)構(gòu)與算法之間的關(guān)系。本教材將數(shù)據(jù)結(jié)構(gòu)知識與算法設(shè)計有機結(jié)合,使讀者了解數(shù)據(jù)結(jié)構(gòu)在算法設(shè)計中的作用。
本教材遵循青少年信息學(xué)奧林匹克競賽大綱的要求,深入淺出地介紹了數(shù)據(jù)結(jié)構(gòu)的基本知識、數(shù)據(jù)結(jié)構(gòu)在程序設(shè)計中的作用以及數(shù)據(jù)結(jié)構(gòu)與算法之間的關(guān)系。本教材將數(shù)據(jù)結(jié)構(gòu)知識與算法設(shè)計有機結(jié)合,使讀者了解數(shù)據(jù)結(jié)構(gòu)在算法設(shè)計中的作用。了解到同一個問題若采用的數(shù)據(jù)結(jié)構(gòu)不同,其對應(yīng)的算法實現(xiàn)也不相同;反之一個算法實現(xiàn)也可以采取不同的數(shù)據(jù)結(jié)構(gòu)。
教材所涉及的內(nèi)容及知識體系既考慮到中學(xué)生現(xiàn)有的知識水平和能力,同時又兼顧到他們在原有知識結(jié)構(gòu)基礎(chǔ)上的提高、拓展與創(chuàng)新。并且,將原本高等學(xué)校的教學(xué)內(nèi)容,以初等教學(xué)的方式呈現(xiàn)在中學(xué)生面前,使學(xué)生易讀、易學(xué)、易懂,也有利于教師開展培訓(xùn)工作。
由于我們的水平有限,加之時間比較緊,錯誤和不足之處在所難免,敬請專家和廣大讀者批評指正。
第1章 概述
1.1 相關(guān)概念
1.1.1 數(shù)據(jù)
1.1.2 數(shù)據(jù)元素
1.1.3 數(shù)據(jù)類型
1.1.4 數(shù)據(jù)結(jié)構(gòu)
1.2 算法
1.2.1 算法概念及算法特性
1.2.2 算法的描述
1.2.3 算法的評價
1.3 數(shù)據(jù)結(jié)構(gòu)與算法
習(xí)題1
第2章 線性結(jié)構(gòu)及其應(yīng)用
2.1 線性表的概念及基本操作
2.1.1 線性表的概念
2.1.2 線性表的基本操作
2.2 線性表的存儲結(jié)構(gòu)
2.2.1 順序存儲結(jié)構(gòu)
2.2.2 鏈接存儲結(jié)構(gòu)
2.3 線性表基本操作的實現(xiàn)
2.3.1 順序存儲線性表基本操作的實現(xiàn)
2.3.2 單鏈表基本操作的實現(xiàn)
2.3.3 雙向鏈表基本操作的實現(xiàn)
2.3.4 循環(huán)鏈表基本操作的實現(xiàn)
2.4 線性表的應(yīng)用
2.5 特殊線性結(jié)構(gòu)——棧及其應(yīng)用
2.5.1 棧及其基本操作
2.5.2 棧的存儲方式
2.5.3 ;静僮鞯膶崿F(xiàn)
2.5.4 棧的應(yīng)用
2.6 特殊線性結(jié)構(gòu)——隊列及其應(yīng)用
2.6.1 隊列及其基本操作
2.6.2 隊列的存儲方式
2.6.3 隊列基本操作的實現(xiàn)
2.6.4 循環(huán)隊列及其基本操作的實現(xiàn)
2.6.5 隊列的應(yīng)用
習(xí)題2
第3章 線性結(jié)構(gòu)的深入應(yīng)用
3.1 高精度運算
3.1.1 基本算法
3.1.2 應(yīng)用實例
3.1.3 拓展
3.2 排序
3.2.1 簡單排序算法
3.2.2 算法的改進
3.2.3 應(yīng)用實例
3.3 查找
3.3.1 順序表的查找
3.3.2 二分查找
3.3.3 索引查找
3.3.4 應(yīng)用實例
3.4 散列查找
3.4.1 散列表的概念
3.4.2 散列函數(shù)的構(gòu)造
3.4.3 處理沖突的方法
3.4.4 應(yīng)用實例
3.5 分治
3.5.1 分治算法解決問題模式
3.5.2 應(yīng)用實例
3.6 遞推
3.6.1 遞推算法
3.6.2 常見遞推關(guān)系
3.6.3 應(yīng)用實例
3.7 動態(tài)規(guī)劃初探
3.7.1 動態(tài)規(guī)劃的定義
3.7.2 動態(tài)規(guī)劃的基本概念
3.7.3 應(yīng)用實例
習(xí)題3
3.6.3 應(yīng)用實例
3.7 動態(tài)規(guī)劃初探
3.7.1 動態(tài)規(guī)劃的定義
3.7.2 動態(tài)規(guī)劃的基本概念
3.7.3 應(yīng)用實例
習(xí)題3
第4章 層次結(jié)構(gòu)(樹)及其應(yīng)用
4.1 從線性結(jié)構(gòu)到層次結(jié)構(gòu)——廣義表及其操作
4.1.1 廣義表概念及存儲結(jié)構(gòu)
4.1.2 廣義表的建立與輸出
4.1.3 廣義袁的應(yīng)用
4.2 樹的基本概念
4.2.1 樹的定義
4.2.2 樹的表示方法
4.2.3 樹的基本術(shù)語
4.3 二叉樹的基本知識
4.3.1 二叉樹基本概念
4.3.2 二叉樹的性質(zhì)
4.3.3 二叉樹的存儲結(jié)構(gòu)
4.3.4 二叉樹的建立算法
4.3.5 二叉樹的基本運算
4.4 二叉樹的應(yīng)用
4.5 特殊二叉樹及其應(yīng)用
4.5.1 二叉排序樹
4.5.2 哈夫曼樹
4.5.3 哈夫曼編碼
4.6 層次結(jié)構(gòu)的綜合應(yīng)用
習(xí)題4
第5章 網(wǎng)狀結(jié)構(gòu)(圖)及其應(yīng)用
5.1 網(wǎng)狀結(jié)構(gòu)(圖)的基本知識
5.1.1 圖的基本概念
5.1.2 圖的連通性
5.2 圖的存儲結(jié)構(gòu)
5.2.1 鄰接矩陣
5.2.2 鄰接表
5.2.3 邊集數(shù)組
5.2.4 鄰接壓縮表
5.2.5 幾種存儲結(jié)構(gòu)比較
5.3 圖的遍歷
5.3.1 圖的深度優(yōu)先遍歷
5.3.2 圖的廣度優(yōu)先遍歷
5.3.3 應(yīng)用實例
5.4 圖的應(yīng)用
5.4.1 求圖的某個通路
5.4.2 求圖的最小生成樹
5.4.3 求圖的最短路徑
5.4.4 圖的拓撲排序及關(guān)鍵路徑
習(xí)題5
第6章 數(shù)據(jù)結(jié)構(gòu)深入應(yīng)用
6.1 概述
6.2 從數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系優(yōu)化算法
6.2.1 數(shù)學(xué)建模與算法優(yōu)化
6.2.2 時空優(yōu)化與搜索算法
6.3 數(shù)據(jù)結(jié)構(gòu)與動態(tài)規(guī)劃
6.3.1 線性結(jié)構(gòu)與動態(tài)規(guī)劃
6.3.2 樹型結(jié)構(gòu)與動態(tài)規(guī)劃
6.4 綜合應(yīng)用舉例
6.5 總結(jié)
習(xí)題6
參考文獻
第1章 概述
【本章學(xué)習(xí)要點】
。1)了解數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)、算法等基本概念的含義。
。2)掌握數(shù)據(jù)邏輯結(jié)構(gòu)的三種常用類型及表示方法,掌握數(shù)據(jù)物理結(jié)構(gòu)的常用類型及含義。
(3)掌握算法的基本特點及算法的描述方法,并具備基本的算法評價能力。
伴隨著計算機的發(fā)展,計算機的應(yīng)用領(lǐng)域從最初的科學(xué)計算逐步發(fā)展到人類活動的各個領(lǐng)域,F(xiàn)在計算機處理的對象不僅是簡單的數(shù)值或字符,還有不同結(jié)構(gòu)的各種數(shù)據(jù)。因此,要設(shè)計一個比較好的程序,通過計算機工具處理問題,除了掌握計算機語言外,還需要研究各種數(shù)據(jù)的特性和數(shù)據(jù)之間存在的關(guān)系,建立方便有效的數(shù)據(jù)結(jié)構(gòu),合理組織好用于處理的數(shù)據(jù)對象。針對同一個問題的求解,若采用的數(shù)據(jù)結(jié)構(gòu)不同,則建立在其之上的處理問題的算法也不完全相同,處理問題的效率也大相徑庭。著名計算機科學(xué)家N-Wirth指出:算法+數(shù)據(jù)結(jié)構(gòu)一程序?梢姡瑪(shù)據(jù)結(jié)構(gòu)在計算機問題處理中具有重要地位,認識和理解各種數(shù)據(jù)結(jié)構(gòu)成為計算機程序設(shè)計的基礎(chǔ)。
1.1 相關(guān)概念
1.1.1 數(shù)據(jù)
數(shù)據(jù)(data)是對客觀事物的符號表示。在計算機領(lǐng)域,數(shù)據(jù)是指所有能輸入到計算機中,并能被計算機存儲、處理和輸出的一切信息,如文字、圖形、圖像、聲音和視頻等。