本書是為“數(shù)據(jù)結構”課程編寫的教材,也可以作為學習數(shù)據(jù)結構及其算法的C語言程序設計的參考書。
書中系統(tǒng)介紹各種常用的數(shù)據(jù)結構及它們的存儲表示,討論了基于這些數(shù)據(jù)結構的基本操作和實際的執(zhí)行算法,并闡述了各種常用數(shù)據(jù)結構內(nèi)涵的邏輯關系。全書共分為9章。第1章為概論,引入數(shù)據(jù)結構與算法的一些基本概念,是全書的綜述; 第2~7章分別介紹線性表、棧、隊列、串、多維數(shù)組、廣義表、樹、二叉樹和圖等幾種基本的數(shù)據(jù)結構; 第8章和第9章分別介紹查找和排序,它們都是數(shù)據(jù)處理時廣泛使用的技術。書中既體現(xiàn)了抽象數(shù)據(jù)類型的觀點,又對每個算法的具體實現(xiàn)給出了完整的C語言源代碼描述。
本書的特色是深入淺出,既注重理論又重視實踐,使用算法設計實例的教學方式來組織內(nèi)容,重點明確、結構合理。全書配有大量的例題和詳盡的注釋,各章都有小結和不同類型的習題。書中自始至終使用C語言來描述算法和數(shù)據(jù)結構,全部程序都在CFree 3.5或Visual C++ 6.0中調(diào)試通過。
本書可作為普通高等學校計算機及相關專業(yè)本科生的教材,也可作為?坪统扇私逃慕滩模可供從事計算機應用的科技人員參考。與本書配套的《數(shù)據(jù)結構實驗教程(C語言版)》也將由清華大學出版社出版。
本書的特色是深入淺出,注重基本理論、基本知識和基本技能,每一章的開頭都配有本章要點和本章學習目標,且思想性、科學性、啟發(fā)性貫穿于所有章節(jié)。它的教學要求是:讓學生學會分析和研究計算機加工的數(shù)據(jù)結構的特性,為應用的數(shù)據(jù)選擇恰當?shù)倪壿嫿Y構、存儲結構及相應的算法,并初步掌握算法的時間分析和空間分析技術,在學習中訓練程序設計的能力。內(nèi)容中配有大量的例題和詳盡的注釋,末尾處都配有本章小結,并配置了大量的不同類型的習題。書中自始至終使用C語言來描述算法和數(shù)據(jù)結構,各章的程序都在C-Free 4.0或Visual C++ 6.0中調(diào)試通過,以方便讀者在計算機上進行實踐,有助于理解算法的實質和基本思想。
前言
在社會信息化的今天,計算機及物聯(lián)網(wǎng)+給人類社會、人們的生活和學習等方面帶來了巨大的影響,社會對信息技術型人才的需求量越來越大,而信息技術型人才的培養(yǎng)又是高等學校人才培養(yǎng)的重要組成部分,本書就是基于培養(yǎng)信息化人才的需要而編寫的。
“數(shù)據(jù)結構”是計算機科學的算法理論基礎和軟件設計的技術基礎,主要研究信息的邏輯結構及其基本操作在計算機中的表示和實現(xiàn)。因此,“數(shù)據(jù)結構”不僅是計算機專業(yè)的一門核心課程,也是其他理工科專業(yè)的熱門選修課。學會分析研究計算機加工的數(shù)據(jù)對象的特性,能夠選擇合適的數(shù)據(jù)結構、存儲結構和相應的算法并加以實現(xiàn),是計算機工作者和其他科技工作者不可缺少的知識和能力。
“數(shù)據(jù)結構”課程內(nèi)容抽象,知識豐富,隱藏在各章節(jié)內(nèi)容中的方法和技術多。編者長期從事“數(shù)據(jù)結構”課程的教學,對課程的教學特點和知識的難點有比較深切的體會。在本書中,編者對多年來形成的“數(shù)據(jù)結構”課程的教學內(nèi)容進行了合理的剪裁和重組,既強調(diào)數(shù)據(jù)結構的原理和方法,又特別注重其實踐性與實用性。
本書介紹了各種常用的數(shù)據(jù)結構和它們在計算機中的存儲表示,討論了在這些數(shù)據(jù)結構上的基本運算(操作)和實際的執(zhí)行算法,簡要介紹了算法的時間分析和空間分析的技巧,并闡述了各種常用數(shù)據(jù)結構內(nèi)涵的邏輯關系。
本書共分9章。第1章為概論; 第2~4章分別介紹線性表、棧、隊列和串等幾種基本的數(shù)據(jù)結構,它們都屬于線性結構; 第5~7章分別介紹多維數(shù)組、廣義表、樹和圖等非線性結構; 第8章和第9章分別介紹查找和排序,它們都是數(shù)據(jù)處理中需要廣泛使用的技術。
本書的特色是深入淺出,注重基本理論、基本知識和基本技能,每一章的開頭都配有本章要點和本章學習目標,且思想性、科學性、啟發(fā)性貫穿所有章節(jié)。它的教學要求是: 讓學生學會分析和研究計算機加工的數(shù)據(jù)結構的特性,為應用的數(shù)據(jù)選擇恰當?shù)倪壿嫿Y構、存儲結構及相應的算法,并初步掌握算法的時間分析和空間分析技術,在學習中提高程序設計的能力。書中配有大量的例題和詳盡的注釋,每一章的末尾處都有本章小結和不同類型的習題。書中自始至終使用C語言來描述算法和數(shù)據(jù)結構,各章的程序都在CFree 4.0或Visual C++ 6.0中調(diào)試通過,以方便讀者在計算機上進行實踐,有助于理解算法的實質和基本思想。
本書可作為計算機專業(yè)本科學生的教材,其內(nèi)容可以講授一個學期。將本書用作其他相關專業(yè)本科生教材、計算機專業(yè)?粕滩幕虺扇私逃慕滩臅r,建議授課教師根據(jù)實際情況適當刪減教材內(nèi)容(帶“*”部分)。在教學過程中,除了理論教學以外,上機實踐也是一個不可缺少的環(huán)節(jié),與本書配套的《數(shù)據(jù)結構實驗教程(C語言版)》也將由清華大學出版社出版。
另外,本書也可供從事計算機應用等工作的工程技術人員參考,讀者只需掌握C語言編程的基本技術就可以學習本書。
本書在2013年第2版的基礎上修訂而成。
由于編者水平有限,書中難免存在一些不足之處,殷切希望廣大讀者批評指正。
編者
2018年5月
目錄
第1章概論
1.1什么是數(shù)據(jù)結構
1.1.1數(shù)據(jù)和數(shù)據(jù)元素
1.1.2數(shù)據(jù)類型與數(shù)據(jù)對象
1.1.3數(shù)據(jù)結構
1.2為什么要學習數(shù)據(jù)結構
1.2.1學習數(shù)據(jù)結構的重要性
1.2.2數(shù)據(jù)結構的應用舉例
1.3算法和算法分析
1.3.1算法的概念
1.3.2算法的描述和設計
1.3.3算法分析
本章小結
習題1
第2章線性表
2.1線性表的基本概念
2.1.1線性表的定義
2.1.2線性表的基本操作
2.2線性表的順序存儲
2.2.1順序表
2.2.2順序表的基本操作
2.2.3一個完整的例子(1)
2.3線性表的鏈式存儲
2.3.1單鏈表的基本概念
2.3.2單鏈表的基本操作
2.3.3一個完整的例子(2)
2.3.4循環(huán)鏈表
2.3.5雙向鏈表
2.3.6雙向循環(huán)鏈表
2.3.7靜態(tài)鏈表
2.4線性表順序存儲與鏈式存儲的比較
2.5線性表的應用
2.5.1約瑟夫問題
2.5.2多項式加法
2.5.3電文加密
本章小結
習題2
第3章棧和隊列
3.1棧
3.1.1棧的定義與基本操作
3.1.2順序棧的存儲結構和操作的實現(xiàn)
3.1.3鏈棧的存儲結構和操作的實現(xiàn)
3.2棧的應用
3.2.1數(shù)制轉換
3.2.2括號匹配問題
3.2.3子程序的調(diào)用
3.2.4利用一個順序棧逆置一個帶頭結點的單鏈表
3.3隊列
3.3.1隊列的定義與基本操作
3.3.2鏈隊列的存儲結構和操作的實現(xiàn)
3.3.3順序隊列的存儲結構和操作的實現(xiàn)
3.4隊列的應用
3.4.1打印楊輝三角形
3.4.2迷宮問題: 尋找一條從迷宮入口到出口的最短路徑
3.5遞歸
3.5.1遞歸的定義與實現(xiàn)
3.5.2遞歸消除
本章小結
習題3
第4章串
4.1串的定義和基本操作
4.1.1串的定義
4.1.2串的基本操作
4.2串的表示和實現(xiàn)
4.2.1串的定長順序存儲
4.2.2串的堆存儲結構
4.2.3串的塊鏈存儲結構
4.3串的模式匹配算法
4.3.1基本的模式匹配算法
4.3.2模式匹配的改進算法——KMP算法
本章小結
習題4
第5章多維數(shù)組和廣義表
5.1多維數(shù)組
5.1.1多維數(shù)組的定義
5.1.2數(shù)組的存儲結構
5.2矩陣的壓縮存儲
5.2.1特殊矩陣
5.2.2稀疏矩陣
5.3廣義表
本章小結