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