本書融入編者多年的教學經驗和體會,參考國內外流行教材,較全面地組織教材內容,提供大量的經典算法,并適當引入考研典型題例供學生學習,具有很強的實用性、易讀性、針對性。本書的體系結構科學合理,可分為11章,分別講述緒論、線性表、樹、圖、查找與排序。每章后附有習題,大部分選自近年考研題目,以幫助深入理解相關內容。
“數據結構”課程是計算機類、電子信息類及相關專業的專業基礎課。它在整個課程體系中處于承上啟下的核心地位:一方面擴展和深化在離散數學、程序設計語言等課程學到的基本技術和方法;另一方面為進一步學習操作系統、編譯原理、數據庫等專業知識奠定堅實的理論與實踐基礎。本課程在教給學生數據結構設計和算法設計的同時,培養學生的抽象思維能力、邏輯推理能力和形式化思維方法,增強分析問題、解決問題和總結問題的能力,更重要的是培養專業興趣,樹立創新意識。本教材在內容選取上符合人才培養目標的要求及教學規律和認知規律,在組織編排上體現“先理論、后應用、理論與應用相結合”的原則,并兼顧學科的廣度和深度,力求適用面廣泛。
全書共11章。第1章綜述數據、數據結構和抽象數據類型等基本概念及算法描述與分析方法;第2~9章主要從抽象數據類型的角度分別討論線性表、棧和隊列、串、數組和廣義表、樹和二叉樹、圖等基本類型的數據結構及其應用;第10章和第11章討論查找和排序的各種方法,著重從時間性能、應用場合及使用范圍方面進行分析和比較。本書對數據結構眾多知識點的來龍去脈做了詳細解釋和說明;每章后面配有難度各異的習題,并在附錄中給出習題的參考答案,供讀者理解知識及復習提高之用。全書采用C語言描述數據結構和算法。
從課程性質上講,“數據結構”是高等院校計算機科學、電子信息科學及相關專業教學計劃中的一門專業基礎課;其教學要求是學會分析研究計算機加工的數據結構的特性,以便為實際應用涉及的數據選擇適當的邏輯結構、存儲結構及其相應的算法,并初步掌握算法的時空分析技術。從課程學習上講,“數據結構”的學習是復雜程序設計的訓練過程;其教學目的是著眼于原理與應用的結合,在深化理解和靈活掌握教學內容的基礎上,學會把知識用于解決實際問題,書寫出符合軟件工程規范的文件,編寫出結構清晰及正確易讀的程序代碼。可以說,“數據結構”比“高級程序設計語言”等課程有著更高的要求,它更注重培養分析抽象數據的能力。
本書是編者多年從事該課程教學工作的教學成果,編者都是具有副教授以上職稱、有15年以上該課程教學經驗的一線教師。本書由任志國擔任主編、趙傳成、藍才會、祁建宏、達文姣、岳秋菊、劉君擔任副主編。其中的第1章、第2章、第5章、第7章、第8章、第9章由任志國編寫,第3章由趙傳成編寫,第4章由岳秋菊編寫,第6章由達文姣編寫,第10章由藍才會編寫,第11章由祁建宏編寫,所有章節習題部分由劉君編寫。在本書的構思與編寫過程中,得到了安天慶教授、黨建武教授、王治和教授的幫助,在算法的實現與調試以及插圖的制作過程中,得到了楊業、史淑娟、宗小兵等研究生的幫助,在此表示感謝。
前言
第1章 緒論
1.1 引言
1.2 數據結構的基本概念
1.2.1 有關概念和術語
1.2.2 數據的邏輯結構
1.2.3 數據的存儲結構
1.2.4 數據的運算
1.3 數據類型和抽象數據類型
1.3.1 數據類型
1.3.2 抽象數據類型
1.4 算法
1.4.1 算法及其特征
1.4.2 常見的算法描述方法
1.4.3 常見的算法設計方法
1.5 算法性能分析與度量
1.5.1 時間復雜度
1.5.2 空間復雜度
1.6 關于學習數據結構
1.6.1 數據結構課程的地位
1.6.2 數據結構課程體系
1.6.3 數據結構課程學習特點
習題一
第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 鏈表應用舉例
2.3.4 鏈式存儲結構的分析
2.4 雙鏈表與其他鏈式結構
2.4.1 線性表的雙鏈表存儲結構
2.4.2 雙鏈表上相關操作的實現
2.4.3 循環鏈表
2.4.4 靜態鏈表
2.5 一元多項式的表示及運算
2.5.1 一元多項式的表示及存儲
2.5.2 一元多項式創建與打印
2.5.3 一元多項式相加
2.5.4 一元多項式相乘
習題二
第3章 棧
3.1 棧的定義及基本運算
3.1.1 棧的定義
3.1.2 棧的抽象數據類型
3.2 順序棧
3.2.1 順序棧的定義及存儲結構
3.2.2 順序棧的基本操作
3.3 鏈棧
3.3.1 鏈棧的定義及存儲結構
3.3.2 鏈棧的基本操作
3.4 共享棧與多棧
3.4.1 共享棧
3.4.2 多鏈棧
3.5 棧的應用
3.5.1 棧的簡單應用
3.5.2 棧與遞歸
習題三
第4章 隊列
4.1 隊列的定義及基本運算
4.1.1 隊列的定義
4.1.2 隊列的抽象數據類型
4.2 循環隊列
4.2.1 循環隊列的存儲實現
4.2.2 循環隊列的基本操作
4.2.3 動態循環隊列
……
第5章 串
第6章 數組和廣義表
第7章 二叉樹和樹
第8章 圖論
第9章 圖算法及應用
第10章 查找
第11章 排序
附錄一 習題參考答案
附錄二 學期考試樣卷
參考文獻
《數據結構(C語言描述)》:
1.2.3數據的存儲結構
數據結構在計算機中的表示(又稱為映像)稱為數據的物理結構,又稱為存儲結構。它不同于邏輯結構,是依賴計算機語言的,是具體的。通常,一個數據元素在計算機內用一塊連續的存儲單元來表示。那么,在計算機中怎樣存儲表中所有的數據元素呢?數據結構一般用下面四種基本的存儲結構來表示數據元素之間的關系。
1.順序存儲結構
該方法把邏輯上相鄰的數據元素存儲在物理位置也相鄰的存儲單元里,數據元素之間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構主要應用于線性結構,非線性結構也可以通過某種線性的方法實現順序存儲。其優點是可以實現隨機存取,每個元素占用最少的存儲空間,即存儲密度大。其缺點是只能使用相鄰的一整塊存儲單元,因此可能產生較多的外部碎片。
2.鏈式存儲結構
該方法不要求邏輯上相鄰的數據元素在物理位置上也相鄰,數據元素之間的邏輯關系由附加的指針表示,由此得到的存儲表示稱為鏈式存儲結構。其優點是不會出現碎片現象,可充分利用所有存儲單元。其缺點是每個元素因存儲指針而占用額外的存儲空間,并且只能實現順序存取。
3.索引存儲結構
該方法通常在存儲數據元素信息的同時,還建立附加的索引表。索引表由若干索引項組成。索引項的一般形式是:(關鍵字、地址)。關鍵字(Key)是能唯一標識一個數據元素的那些數據項。其優點是檢索速度快。缺點是增加附加的索引表占用較多的存儲空間。在增加和刪除數據時要修改索引表,因而花費較多的時間。
4.哈希(散列)存儲結構
該方法的基本思想是根據數據元素的關鍵字直接計算出該數據元素的存儲地址。其優點是檢索、增加、刪除結點的操作都很快。缺點是如果散列函數不好,可能出現數據元素存儲地址的沖突,而解決沖突會增加時間和空間開銷。
這四種基本存儲方法既可以單獨使用,也可以組合起來對數據結構進行存儲映像。同一邏輯結構采用不同的存儲方法,可以得到不同的存儲結構;采用不同的存儲結構,其數據處理效率往往不同。選擇何種存儲結構來表示相應的邏輯結構,視具體要求而定,主要考慮運算方便及算法的時空要求。
1.2.4數據的運算
為了有效地處理數據,可將數據按一定的邏輯結構組織起來,并選擇適當的存儲方法存儲數據,然后再對數據進行運算。
數據的運算是定義在數據的邏輯結構之上的,每一種邏輯結構都有一個運算的集合,并指出運算的功能,例如,查找、插入、刪除、修改等,這些運算實際上是在數據元素上施加的一系列的抽象操作。所謂抽象操作,是只知道這些操作要求“做什么”,而無須考慮“如何做”,只有在確定了存儲結構之后,才考慮如何具體實現這些運算。下面介紹幾種常見的數據運算。
……