《數(shù)據(jù)結(jié)構(gòu)及其應用》是面向青少年信息學奧林匹克競賽活動訓練的教材。《數(shù)據(jù)結(jié)構(gòu)及其應用》共分為6章,分別是概述(數(shù)據(jù)結(jié)構(gòu)基礎)、線性結(jié)構(gòu)及其應用、線性結(jié)構(gòu)的深入應用、層次結(jié)構(gòu)(樹)及其應用、網(wǎng)狀結(jié)構(gòu)(圖)及其應用、數(shù)據(jù)結(jié)構(gòu)深入應用!稊(shù)據(jù)結(jié)構(gòu)及其應用》以最主要的三種數(shù)據(jù)組織的邏輯結(jié)構(gòu)(線性、層次、網(wǎng)狀)為主線,將數(shù)據(jù)結(jié)構(gòu)知識恰當?shù)貞玫綄嶋H問題的解決中,詳細分析了每一種邏輯結(jié)構(gòu)的不同的存儲方式以及基于不同存儲方式建立的對問題求解的算法。每章均配有適量習題。
《數(shù)據(jù)結(jié)構(gòu)及其應用》特色是描述簡單、易懂、易學,有機地將實際問題求解、競賽問題求解與數(shù)據(jù)結(jié)構(gòu)緊密結(jié)合,使讀者感悟到數(shù)據(jù)結(jié)構(gòu)與算法之間的關(guān)系,體會數(shù)據(jù)結(jié)構(gòu)的具體應用之奧妙。
《數(shù)據(jù)結(jié)構(gòu)及其應用》也可以作為大學生學習數(shù)據(jù)結(jié)構(gòu)的配套輔導教材。
《數(shù)據(jù)結(jié)構(gòu)及其應用》遵循青少年信息學奧林匹克競賽大綱的要求,深入淺出地介紹了數(shù)據(jù)結(jié)構(gòu)的基本知識、數(shù)據(jù)結(jié)構(gòu)在程序設計中的作用以及數(shù)據(jù)結(jié)構(gòu)與算法之間的關(guān)系。本教材將數(shù)據(jù)結(jié)構(gòu)知識與算法設計有機結(jié)合,使讀者了解數(shù)據(jù)結(jié)構(gòu)在算法設計中的作用。
本教材遵循青少年信息學奧林匹克競賽大綱的要求,深入淺出地介紹了數(shù)據(jù)結(jié)構(gòu)的基本知識、數(shù)據(jù)結(jié)構(gòu)在程序設計中的作用以及數(shù)據(jù)結(jié)構(gòu)與算法之間的關(guān)系。本教材將數(shù)據(jù)結(jié)構(gòu)知識與算法設計有機結(jié)合,使讀者了解數(shù)據(jù)結(jié)構(gòu)在算法設計中的作用。了解到同一個問題若采用的數(shù)據(jù)結(jié)構(gòu)不同,其對應的算法實現(xiàn)也不相同;反之一個算法實現(xiàn)也可以采取不同的數(shù)據(jù)結(jié)構(gòu)。
教材所涉及的內(nèi)容及知識體系既考慮到中學生現(xiàn)有的知識水平和能力,同時又兼顧到他們在原有知識結(jié)構(gòu)基礎上的提高、拓展與創(chuàng)新。并且,將原本高等學校的教學內(nèi)容,以初等教學的方式呈現(xià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)與算法
習題1
第2章 線性結(jié)構(gòu)及其應用
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 線性表的應用
2.5 特殊線性結(jié)構(gòu)——棧及其應用
2.5.1 棧及其基本操作
2.5.2 棧的存儲方式
2.5.3 ;静僮鞯膶崿F(xiàn)
2.5.4 棧的應用
2.6 特殊線性結(jié)構(gòu)——隊列及其應用
2.6.1 隊列及其基本操作
2.6.2 隊列的存儲方式
2.6.3 隊列基本操作的實現(xiàn)
2.6.4 循環(huán)隊列及其基本操作的實現(xiàn)
2.6.5 隊列的應用
習題2
第3章 線性結(jié)構(gòu)的深入應用
3.1 高精度運算
3.1.1 基本算法
3.1.2 應用實例
3.1.3 拓展
3.2 排序
3.2.1 簡單排序算法
3.2.2 算法的改進
3.2.3 應用實例
3.3 查找
3.3.1 順序表的查找
3.3.2 二分查找
3.3.3 索引查找
3.3.4 應用實例
3.4 散列查找
3.4.1 散列表的概念
3.4.2 散列函數(shù)的構(gòu)造
3.4.3 處理沖突的方法
3.4.4 應用實例
3.5 分治
3.5.1 分治算法解決問題模式
3.5.2 應用實例
3.6 遞推
3.6.1 遞推算法
3.6.2 常見遞推關(guān)系
3.6.3 應用實例
3.7 動態(tài)規(guī)劃初探
3.7.1 動態(tài)規(guī)劃的定義
3.7.2 動態(tài)規(guī)劃的基本概念
3.7.3 應用實例
習題3
3.6.3 應用實例
3.7 動態(tài)規(guī)劃初探
3.7.1 動態(tài)規(guī)劃的定義
3.7.2 動態(tài)規(guī)劃的基本概念
3.7.3 應用實例
習題3
第4章 層次結(jié)構(gòu)(樹)及其應用
4.1 從線性結(jié)構(gòu)到層次結(jié)構(gòu)——廣義表及其操作
4.1.1 廣義表概念及存儲結(jié)構(gòu)
4.1.2 廣義表的建立與輸出
4.1.3 廣義袁的應用
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 二叉樹的應用
4.5 特殊二叉樹及其應用
4.5.1 二叉排序樹
4.5.2 哈夫曼樹
4.5.3 哈夫曼編碼
4.6 層次結(jié)構(gòu)的綜合應用
習題4
第5章 網(wǎng)狀結(jié)構(gòu)(圖)及其應用
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 應用實例
5.4 圖的應用
5.4.1 求圖的某個通路
5.4.2 求圖的最小生成樹
5.4.3 求圖的最短路徑
5.4.4 圖的拓撲排序及關(guān)鍵路徑
習題5
第6章 數(shù)據(jù)結(jié)構(gòu)深入應用
6.1 概述
6.2 從數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系優(yōu)化算法
6.2.1 數(shù)學建模與算法優(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 綜合應用舉例
6.5 總結(jié)
習題6
參考文獻
第1章 概述
【本章學習要點】
。1)了解數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)、算法等基本概念的含義。
。2)掌握數(shù)據(jù)邏輯結(jié)構(gòu)的三種常用類型及表示方法,掌握數(shù)據(jù)物理結(jié)構(gòu)的常用類型及含義。
。3)掌握算法的基本特點及算法的描述方法,并具備基本的算法評價能力。
伴隨著計算機的發(fā)展,計算機的應用領(lǐng)域從最初的科學計算逐步發(fā)展到人類活動的各個領(lǐng)域。現(xiàn)在計算機處理的對象不僅是簡單的數(shù)值或字符,還有不同結(jié)構(gòu)的各種數(shù)據(jù)。因此,要設計一個比較好的程序,通過計算機工具處理問題,除了掌握計算機語言外,還需要研究各種數(shù)據(jù)的特性和數(shù)據(jù)之間存在的關(guān)系,建立方便有效的數(shù)據(jù)結(jié)構(gòu),合理組織好用于處理的數(shù)據(jù)對象。針對同一個問題的求解,若采用的數(shù)據(jù)結(jié)構(gòu)不同,則建立在其之上的處理問題的算法也不完全相同,處理問題的效率也大相徑庭。著名計算機科學家N-Wirth指出:算法+數(shù)據(jù)結(jié)構(gòu)一程序。可見,數(shù)據(jù)結(jié)構(gòu)在計算機問題處理中具有重要地位,認識和理解各種數(shù)據(jù)結(jié)構(gòu)成為計算機程序設計的基礎。
1.1 相關(guān)概念
1.1.1 數(shù)據(jù)
數(shù)據(jù)(data)是對客觀事物的符號表示。在計算機領(lǐng)域,數(shù)據(jù)是指所有能輸入到計算機中,并能被計算機存儲、處理和輸出的一切信息,如文字、圖形、圖像、聲音和視頻等。