出版時間:2002-7-1 出版社:科學出版社 作者:繆淮扣,顧訓穰,沈俊
Tag標簽:無
前言
作為計算機程序組成部分的數(shù)據(jù)結(jié)構(gòu)和算法的研究,一直受到計算機領域工作者的高度重視。數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)教學計劃中的一門核心課程,也是信息管理、通信電子、自動控制等與計算機技術關系密切的專業(yè)的一門基礎課程。要從事與計算機科學與技術相關的工作,尤其是計算機應用領域的開發(fā)和研制工作,必須具備堅實的數(shù)據(jù)結(jié)構(gòu)的基礎。數(shù)據(jù)結(jié)構(gòu)課程的教學目的是使學生學會分析研究計算機所要加工處理的數(shù)據(jù)的特征,掌握組織數(shù)據(jù)、存儲數(shù)據(jù)和處理數(shù)據(jù)的基本方法,并加強在實際應用中選擇合適的數(shù)據(jù)結(jié)構(gòu)和相應算法的訓練。面向?qū)ο蠹夹g是軟件工程領域中的重要技術,它不僅是一種程序設汁方法,更重要的是一種對真實世界的抽象思維方式。目前,面向?qū)ο蟮能浖治龊驮O計技術已發(fā)展成為軟件開發(fā)的主流方法。為了適應軟件開發(fā)方法與技術的發(fā)展以及應用領域的要求,就有必要改進和充實數(shù)據(jù)結(jié)構(gòu)的教學內(nèi)容。因此,用面向?qū)ο蟮挠^點來描述數(shù)據(jù)結(jié)構(gòu)就成為一種既順理成章又緊迫的選擇。用面向?qū)ο蟮挠^點來描述數(shù)據(jù)結(jié)構(gòu),要涉及到面向?qū)ο蟪绦蛟O計語言的選用問題。目前被廣泛采用作為程序設計語言教學的是c語言,c++是以c語言為基礎、使用比較普遍的面向?qū)ο蟮某绦蛟O計語言。因此本書采用C++作為數(shù)據(jù)結(jié)構(gòu)的描述語言。數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容豐富,學習量大;隱藏在各部分內(nèi)容中的方法和技術多,貫穿于全書的動態(tài)鏈表存儲結(jié)構(gòu)和遞歸技術令不少初學者望而生畏。本書的編寫者長期以來從事數(shù)據(jù)結(jié)構(gòu)課程的教學,對該課程的教學特點和難點有比較深切的體會。作者在認真總結(jié)二十多年講授“數(shù)據(jù)結(jié)構(gòu)”課程的基礎上,參考了美國ACM/IEEE-cs公布的“計算2001教程”,吸收了國內(nèi)外各種數(shù)據(jù)結(jié)構(gòu)教材的優(yōu)點,對多年來形成的數(shù)據(jù)結(jié)構(gòu)課程的教學內(nèi)容進行了合理的剪裁,既強調(diào)了數(shù)據(jù)結(jié)構(gòu)的原理和方法,又注重了其實踐性,使之適應于現(xiàn)代大學生的學習特點和要求。本書的一個重要特點就是將程序設計的基礎與數(shù)據(jù)結(jié)構(gòu)的方法盡可能地結(jié)合起來。第1、2章介紹C++語言時盡可能給出比較完整的程序,使學生能對C++語言有比較全面和深入的了解,也便于上機實習,從而為數(shù)據(jù)結(jié)構(gòu)課程的實驗建立良好的基礎。全書共分9章,第1、2章介紹了數(shù)據(jù)結(jié)構(gòu)、算法及其復雜度的基本概念,對c++作了簡單介紹,并敘述了抽象數(shù)據(jù)類型和面向?qū)ο蟮母拍?。?~5章介紹了線性結(jié)構(gòu)——線性表、棧、隊列、數(shù)組、廣義表;第6章和第7章介紹了非線性結(jié)構(gòu)——樹和圖;第8章和第9章分別介紹了查找和排序的方法。
內(nèi)容概要
數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)教學計劃中的一門核心課程,也是信息管理、通信電子、自動控制等與計算機技術關系密切的專業(yè)的一門基礎課程。要從事和計算機科學與技術相關的工作,尤其是計算機應用領域的開發(fā)和研制工作,必須具備堅實的數(shù)據(jù)結(jié)構(gòu)的基礎。本書對C++語言作了簡單介紹,敘述了抽象數(shù)據(jù)類型和面向?qū)ο蟮母拍?,介紹了線性表、棧、隊列、數(shù)組、廣義表、樹和圖等數(shù)據(jù)結(jié)構(gòu),并且介紹了查找和排序的方法。全書用C++語言描述并實現(xiàn)了所有數(shù)據(jù)結(jié)構(gòu)的類和程序,并附有習題,便于教學。
本書是為高等院校開設“數(shù)據(jù)結(jié)構(gòu)”課程編寫的教材,可作為計算機專業(yè)本科生教材使用,也可供從事計算機軟件開發(fā)和應用的工程技術人員閱讀、參考。
書籍目錄
1 緒論
1.1 (算法十數(shù)據(jù)結(jié)構(gòu))=程序
1.2 數(shù)據(jù)結(jié)構(gòu)的基本概念
1.2.1 兩個簡單的數(shù)據(jù)結(jié)構(gòu)實例
1.2.2 什么是數(shù)據(jù)結(jié)構(gòu)
1.3 C++語言基礎
1.3.1 程序結(jié)構(gòu)
1.3.2 數(shù)據(jù)聲明和作用域
1.3.3 輸入/輸出
1.3.4 函數(shù)
1.3.5 參數(shù)傳遞
1.3.6 函數(shù)各重載
1.3.7 動態(tài)內(nèi)存分配
1.3.8 結(jié)構(gòu)與聯(lián)合
1.4 算法性能與復雜度
1.4.1 算法的定義
1.4.2 算法的性能標準
1.4.3 算法的復雜度
習題1
2 抽象數(shù)據(jù)類型和C++類
2.1 抽象數(shù)據(jù)類型
2.1.1 從數(shù)據(jù)類型到抽象數(shù)據(jù)類型
2.1.2 封裝和信息隱藏
2.1.3 抽象數(shù)據(jù)類型描述
2.2 類與對象的基本概念
2.2.1 類與對象
2.2.2 消息與合作
2.2.3 多態(tài)性
2.3 面向?qū)ο蟮某绦蛟O計方法
2.4 C++類與對象
2.5 構(gòu)造函數(shù)和析構(gòu)函數(shù)
2.6 工具函數(shù)
2.7 繼承
2.8 this指針的使用
2.9 虛函數(shù)、多態(tài)性以及動態(tài)聯(lián)編
2.9.1 虛函數(shù)和多態(tài)性
2.9.2 動態(tài)聯(lián)編
2.10 模板類
習題2
3 線性表
3.1 線性表的定義
3.2 線性表的順序表示
3.2.1 順序表的類定’義
3.2.2 順序表插入、刪除算法的復雜度分析
3.2.3 順序表的應用
3.3 線性表的鏈表表示
3.3.1 單鏈表
3.3.2 單循環(huán)鏈表
3.3.3 雙向循環(huán)鏈表
3.3.4 靜態(tài)鏈表
3.4 多項式抽象數(shù)據(jù)類型
3.4.1 多項式表示
3.4.2 多項式相加
習題3
4 棧、隊列和遞歸
4.1 棧
4.1.1 順序棧
4.1.2 鏈式棧
4.1.3 表達式的計算
4.2 隊列
4.2.1 循環(huán)隊列
4.2.2 鏈隊列
4.3 遞歸
4.3.1 遞歸的概念
4.3.2 遞歸過程與遞歸工作棧
4.3.3 消除遞歸
4.3.4 迷宮問題
習題4
5 串、數(shù)組和廣義表
5.1 字符串
5.1.1 字符串的定義、存儲結(jié)構(gòu)和操作
5.1.2 串的操作
5.1.3 常用的C十十字符串函數(shù)
5.1.4 串類及其實現(xiàn)
5.1.5 模式匹配算法
5.2 數(shù)組
5.2.1 C十十中數(shù)組的定義
5.2.2 數(shù)組的抽象數(shù)據(jù)類型表示
5.2.3 數(shù)組的順序存儲結(jié)構(gòu)
5.3 稀疏矩陣
5.3.1 三元組順序表
5.3.2 十字鏈表
5.4 廣義表
5.4.1 廣義表的定義
5.4.2 廣義表的存儲結(jié)構(gòu)
5.4.3 n元多項式的表示
5.4.4 廣義表的遞歸算法
習題5
6 樹和森林
6.1 樹的概念
6.1.1 樹的定義
6.1.2 樹的術語
6.1.3 樹的表示形式
6.1.4 樹的基本操作和抽象數(shù)據(jù)類型
6.2 二叉樹
6.2.1 二叉樹的定義
6.2.2 二叉樹的性質(zhì)
6.2.3 二叉樹的基本操作和抽象數(shù)據(jù)類型
6.3 二叉樹的存儲結(jié)構(gòu)
6.3.1 數(shù)組表示法
6.3.2 鏈表表示法
6.3.3 二叉樹的二叉鏈表類聲明
6.4 遍歷二叉樹
6.4.1 前序遍歷
6.4.2 中序遍歷
6.4.3 后序遍歷
6.4.4 層序遍歷
6.5 線索二叉樹
6.5.1 線索二又樹的定義
6.5.2 線索二叉樹的類定義
6.5.3 中序線索二叉樹
6.6 二叉樹的應用
6.6.1 堆
6.6.2 哈夫曼樹
6.7 樹和森林
6.7.1 樹的存儲結(jié)構(gòu)
6.7.2 樹、森林和二叉樹的轉(zhuǎn)換
6.7.3 樹的遍歷
6.7.4 森林的遍歷
6.8 等價類及其表示
6.8.1 等價關系與等價類
6.8.2 并查集
習題6
7 圖
7.1 圖的基本概念
7.1.1 圖的定義
7.1.2 圖的術語
7.1.3 圖的基本操作和抽象數(shù)據(jù)類型
7.2 圖的存儲結(jié)構(gòu)
7.2.1 鄰接矩陣
7.2.2 鄰接表
7.2.3 鄰接多重表
7.2.4 十字鏈表
7.3 圖的遍歷與連通性
7.3.1 深度優(yōu)先遍歷
7.3.2 廣度優(yōu)先遍歷
7.3.3 連通分量
7.4 最小生成樹
7.4.1 克魯斯卡爾算法
7.4.2 普里姆算法
7.5 最短路徑
7.5.1 弧上權(quán)值為非負情形的單源點最短路徑問題
7.5.2 弧上權(quán)值為任意值的單源點最短路徑問題
7.5.3 所有頂點之間的最短路徑
7.6 活動網(wǎng)絡
7.6.1 用頂點表示活動的網(wǎng)絡
7.6.2 用邊表示活動的網(wǎng)絡(AOE網(wǎng)絡)
習題7
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.4.3 二叉排序樹的插入
8.4.4 二叉排序樹的刪除
8.4.5 二叉排序樹查找的性能分析
8.5 平衡二叉樹
8.5.1 平衡二叉樹的定義
8.5.2 平衡旋轉(zhuǎn)
8.5.3 平衡二叉樹的插入和刪除
8.6 B-樹
8.6.1 動態(tài)的m路查找樹
8.6.2 B-樹
8.6.3 B-樹的插入
8.6.4 B-樹的刪除
8.6.5 B+樹
8.7 散列表查找
8.7.1 散列表的基本概念
8.7.2 散列函數(shù)
8.7.3 處理溢出的閉散列方法
8.7.4 處理溢出的開散列方法——鏈地址法
8.7.5 散列表分析
習題8
9 排序
9.1 基礎知識
9.1.1 基本概念
9.1.2 排序表的抽象數(shù)據(jù)類型描述和類定義
9.2 交換排序
9.2.1 冒泡排序
9.2.2 快速排序
9.3 插入排序
9.3.1 直接插入排序
9.3.2 折半插入排序
9.3.3 希爾排序
9.4 選擇排序
9.4.1 直接選擇排序
9.4.2 錦標賽排序
9.4.3 堆排序
9.5 歸并排序
9.5.1 歸并
9.5.2 兩路歸并排序
9.5.3 遞歸的歸并排序
9.6 基數(shù)排序
9.6.1 多關鍵字排序
9.6.2 鏈式基數(shù)排序
9.7 各種排序方法的選擇和使用
習題9
主要參考文獻
章節(jié)摘錄
插圖:1.2 數(shù)據(jù)結(jié)構(gòu)的基本概念計算機科學是一門研究信息表示和處理的科學,人們是用程序來處理信息的。信息的表示和組織直接關系到處理信息的程序的效率。由于許多系統(tǒng)軟件和應用軟件的程序規(guī)模很大,結(jié)構(gòu)又相當復雜,因而必須對程序設計方法進行系統(tǒng)的研究。這不僅涉及到研究程序結(jié)構(gòu)和算法,同時也涉及到研究程序加工的對象。用計算機解題,首先應從具體問題抽象出一個適當?shù)臄?shù)學模型,然后才能設計算法和編制程序。而構(gòu)建數(shù)學模型的過程就是分析和概要設計的過程,要從對問題的分析中提取操作的對象,并找出這些操作對象之間的關系,然后用數(shù)學的語言加以描述。例如,許多工程中的數(shù)值計算問題采用的數(shù)學模型是線性方程組或微分方程。但更多的非數(shù)值計算問題是難以用數(shù)學方程來描述的。1.2.1 兩個簡單的數(shù)據(jù)結(jié)構(gòu)實例為了獲得對數(shù)據(jù)結(jié)構(gòu)的感性認識,我們先來看兩個簡單的例子。【例1-1】人事登記表。在任何一個單位,人事登記表是人事部門關于職工信息的必不可少的表格。例如,某個單位人事部門的工作人員想要查找當年退休的人員,或要查找基本工資在800元以下的人員,如果該單位有幾千名職工,那么由人工來查找顯然是很費時的;但如果在計算機中有一個關于職工信息的登記表,由有關的檢索系統(tǒng)來查找,那是很方便的。表1-1所示就是一張簡單的人事登記表。
編輯推薦
《數(shù)據(jù)結(jié)構(gòu)(C++實現(xiàn))》為科學出版社出版發(fā)行。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載
數(shù)據(jù)結(jié)構(gòu) PDF格式下載