本書共10章,其內(nèi)容涵蓋了數(shù)據(jù)結(jié)構(gòu)課程中的全部重要知識點及主要基礎(chǔ)實驗。第1章主要介紹了數(shù)據(jù)結(jié)構(gòu)的基本術(shù)語及C語言的實現(xiàn)架構(gòu)等;第2-10章,詳細講解了“數(shù)據(jù)結(jié)構(gòu)”課程的核心知識點,每章由基本知識點、內(nèi)容要點及課程實踐三部分組成,其中實踐部分給出了實驗算法的參考程序,目的是幫助學(xué)生養(yǎng)成良好的程序設(shè)計風(fēng)格及素養(yǎng),逐步提高分析問題和解決問題的能力。
(1)根據(jù)“數(shù)據(jù)結(jié)構(gòu)”課程的核心知識點,按章對應(yīng)編寫。(2)各章包括基本知識點、內(nèi)容要點及實踐部分,以期幫助讀者在盡可能短的時間內(nèi),對數(shù)據(jù)結(jié)構(gòu)的知識與應(yīng)用有一個比較全面和系統(tǒng)的認識,為進一步提高學(xué)生的應(yīng)用編程能力在方法上提供指導(dǎo)。(3)本書所有程序都給出了完整的源代碼,并在Microsoft Visual C++ 6.0下運行通過。(4)本書配套課程設(shè)計教材:《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計——C語言描述(第2版)》 ISBN 978-7-121-29645-1。
“數(shù)據(jù)結(jié)構(gòu)”是計算機科學(xué)與技術(shù)專業(yè)的一門重要的基礎(chǔ)課程。計算機科學(xué)各領(lǐng)域及相關(guān)的應(yīng)用軟件都要用到各種數(shù)據(jù)結(jié)構(gòu)。語言編譯要使用棧、散列表及語法樹;操作系統(tǒng)中要使用隊列、存儲管理表及目錄樹;數(shù)據(jù)庫系統(tǒng)要運用線性表、多鏈表及索引樹等進行數(shù)據(jù)管理;而在人工智能領(lǐng)域也會涉及各種不同的數(shù)據(jù)結(jié)構(gòu),如廣義表、集合、搜索樹及各種有向圖等。
“數(shù)據(jù)結(jié)構(gòu)”課程對理論與實踐的要求都非常高,目的是希望通過該課程的學(xué)習(xí),使學(xué)生學(xué)會分析、研究各種數(shù)據(jù)結(jié)構(gòu)及其內(nèi)在的邏輯關(guān)系,掌握它們在計算機中的存儲表示及其相應(yīng)的算法,并初步掌握算法的時間分析和空間分析技術(shù)。由于該課程對計算機學(xué)科起到承前啟后的作用,因此學(xué)生學(xué)好“數(shù)據(jù)結(jié)構(gòu)”這門課程至關(guān)重要。
“數(shù)據(jù)結(jié)構(gòu)”課程內(nèi)容的難度之大是公認的,其所涉及的理論及算法也相對抽象,對于只具有計算機程序設(shè)計基礎(chǔ)知識的學(xué)生,要他們很好地理解和掌握其中的原理相對會比較困難,特別是理解數(shù)據(jù)的存儲結(jié)構(gòu)、相關(guān)算法,以及理解將算法轉(zhuǎn)化為相應(yīng)的程序的過程,往往是學(xué)生學(xué)習(xí)的難點。針對這種情況及C語言在教學(xué)中的廣泛應(yīng)用,我們編寫了《數(shù)據(jù)結(jié)構(gòu)實驗教程——C語言描述》這本書,供計算機專業(yè)的學(xué)生及其他相關(guān)專業(yè)的學(xué)生上機實驗參考。希望能夠幫助學(xué)生在盡可能短的時間內(nèi),對數(shù)據(jù)結(jié)構(gòu)的知識與應(yīng)用有一個比較全面和系統(tǒng)的認識,為進一步提高學(xué)生的應(yīng)用編程能力在方法上提供指導(dǎo)。
全書共10章,可以與使用C語言描述算法的《數(shù)據(jù)結(jié)構(gòu)》教材配套使用。第1章實驗概述,針對數(shù)據(jù)結(jié)構(gòu)的基本概念及C語言的實現(xiàn)、C語言程序設(shè)計規(guī)范等進行了闡述。第2章~第10章,詳細講解了“數(shù)據(jù)結(jié)構(gòu)”課程的核心內(nèi)容,每章按照如下思路組織內(nèi)容:“基本知識點”部分,給出該章應(yīng)該掌握的基本術(shù)語;“內(nèi)容要點”部分,從實踐的角度總結(jié)相應(yīng)數(shù)據(jù)結(jié)構(gòu)的基本概念、基本運算、存儲結(jié)構(gòu)及相應(yīng)的圖示;“實踐”部分,給出本書主要算法的全部實驗,也是該書的重點內(nèi)容,對于每個實驗,均給出了實驗?zāi)康摹嶒瀮?nèi)容、實驗要點及說明、參考程序及思考題,希望學(xué)生能夠在實踐的過程中,自主完成,達到舉一反三、提高編程能力的目的。
本書算法力求精湛及規(guī)范,以期幫助學(xué)生養(yǎng)成良好的程序設(shè)計風(fēng)格及素養(yǎng)。全書程序設(shè)計的主要貫穿思想為:數(shù)據(jù)結(jié)構(gòu)算法的實現(xiàn),一般由數(shù)據(jù)結(jié)構(gòu)(抽象數(shù)據(jù)類型ADT)的實現(xiàn)與實例(一種數(shù)據(jù)結(jié)構(gòu)可以表示的具體問題)的實現(xiàn)兩部分組成。本書的源程序全部用C語言編寫,所有程序都在Microsoft Visual C++ 6.0下運行通過,方便學(xué)生學(xué)習(xí)和使用。
本書由阮宏一負責(zé)全書的總體策劃與統(tǒng)稿、定稿工作。各章主要編寫人員分工如下:第1章、第4章、第6章、第8章、第9章由張緒輝、張?zhí)炱婢帉懀坏?章、第3章、第5章、第7章、第10章由阮宏一、夏匯川編寫;參加本書前期編寫的人員還有:杜發(fā)啟、文中林、魯靜、宋婉娟、張琪,在此一并對他們表示感謝。
由于作者水平有限,書中難免存在錯誤和疏漏之處,敬請廣大讀者批評指正。
作 者
2017年1月
阮宏一,教授,1982年至今,先后在湖北教育學(xué)院數(shù)學(xué)系、湖北教育學(xué)院計科系、湖北第二師范學(xué)院計算機學(xué)院任教。湖北高等學(xué)校計算機學(xué)會會員,《數(shù)據(jù)結(jié)構(gòu)》校級精品課程負責(zé)人。曾出版過《數(shù)據(jù)庫系統(tǒng)概論》、《數(shù)據(jù)結(jié)構(gòu)C/C++描述》、《數(shù)據(jù)結(jié)構(gòu)實踐指導(dǎo)教程(C語言版)》、《C程序設(shè)計實訓(xùn)教程》、《Visual FoxPro 程序設(shè)計實訓(xùn)教程》、《大學(xué)計算機基礎(chǔ)》、《大學(xué)計算機基礎(chǔ)實訓(xùn)教程》、《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(C/C++描述)》等多部教材。
第1章 實驗概述
1.1 數(shù)據(jù)結(jié)構(gòu)的基本概念與C語言的實現(xiàn)
1.1.1 數(shù)據(jù)元素
1.1.2 數(shù)據(jù)與數(shù)據(jù)對象
1.1.3 數(shù)據(jù)結(jié)構(gòu)
1.1.4 數(shù)據(jù)類型
1.1.5 抽象數(shù)據(jù)類型
1.2 問題的求解與C語言的實現(xiàn)架構(gòu)
1.2.1 問題的求解與實現(xiàn)
1.2.2 C語言的實現(xiàn)架構(gòu)
1.2.3 應(yīng)用程序主菜單的設(shè)計
1.3 C語言實現(xiàn)的相關(guān)技術(shù)
1.3.1 程序設(shè)計的原則
1.3.2 數(shù)據(jù)基本屬性與數(shù)據(jù)處理
1.3.3 數(shù)據(jù)結(jié)構(gòu)與算法
1.3.4 數(shù)據(jù)結(jié)構(gòu)的C語言描述
第2章 線性表
2.1 內(nèi)容要點
2.1.1 線性表的定義及基本運算
2.1.2 線性表的存儲結(jié)構(gòu)
2.2 線性表的實踐
2.2.1 順序表的實踐
2.2.2 單鏈表的實踐
2.2.3 雙向鏈表的實踐
第3章 棧和隊列
3.1 內(nèi)容要點
3.1.1 棧
3.1.2 隊列
3.2 棧的實踐
3.3 隊列的實踐
第4章 串
4.1 內(nèi)容要點
4.1.1 串的定義及基本運算
4.1.2 串的存儲結(jié)構(gòu)
4.2 定長順序串的實踐
4.2.1 定長順序串的存儲結(jié)構(gòu)
4.2.2 定長順序串的實驗
4.2.3 參考程序
4.3 堆串的實踐
4.3.1 堆串的存儲結(jié)構(gòu)
4.3.2 堆串的實驗
4.3.3 參考程序
第5章 數(shù)組和廣義表
5.1 內(nèi)容要點
5.1.1 數(shù)組
5.1.2 特殊矩陣、稀疏矩陣
5.1.3 廣義表
5.2 數(shù)組的實踐
5.3 稀疏矩陣的實踐
5.4 廣義表的實踐
第6章 樹和二叉樹
6.1 內(nèi)容要點
6.1.1 樹
6.1.2 二叉樹
6.1.3 樹與二叉樹的相互轉(zhuǎn)換
6.1.4 哈夫曼樹
6.2 二叉樹的實踐
6.2.1 順序存儲結(jié)構(gòu)的實驗
6.2.2 參考程序
6.2.3 鏈?zhǔn)酱鎯Y(jié)構(gòu)的實驗
6.2.4 參考程序
第7章 圖
7.1 內(nèi)容要點
7.1.1 圖的定義及基本運算
7.1.2 圖的存儲結(jié)構(gòu)
7.1.3 圖的遍歷
7.1.4 圖的應(yīng)用
7.2 圖的實踐
7.2.1 圖的建立及遍歷
7.2.2 圖的應(yīng)用實踐
第8章 查找
8.1 內(nèi)容要點
8.1.1 查找的基本概念
8.1.2 順序查找
8.1.3 折半查找
8.1.4 分塊查找
8.1.5 二叉排序樹查找
8.1.6 平衡二叉樹查找
8.1.7 哈希表查找
8.2 查找的實踐
8.2.1 基于線性表的查找
8.2.2 基于樹結(jié)構(gòu)的查找
8.2.3 基于計算的查找
第9章 內(nèi)部排序
9.1 內(nèi)容要點
9.1.1 排序的基本概念
9.1.2 記錄序列的存儲方式
9.2 內(nèi)部排序的分類
9.2.1 插入排序
9.2.2 交換排序
9.2.3 選擇排序
9.2.4 歸并排序
9.2.5 分配類排序
9.3 內(nèi)部排序的實踐
9.3.1 基于插入排序的實踐
9.3.2 基于交換排序的實踐
9.3.3 基于選擇排序的實踐
9.3.4 基于歸并排序的實踐
9.3.5 基于分配類排序的實踐
第10章 文件與外部排序
10.1 內(nèi)容要點
10.1.1 文件的基本概念
10.1.2 C程序文件的基本操作
10.1.3 外存信息的存取
10.1.4 外部排序的基本方法
10.2 文件與外部排序的實踐
10.2.1 文件操作實踐
10.2.2 外部排序的實踐
參考文獻