《數(shù)據(jù)結(jié)構實用教程》系統(tǒng)地介紹了各種常用的數(shù)據(jù)結(jié)構和排序、查找的各種算法;簡述了各種數(shù)據(jù)結(jié)構內(nèi)在的邏輯關系、存儲表示、運算操作以及許多相關的操作算法;對用類C語言描述的各種算法進行了詳細的注釋和性能分析。書中列舉了大量的例題,并對其解題思路、方法進行了分析!稊(shù)據(jù)結(jié)構實用教程》既注重原理又重視實踐,配有大量的習題和一些思考題,并配套有習題參考答案以及課程配套實驗(包括題目分析及參考程序);概念講解清楚,邏輯推理嚴謹,通俗易懂,既便于教學,又適合自學。
《數(shù)據(jù)結(jié)構實用教程》可作為計算機類專業(yè)及信息類專業(yè)的教材,也可作為高等院校各類相關專業(yè)本科生、專科生及成人教育學習“教據(jù)結(jié)構”的教材,還可作為廣大從事計算機軟件與應用的工作人員、大專院校及社會上數(shù)據(jù)結(jié)構學習者的參考用書。
當今世界已進入了信息時代,計算機的應用也從傳統(tǒng)的數(shù)值計算發(fā)展到非數(shù)值計算,并逐步深入到了各個領域,F(xiàn)代社會各行各業(yè)大量地使用計算機進行數(shù)據(jù)處理,電子通信、自動控制、信息處理、人工智能、管理和情報檢索等各專業(yè)與計算機科學的聯(lián)系日益密切,這就需要越來越多的人掌握計算機應用知識,以推動社會信息化進程。作為計算機軟件設計技術的理論基礎,“數(shù)據(jù)結(jié)構”不僅僅是計算機學科的核心課程,還應該是所有應用計算機技術的其他學科學生必須學習掌握的一門課程。
本書是根據(jù)全國高等教育“數(shù)據(jù)結(jié)構”課程教學大綱編寫的教材,所選內(nèi)容完全符合大綱的要求。全書共分10章,第1章綜述了數(shù)據(jù)、數(shù)據(jù)結(jié)構、抽象數(shù)據(jù)類型及算法性能分析等基本概念;第2章至第7章分別討論了線性表、棧、隊列、串、多維數(shù)組、廣義表、樹以及圖等基本的數(shù)據(jù)結(jié)構及其應用;第8章、第9章討論了數(shù)據(jù)處理中廣泛使用的排序和查找技術;第10章介紹外存儲器上的數(shù)據(jù)結(jié)構,即文件的存儲技術。
本書在內(nèi)容表述上,參考了目前國外、國內(nèi)幾本比較流行的教材,并結(jié)合作者多年來從事“數(shù)據(jù)結(jié)構”、“算法設計與分析”以及“面向?qū)ο蟮某绦蛟O計”等課程的教學,以及編寫出版多種有關“數(shù)據(jù)結(jié)構”教材和輔助教材的經(jīng)驗與體會,對本課程所涉及的主要知識進行了分析,介紹了一些新的觀點和方法,并在各章中收集了大量的例題、習題,特別是實例分析和上機實驗實訓題解。這些實例與習題內(nèi)容豐富,涉及面廣,難易適當,給學習“數(shù)據(jù)結(jié)構”這門課程的讀者以啟發(fā),可達到幫助學生掌握相關知識和開闊視野的目的,也將有利于培養(yǎng)學生分析問題、解決問題的動手能力。
本書在每一章的前面列出本章的學習目標和學習要點,以便讀者學習時抓住重點。本書在內(nèi)容安排上連貫有序、層次分明、循序漸進,力求表述嚴謹、語言精練、通俗易懂,既便于教學,又便于讀者自學。
全書中算法和例題等都是采用類C語言或C語言描述的,特別是一些實例不需要修改或稍加修改就可以在VC環(huán)境下運行。為了增強算法的可讀性,有些語句的后面使用了C++的注釋說明符“//”,在這里提醒讀者注意。
另外,在本書的附錄中給出了各章習題的參考答案,這樣有助于加深讀者尤其是自學者對各種數(shù)據(jù)結(jié)構及其應用知識點的認識和理解。
本書由蘇仕華、顧為兵、賈伯琪、劉勇編著。其中,顧為兵編寫了第4、7、9章,賈伯琪編寫了第3、5、8章,劉勇編寫了思考題與習題、上機實驗、習題參考答案、上機實驗參考解答,蘇仕華完成其他章節(jié)的編寫及全書的統(tǒng)稿工作。在寫作過程中,得到了中國科學技術大學計算機科學與技術學院黃劉生教授、信息科學技術學院劉振安教授的支持和幫助,中國科學技術大學信息科學技術學院劉勇博士、國防科學技術大學計算機學院陳懷義教授、南京大學計算機學院陳本林教授、北京理工大學軟件學院院長陳朔鷹教授以及華中科技大學計算機學院盧炎生教授等對本書的編寫提出了許多寶貴的意見和建議,在此表示衷心的感謝。另外,本書中還參考了大量的書籍和資料,作者在此一并致以誠摯的謝意。
由于作者水平有限,加之時間倉促,書中難免存在一些缺點和錯誤,殷切希望廣大讀者及同行們批評指正。
編者
2015年6月于合肥
總序
前言
第1章 概論
1.1 引言
1.2 基本概念和常用術語
1.3 算法的描述和分析
1.3.1 算法描述
1.3.2 算法分析
思考題
習題1
第2章 線性表
2.1 線性表的定義和基本運算
2.1.1 線性表的邏輯定義
2.1.2 線性表的基本運算
2.2 線性表的順序存儲和基本運算的實現(xiàn)
2.2.1 線性表的順序存儲
2.2.2 順序表上基本運算的實現(xiàn)
2.3 線性表的鏈式存儲結(jié)構
2.3.1 單鏈表(線性鏈表)
2.3.2 單鏈表上的基本運算
2.3.3 循環(huán)鏈表
2.3.4 雙向循環(huán)鏈表
2.4 順序表和鏈表的比較
思考題
習題2
上機實驗
第3章 棧和隊列
3.1 棧
3.1.1 棧的定義及其基本運算
3.1.2 棧的存儲表示和實現(xiàn)
3.2 棧的應用舉例
3.2.1 圓括號匹配的檢驗
3.2.2 字符串回文的判斷
3.2.3 數(shù)制轉(zhuǎn)換
3.2.4 棧與遞歸
3.3 隊列
3.3.1 隊列的定義及其運算
3.3.2 順序循環(huán)隊列
3.3.3 鏈隊列
3.4 棧和隊列的應用實例——表達式求值
3.4.1 中綴表達式到后綴表達式的轉(zhuǎn)換
3.4.2 后綴表達式的計算
思考題
習題3
上機實驗
第4章 串
4.1 串的定義及其運算
4.1.1 串的基本概念
4.1.2 串的基本運算
4.2 串的存儲表示和操作的實現(xiàn)
4.2.1 串的順序存儲
4.2.2 串的鏈式存儲
4.2.3 串運算的實現(xiàn)
4.3 串運算的應用舉例
思考題
習題4
第5章 多維數(shù)組和廣義表
5.1 多維數(shù)組及其運算
5.1.1 數(shù)組的順序存儲
5.1.2 數(shù)組運算舉例
5.2 矩陣的壓縮存儲
5.2.1 特殊矩陣
5.2.2 稀疏矩陣
5.3 廣義表
5.3.1 廣義表的定義
5.3.2 廣義表的運算
5.3.3 廣義表的存儲結(jié)構
思考題
習題5
第6章 樹和二叉樹
6.1 樹的基本概念和術語
6.2 二叉樹
6.2.1 二叉樹的定義和性質(zhì)
6.2.2 二叉樹的存儲結(jié)構
6.3 二叉樹的運算
6.3.1 二叉樹的生成
6.3.2 二叉樹的遍歷
6.3.3 二又樹的應用舉例
6.4 線索二叉樹
6.4.1 二叉樹的線索化
6.4.2 二叉線索鏈表上的運算
6.5 樹和森林
6.5.1 樹的存儲結(jié)構
6.5.2 樹、森林與二叉樹的轉(zhuǎn)換
6.5.3 樹和森林的遍歷
6.6 赫夫曼樹及其應用
6.6.1 最優(yōu)二叉樹(赫夫曼樹)
6.6.2 赫夫曼編碼
思考題
習題6
上機實驗
第7章 圖
7.1 圖的定義和基本術語
7.2 圖的存儲結(jié)構
7.2.1 鄰接矩陣表示法
7.2.2 鄰接表表示法
7.3 圖的遍歷
7.3.1 深度優(yōu)先搜索
7.3.2 廣度優(yōu)先搜索
7.4 圖的生成樹和最小生成樹
7.4.1 圖的生成樹
7.4.2 最小生成樹
7.5 最短路徑
7.6 拓撲排序
思考題
習題7
上機實驗
第8章 排序
第9章 查找
第10章 文件
附錄1 習題參考答案
附錄2 上機實驗參考解答
參考文獻