普通高等教育“十二五”規劃教材·高等院校計算機系列教材:數據結構

普通高等教育“十二五”規劃教材·高等院校計算機系列教材:數據結構

《普通高等教育"十二五"規劃教材·高等院校計算機系列教材:數據結構》是2013年華中科技大學出版社出版的圖書,作者是陳倩詒、鄧紅衛。

基本介紹

  • 中文名:普通高等教育"十二五"規劃教材•高等院校計算機系列教材:數據結構
  • 出版社:華中科技大學出版社
  • 頁數:241頁
  • 開本:16
  • 定價:29.80
  • 作者:陳倩詒 鄧紅衛
  • 出版日期:2013年1月1日
  • 語種:簡體中文
  • ISBN:9787560983387
  • 品牌:華中科技大學出版社
內容簡介,圖書目錄,文摘,序言,

內容簡介

《普通高等教育"十二五"規劃教材·高等院校計算機系列教材:數據結構(C語言版)》內容簡介:“數據結構”是計算機及相關專業的專業基礎核心課程。《普通高等教育"十二五"規劃教材·高等院校計算機系列教材:數據結構(C語言版)》所有算法都採用C語言描述,書中不僅講解了數據結構的基本理論知識,還提供了大量實例來幫助讀者理解和掌握知識點。全書共分9章,內容包括緒論、線性表、棧和佇列、串、數組與廣義表、樹與二叉樹、圖、查找、內部排序等,每章都對相關數據結構的邏輯結構、存儲結構、基本操作、綜合算法等做了全面、深入的闡述。 《普通高等教育"十二五"規劃教材·高等院校計算機系列教材:數據結構(C語言版)》各章內容翔實,算法和例題典型,實踐性強,可作為本、專科院校的計算機及相關專業“數據結構”課程的教材,也可作為計算機軟體開發人員、參加碩士研究生入學考試和軟體資格(水平)考試人員的參考書。

圖書目錄

第1章緒論(1)
1.1引言(1)
1.2常用術語和基本概念(1)
1.3算法與算法分析(4)
1.3.1算法的重要特性(4)
1.3.2算法設計的基本要求(4)
1.3.3算法的描述方法(5)
1.3.4算法分析(5)
小結(6)
習題1(7)
第2章線性表(8)
2.1線性表的邏輯結構(8)
2.1.1線性表的定義(8)
2.1.2線性表的抽象數據類型(8)
2.2線性表的順序存儲及實現(10)
2.2.1順序表(10)
2.2.2順序表的基本操作(11)
2.3線性表的鏈式存儲及實現(14)
2.3.1單鍊表(15)
2.3.2單鍊表的基本運算(16)
2.4順序表和鍊表的比較(22)
2.4.1順序存儲結構的優、缺點(22)
2.4.2存儲結構的選取(23)
2.5線性表的其他表示形式(24)
2.5.1單循環鍊表(24)
2.5.2雙向鍊表(25)
2.5.3靜態鍊表(26)
2.6單鍊表套用舉例(27)
2.6.1單鍊表倒置(27)
2.6.2重複節點的刪除(28)
2.6.3單鍊表的合併(28)
2.6.4一元多項式的表示及相加(29)
小結(31)
習題2(32)
第3章棧和佇列(34)
3.1棧(34)
3.1.1棧的定義及基本操作(34)
3.1.2棧的順序存儲(35)
3.1.3棧的鏈式存儲(37)
3.1.4順序棧和鏈棧的比較(39)
3.2佇列(39)
3.2.1佇列的定義及基本操作(39)
3.2.2佇列的順序存儲及基本操作(40)
3.2.3佇列的鏈式存儲及基本操作(45)
3.3棧的套用舉例(47)
3.3.1棧與遞歸(47)
3.3.2棧與數制轉換(49)
3.3.3棧與迷宮問題(50)
3.3.4棧與表達式求值(54)
3.4佇列套用舉例(56)
3.4.1鍵盤輸入循環緩衝區問題(56)
3.4.2舞伴配對問題(57)
3.4.3楊輝三角問題(59)
小結(61)
習題3(61)
第4章串(64)
4.1串及其類型定義(64)
4.1.1串及其相關術語(64)
4.1.2串的抽象數據類型(65)
4.2串的定長順序存儲(66)
4.2.1串的定長順序存儲結構(66)
4.2.2定長順序串的基本操作(67)
4.2.3模式匹配(68)
4.3串的堆存儲結構(74)
4.3.1堆存儲結構(74)
4.3.2堆結構上的基本操作(74)
4.4串的鏈式存儲結構(76)
4.5串的套用舉例(77)
4.5.1文本編輯(77)
4.5.2愷撒密碼(78)
小結(79)
習題4(79)
第5章數組與廣義表(81)
5.1數組及其操作(81)
5.1.1數組的定義(81)
5.1.2數組的順序表示及實現(82)
5.2特殊矩陣的壓縮存儲(85)
5.2.1對稱矩陣(85)
5.2.2三角矩陣(86)
5.2.3對角矩陣(87)
5.3稀疏矩陣(88)
5.3.1稀疏矩陣的三元組存儲(89)
5.3.2稀疏矩陣的十字鍊表存儲(94)
5.4廣義表(97)
5.4.1廣義表的定義(97)
5.4.2廣義表的存儲結構(98)
5.4.3廣義表的基本操作(100)
小結(103)
習題5(103)
第6章樹與二叉樹(105)
6.1樹(105)
6.1.1樹的邏輯結構(105)
6.1.2樹的存儲結構(109)
6.2二叉樹定義與性質(111)
6.2.1二叉樹的基本概念(111)
6.2.2二叉樹的主要性質(112)
6.3二叉樹的存儲與基本操作實現(113)
6.3.1二叉樹的存儲(113)
6.3.2二叉樹的基本操作與實現(117)
6.4二叉樹的遍歷(119)
6.4.1二叉樹的遍歷方法及算法實現(119)
6.4.2從遍歷序列推導二叉樹(124)
6.5線索二叉樹(125)
6.5.1線索二叉樹的定義及結構(125)
6.5.2線索二叉樹的基本操作及算法實現(127)
6.6樹、森林與二叉樹的轉換(132)
6.6.1樹轉換為二叉樹(132)
6.6.2森林轉換為二叉樹(133)
6.6.3二叉樹轉換為樹或森林(133)
6.7二叉樹遍歷算法的套用(134)
6.7.1查找數據元素(134)
6.7.2顯示二叉樹(134)
6.7.3統計葉子節點數目(135)
6.7.4求二叉樹深度(135)
6.7.5創建二叉樹(136)
6.8最優二叉樹——哈夫曼樹(136)
6.8.1哈夫曼樹的基本概念(136)
6.8.2哈夫曼樹的構造算法(138)
6.8.3哈夫曼編碼(140)
小結(143)
習題6(143)
第7章圖(147)
7.1圖的邏輯結構(147)
7.1.1圖的定義和基本術語(147)
7.1.2圖的抽象數據類型(151)
7.2圖的存儲結構(152)
7.2.1鄰接矩陣(152)
7.2.2鄰接表(154)
7.2.3十字鍊表(157)
7.2.4圖的存儲結構的比較(159)
7.3圖的遍歷(159)
7.3.1深度優先搜尋(160)
7.3.2廣度優先搜尋(161)
7.4圖與最小生成樹(163)
7.4.1生成樹和生成森林(163)
7.4.2最小生成樹(165)
7.4.3Prim算法生成最小生成樹(165)
7.4.4Kruskal算法生成最小生成樹(168)
7.5AOV網與拓撲排序(170)
7.5.1有向無環圖(170)
7.5.2AOV網(171)
7.5.3拓撲排序(172)
7.6AOE網與關鍵路徑(175)
7.6.1AOE網(175)
7.6.2關鍵路徑(176)
7.7圖與最短路徑(180)
7.7.1從一個源點到其餘各頂點的最短路徑(181)
7.7.2任意一對頂點之間的最短路徑(183)
小結(186)
習題7(186)
第8章查找(190)
8.1靜態查找表(190)
8.1.1順序表查找(190)
8.1.2有序表查找(191)
8.1.3靜態樹表的查找(192)
8.1.4索引順序表的查找(193)
8.2動態查找表(194)
8.2.1二叉排序樹和平衡二叉樹(195)
8.2.2B—樹和B+樹(201)
8.3哈希表(205)
8.3.1什麼是哈希表(205)
8.3.2哈希函式的構造方法(206)
8.3.3處理衝突的方法(207)
8.3.4哈希表的查找及性能分析(209)
小結(210)
習題8(210)
第9章內部排序(213)
9.1排序的基本概念(213)
9.2插入排序(214)
9.2.1直接插入排序(215)
9.2.2折半插入排序(216)
9.2.3二路插入排序(217)
9.2.4表插入排序(219)
9.2.5希爾排序(219)
9.3交換排序(221)
9.3.1冒泡排序(221)
9.3.2快速排序(224)
9.4選擇排序(227)
9.4.1簡單選擇排序(227)
9.4.2樹形選擇排序(228)
9.4.3堆排序(229)
9.5歸併排序(233)
9.6基數排序(235)
9.6.1多關鍵字排序(235)
9.6.2鏈式基數排序(236)
9.7各種內部排序方法的比較(237)
小結(238)
習題9(239)
參考文獻(241)

文摘

著作權頁:



插圖:




歷序列可知,節點A是二叉樹的根節點。其次,根據中序遍歷序列,在A之前的所有節點都是根節點左子樹的節點,在A之後的所有節點都是根節點右子樹的節點,如圖6.18(a)所示。然後,再對左子樹進行分解,得知B是左子樹的根節點,又從中序遍歷序列知道,B的左子樹為空,B的右子樹有D、F和G三個節點,需要進行分解。根據前序遍歷序列知D是B的右孩子節點,而在對應中序遍歷序列中F在D之前,G在D之後,所以F和G分別是D的左、右孩子節點,如圖6.18(b)所示。接著對A的右子樹進行分解,從對應前序遍歷子序列可知A的右子樹的根節點為C,而節點C在對應中序遍歷子序列中排在最後,可知它沒有右子樹,E和H是C的左子樹上的節點,在對應前序遍歷子序列中E在H之前,在對應中序遍歷子序列中E仍在H之前,所以E是該子樹的根,H是E的右孩子節點,最後得到如圖6.18(c)所示的整棵二叉樹。
如果只知道二叉樹的前序遍歷序列和後序遍歷序列,能否唯一地確定一棵二叉樹呢?答案是不可以。因為從前面的分析知道,利用二叉樹的前序遍歷序列和後序遍歷序列都只能準確找到該二叉樹的根節點,至於左、右子樹對應的遍歷序列是哪一部分則無法確定,所以也就無法唯一地確定一棵二叉樹了。
6.5線索二叉樹
6.5.1 線索二叉樹的定義及結構
1.線索二叉樹的定義
若按照上述章節介紹的某種遍歷方式對二叉樹進行遍歷,則可以把二叉樹中所有非線性結構節點排列出一個線性序列。在該序列中,除第一個節點外,每個節點有且僅有一個直接前驅;除最後一個節點外,每個節點有且僅有一個直接後繼。但是,這些直接前驅和直接後繼的關係在二叉樹的存儲結構中並沒有反映出來,只有在對二叉樹遍歷酌過程中才能得到這些信息,所以有時並不是非常方便。為了保留節點在某種遍歷序列中直接前驅和直接後繼的位置信息,應該如何做呢?如果在現有二叉鍊表結構的基礎上再為每個節點增加兩個指針域來分別指向該節點的直接前驅和直接後繼,則空間開銷太大,所以一般情況下可以利用二叉樹的現有二叉鍊表存儲結構中的空指針域來指示其直接前驅和直接後繼。這些用於指向直接前驅和直接後繼的指針域稱為線索(Thread),加了線索的二叉樹稱為線索二叉樹。
2.線索二叉樹的結構
哪來的空指針域呢?又有多少呢?一個具有n個節點的二叉樹若採用二叉鍊表存儲結構,必有2n個指針域。這些指針域均是用於指向左、右孩子節點的。在這2n個指針域中只有(n—1)個指針域是用於存儲孩子節點的地址的(因為只有根節點沒有雙親節點,其他(n—1)個節點均是作為某節點的孩子節點出現的),而另外(n+1)個指針域存儲的都是NULL。

序言

“數據結構”是計算機及相關專業的專業基礎核心課程。
在計算機科學的各領域中,經常要使用到各種不同的數據結構,例如,作業系統中要使用佇列、目錄樹等;資料庫系統中要使用線性表、索引樹等;編譯系統中要使用棧、哈希表、語法樹等;人工智慧中要使用廣義表、檢索樹、有向圖等。因此,在掌握了各種常用數據結構,能對算法進行時間複雜度和空間複雜度分析後,便可知道在何種情況下使用何種數據結構最方便有效,從而為以後研究和開發大型程式打下堅實基礎。由此可見,學好數據結構,對從事計算機技術及相關領域工作的人員來說,是多么重要。
數據結構主要是研究現實世界中的各種數據(數字、字元、聲音、圖形、圖像等)的邏輯結構,在計算機中的存儲結構及相關算法;分析針對同一問題的各種不同算法的優劣。學生在學習該課程後,將具備用各種數據結構來解決實際問題及評價算法優劣的能力,為後續計算機專業課程的學習打下堅實基礎,可以說這門課程起到了一個承上啟下的關鍵作用。
本書涵蓋了碩士研究生入學考試中數據結構考試大綱所規定的考試內容。全書共分為9章,第1章,介紹數據結構與算法等一些基本術語,並對算法描述及算法分析做了簡單說明,介紹衡量算法優劣的時間複雜度和空間複雜度;第2章至第5章,介紹線性結構(線性表、棧、佇列、串、數組)的邏輯結構、物理存儲結構、常用算法的實現及基本套用;第6章至第7章,介紹非線性結構(樹、二叉樹、圖)的邏輯結構、物理存儲結構、常用算法的實現及基本套用;第8章至第9章,介紹在計算機中使用非常廣泛的兩種運算,即查找和排序,對多種常用的查找、排序方法進行詳細說明,並給出各種方法的實現算法及時間複雜度和空間複雜度的分析。各章內容相對獨立,便於不同院校不同專業按需要組織教學。全書力求將數據結構理論知識與具體套用實例相結合,有助加深學生的理解和掌握。
本書採用常用的C語言作為算法的描述語言,形式上學生更容易理解和接受。編寫本書的教師均為有講授本課程十幾年教學經驗的教師,對數據結構中的各種算法都進行了認真的研究和分析,因此,本書中所選的例題和習題都具有一定的針對性和代表性。
百密一疏,在所難免,懇請讀者提出好的意見和建議。

熱門詞條

聯絡我們