數據結構

出版時間:2008-11  出版社:人民郵電出版社  作者:余臘生  頁數:354  

前言

我們生活在一個物質世界中,同時又時刻面對著一個數字的世界。如果將物質世界中的事與物數字化,那么它們在計算機中均表現為數據。這些數據來源于現實,具有具體的含義,而且在計算機中有著統(tǒng)一的表示方法,因而成為計算機程序處理的符號集合。研究數據在計算機中的表示方法、關聯(lián)方法、存儲方法以及典型處理方法,正是數據結構課程的主要內容。早在20ff紀80年代初,“數據結構”就已成為國內高校計算機專業(yè)教學計劃中的核心課程。目前,ACM/IEEE計算學科課程計劃(CC.2001)已將算法與數據結構類課程列為核心課程之首,數據結構愈益顯現出其在信息學科理論中的重要地位。在軟件系統(tǒng)的開發(fā)過程中,數據結構的思維方法在本質上不同于常規(guī)數學訓練的公理系統(tǒng)思維方法,而是一種算法構造性思維方法。所謂構造性思維方法就是要讓學生理解、習慣并掌握算法的一種思維方法,也是本門課程教學的重要內容和主要難點。要成為專業(yè)的軟件開發(fā)人員,僅僅知道開發(fā)工具的語言規(guī)則和簡單使用過程是遠遠不夠的,只有培養(yǎng)自身的數據抽象能力、算法設計能力,掌握創(chuàng)造性思維方法,舉一反三,觸類旁通,才能夠具備應用知識解決復雜問題的能力。本書是作者根據多年的教學經驗,結合當前計算機科學技術的發(fā)展,并參考了眾多的數據結構教材編著而成的。書中采用了能夠自然體現抽象數據類型概念的c++語言作為算法描述語言,內容覆蓋了數據結構課程的教學大綱,從數據類型角度系統(tǒng)地介紹了各種數據結構的邏輯特性、存儲表示方法及基本操作算法,并針對常用的數據結構進一步討論了各種應用算法及其實現方法。本書旨在培養(yǎng)學生分析計算機加工數據對象特征的能力,以便在實際操作中選擇合適的數據結構和存儲結構以及相應的算法,同時幫助學生掌握估算算法時間復雜度和空間復雜度的基本技巧。本書將數據結構的原理和算法分析技術有機地結合在一起,使用了參數化的模板,提高了算法中數據類型的通用性,支持高效的代碼重用。書中介紹和分析重點設計思想時,結合了大量圖解和具體示例,使讀者能夠聯(lián)系實際,掌握數據結構的實質內容。此外,本書還介紹了一些比較高級的數據結構及相關的算法分析技術。

內容概要

本書采用能夠自然體現抽象數據類型概念的C++ 語言作為算法描述語言,把數據結構的原理和算法分析技術有機地結合在一起。全書內容包括線性表、棧、隊列、遞歸、廣義表、字符串、數組、樹、圖、查找以及各種排序算法,并給出了相關的實驗指導。書中還引入了一些比較高級的數據結構和相關的算法分析技術。    本書可作為高等院校計算機或相關專業(yè)的教材,也可以作為其他程序類課程的輔導教材,同時也適用準備參加研究生入學考試、自學考試和各類程序設計競賽的人員閱讀。

作者簡介

余臘生,中南大學副教授。主講計算機專業(yè)本科“數據結構”和“計算機系統(tǒng)結構”課程以及研究生“軟件構件技術”課程多年,其中“數據結構”課程被評為“中南大學精品課程”。主持和參加了包括國家863應用示范工程和湖南省自然科學基金項目在內的10多個科研項目,在國內外專業(yè)核心刊物發(fā)表論文30多篇,EI檢索多篇。主要研究方向為Agent理論及其計算技術、結構與算法、網絡數據庫技術等。

書籍目錄

第1章 緒論    1.1 數據結構的概念     1.1.1 為什么要學習數據結構     1.1.2 相關概念和術語    1.2 抽象數據類型     1.2.1 數據類型     1.2.2 抽象數據類型    1.3 算法和算法分析    1.3.1 問題求解概述    1.3.2 算法特性    1.3.3 常見的算法類型    1.3.4 算法描述    1.3.5 算法性能分析與度量   習題   實習題  第2章 線性表   2.1 線性表的邏輯結構    2.1.1 線性表的定義    2.1.2 線性表的基本操作   2.2 線性表的順序存儲及操作實現    2.2.1 順序表    2.2.2 順序表上基本操作的實現    2.2.3 順序表應用舉例    2.2.4 小結   2.3 線性表的鏈式存儲及操作實現    2.3.1 單向鏈表    2.3.2 單向鏈表上基本操作的實現    2.3.3 循環(huán)鏈表    2.3.4 雙向鏈表    2.3.5 靜態(tài)鏈表    2.3.6 單向鏈表應用舉例   2.4 順序表和鏈表的選取   習題   實習題  第3章 棧和隊列   3.1 棧    3.1.1 棧的定義及基本操作    3.1.2 棧的存儲及操作實現    3.1.3 棧應用舉例   3.2 隊列    3.2.1 隊列的定義及基本操作    3.2.2 隊列的存儲及操作實現    3.2.3 優(yōu)先隊列    3.2.4 雙端隊列    3.2.5 隊列應用舉例   習題   實習題  第4章 遞歸和廣義表   4.1 何謂遞歸   4.2 遞歸的執(zhí)行過程   4.3 尾部遞歸函數   4.4 遞歸的應用    4.4.1 漢諾塔問題    4.4.2 迷宮問題    4.4.3 n皇后問題   4.5 遞歸程序到非遞歸程序的轉換    4.5.1 簡單轉換    4.5.2 復雜轉換    4.5.3 轉化的形式化步驟   4.6 廣義表   4.6.1 廣義表的定義及基本操作   4.6.2 廣義表的存儲   4.6.3 廣義表有關操作的實現  習題  實習題 第5章 字符串  5.1 字符串及其基本操作   5.1.1 字符串的基本概念   5.1.2 字符串的基本操作  5.2 字符串的定長順序存儲及基本操作   5.2.1 字符串的定長順序存儲   5.2.2 定長順序串的基本操作   5.2.3 模式匹配  5.3 字符串的堆存儲   5.3.1 字符串名的存儲映像   5.3.2 堆存儲結構   5.3.3 基于堆存儲結構的基本操作  5.4 字符串的鏈式存儲  5.5 字符串的應用   5.5.1 中文分詞   5.5.2 遺傳算法  習題  實習題 第6章 數組與矩陣  6.1 數組   6.1.1 數組的邏輯結構   6.1.2 數組的內存映像  6.2 特殊矩陣的壓縮存儲   6.2.1 對角矩陣   6.2.2 三對角矩陣   6.2.3 三角矩陣   6.2.4 對稱矩陣  6.3 稀疏矩陣   6.3.1 稀疏矩陣的三元組表存儲   6.3.2 稀疏矩陣的鏈式存儲   6.3.3 稀疏矩陣的十字鏈表存儲  習題  實習題 第7章 樹與二叉樹  7.1 樹的定義及表示   7.1.1 樹的定義   7.1.2 樹的表示   7.1.3 樹的特點   7.1.4 與樹相關的基本術語   7.1.5 樹形結構的邏輯特征   7.1.6 樹的存儲  7.2 二叉樹   7.2.1 二叉樹的定義及相關概念   7.2.2 二叉樹的主要性質   7.2.3 二叉樹的存儲   7.2.4 二叉樹的基本操作及實現  7.3 二叉樹的遍歷   7.3.1 二叉樹的遍歷方法及遞歸實現   7.3.2 二叉樹遍歷的非遞歸實現   7.3.3 遍歷算法應用舉例   7.3.4 由遍歷序列恢復二叉樹   7.3.5 不用棧的二叉樹遍歷非遞歸方法  7.4 線索二叉樹   7.4.1 線索二叉樹的定義及結構   7.4.2 線索二叉樹的基本操作及實現  7.5 最優(yōu)二叉樹——赫夫曼樹   7.5.1 赫夫曼樹的基本概念   7.5.2 赫夫曼樹的構造算法   7.5.3 赫夫曼樹的應用  7.6 樹、森林與二叉樹的轉換   7.6.1 樹、森林到二叉樹的轉換   7.6.2 二叉樹到樹和森林的轉換  7.7 樹和森林的遍歷   7.7.1 樹的遍歷   7.7.2 森林的遍歷   7.7.3 樹和森林的層次次序遍歷  7.8 樹的應用   7.8.1 判定樹   7.8.2 集合的表示  習題  實習題 第8章 圖  8.1 基本概念   8.1.1 圖的定義和術語   8.1.2 圖的抽象數據類型  8.2 圖的存儲結構   8.2.1 鄰接矩陣   8.2.2 鄰接表   8.2.3 鄰接矩陣和鄰接表的比較   8.2.4 十字鏈表   8.2.5 鄰接多重表   8.2.6 索引表  8.3 圖的遍歷   8.3.1 深度優(yōu)先搜索   8.3.2 廣度優(yōu)先搜索  8.4 圖的連通性   8.4.1 無向圖的連通性   8.4.2 有向圖的連通性   8.4.3 生成樹和生成森林   8.4.4 關節(jié)點和雙連通分量  8.5 最小生成樹   8.5.1 最小生成樹的基本概念   8.5.2 Prim算法   8.5.3 Kruskal算法  8.6 最短路徑   8.6.1 無權最短路徑問題   8.6.2 從一個源點到其他各頂點的最短路徑   8.6.3 邊上權值為任意值的單源最短路徑問題   8.6.4 負權最短路徑問題   8.6.5 每對頂點之間的最短路徑  8.7 DAG及其應用   8.7.1 DAG的概念   8.7.2 AOV網與拓撲排序   8.7.3 AOE圖與關鍵路徑  習題  實習題 第9章 查找  9.1 基本概念  9.2 靜態(tài)查找表   9.2.1 靜態(tài)查找表結構   9.2.2 順序查找   9.2.3 有序表的二分查找   9.2.4 有序表的斐波那契查找和插值查找   9.2.5 分塊查找  9.3 動態(tài)查找表   9.3.1 二叉排序樹   9.3.2 平衡二叉樹   9.3.3 紅黑樹   9.3.4 B樹   9.3.5 B+樹   9.4 散列表查找   9.4.1 散列表與散列方法   9.4.2 常用的散列函數   9.4.3 處理沖突的方法   9.4.4 散列表的查找分析   9.4.5 散列表的操作  習題  實習題 第10章 排序  10.1 基本概念  10.2 插入排序   10.2.1 直接插入排序   10.2.2 二分插入排序   10.2.3 表插入排序   10.2.4 謝爾排序  10.3 交換排序    10.3.1 冒泡排序    10.3.2 快速排序  10.4 選擇排序   10.4.1 線性選擇排序   10.4.2 交換線性選擇排序   10.4.3 樹形選擇排序   10.4.4 堆排序   10.4.5 用堆實現的優(yōu)先隊列  10.5 兩路歸并排序  10.6 分配排序   10.6.1 多鍵排序   10.6.2 桶排序   10.6.3 鏈式基數排序  10.7 其他排序方法   10.7.1 二叉樹排序法   10.7.2 計數排序法  10.8 各種內排序方法的比較  10.9 外排序   10.9.1 外排序的方法   10.9.2 自然歸并排序法   10.9.3 k路歸并法   10.9.4 多段歸并法  習題  實習題 參考文獻 附錄 實驗指導(圖靈網站下載)

章節(jié)摘錄

插圖:

編輯推薦

《數據結構基于C++模板類的實現》是作者在多年教學實踐的基礎上編寫而成的,寫作中注意借鑒近年出版的多種數據結構領域優(yōu)秀著作的長處?!稊祿Y構基于C++模板類的實現》采用C++模板類描述算法,強調實踐性,深入地闡述了數據結構的基本知識和各種數據結構的具體應用,并比較、分析了每一種數據結構的不同存儲方法及其有關算法。內容包括線性表、棧和隊列、遞歸與廣義表、串、數組和矩陣、樹和二叉樹、圖、排序和查找等。·大多數算法使用了參數化的模板,支持高效的代碼重用?!ご罅康膱D解和具體的實例分析使抽象的內容變得具體而且淺顯易懂。·對于重點算法給出了富于啟發(fā)性的問題及討論。·設計了許多有典型性的習題和實驗指導,幫助讀者能夠學會正確地選擇數據結構,編寫符合程序規(guī)范的代碼,為應用程序的開發(fā)打下基礎。

圖書封面

評論、評分、閱讀與下載


    數據結構 PDF格式下載


用戶評論 (總計5條)

 
 

  •   在上學的時候就想在圖書館里找到一本使用C++進行數據結構算法實現的書,一直找不到,或是寫的太不好,終于在快畢業(yè)的時候在網上找到了,看來一遍,將以前學過的內容重新鞏固了一番。
  •   其實就是數據結構 沒有想想的那么好
  •   是中南大學的哦!
  •   很好,很快,速度不錯,印刷也好
  •   有些錯誤,總體不錯
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網 手機版

京ICP備13047387號-7