資料結構是指資料元素的集合及元素間的相互關係和構造方法。元素之間相互關係是資料的邏輯結構,資料元素及元素之間關係的儲存稱為儲存結構。
資料結構是演算法設計的基礎,設計合理的資料結構可使演算法簡單高效。
資料結構按邏輯關係分為線性結構和非線性結構。非線性結構又可分為樹結構和圖結構。
一、線性結構
線性結構的特點是資料元素之間呈現一種線性關係。即元素『「乙個接乙個排列」
1、線性表
線性表是最簡單、最基本、最常用的線性結構。
它有兩種儲存方法:順序儲存和鏈式儲存,主要的基本操作是插入、刪除、查詢。
乙個線性表有n(n>=0)個元素的有限序列 表(a1,a2,..,an)
非空線性表特點:
(1)存在唯一的『「第乙個元」素
(2)存在唯一的「最後乙個」元素
(3)除第乙個元素外,每個元素只有乙個前驅
(4)除最後乙個元素外,每個元素只有乙個後繼
線性表的儲存結構:
1.1順序儲存
用一組位址連續的儲存單元依次儲存線性表中的資料元素,使邏輯上相鄰的兩個元素在物理位置上也相鄰
優點是可隨機訪問表中任乙個元素
缺點是插入刪除需要移動元素
1.2鏈式儲存
線性表的鏈式儲存用結點來儲存資料元素。
乙個基本的結點結構:
資料域用來儲存元素的值,指標域用來儲存當前元素的直接前驅後繼的位置資訊,指標域中的資訊稱為指標或鏈
各元素結點的位址不需要連續,儲存元素的同時必須儲存元素間的邏輯關係
在鏈式儲存結構中,只需要頭指標(head)指向第乙個結點,就可以順序訪問表中的任意乙個元素
在鏈式儲存結構中,進行插入和刪除本質是對相關指標的修改
採用線性鍊錶儲存結構不能對資料元素進行隨機訪問,但插入和刪除操作不需要移動元素
根據結點中指標域的設定方式,還有其他幾種鍊錶結構
雙向鍊錶:每個結點包含兩個指標,分別指出當前結點元素的直接前驅和後繼。特點是從表的任意結點出發,從兩個方向遍歷鍊錶
迴圈鍊錶:在單向鍊錶的基礎上令表尾結點的指標指向第乙個結點構成迴圈。特點是可以從表中任意結點遍歷整個鍊錶
靜態鍊錶:借助陣列來描述線性表的鏈式儲存結構。
2.棧和佇列
棧和佇列是程式中常用的兩種資料結構,它們的邏輯結構和線性表相同。
特點在於運算有所限制:棧按後進先出的規則,佇列按先進先出的規則。稱為運算受限的線性表
2.1 棧
(1)棧只能通過訪問它的一端來實現資料儲存和檢索的線性資料結構,棧的修改是按先進先出的原則。棧中進行插入刪除的一端稱為棧頂,另一端棧底,不含資料元素的棧為空棧
(2)棧的基本運算
初始化棧:建立乙個空棧。
判棧空:當棧為空時返回真,否則假。
入棧:將元素插入棧頂,並更新棧頂指標。
出棧:將棧頂元素從棧中刪除,並更新棧頂指標。若需要得到棧頂元素的值,可將出棧定義為乙個返回棧頂元素值的函式。
讀棧頂元素:返回棧頂元素的值,不修改棧頂指標。
(3)棧的儲存結構
順序儲存:
棧的順序儲存是指用一組位址連續的儲存單元依次儲存自棧頂到棧底的資料元素,同時設指標top指示棧頂元素的位置。
用順序儲存結構的棧也稱為順序棧。這種儲存方式棧的空間是有限的,需要預先定義棧的空間。順序棧中當乙個元素入棧時需要判斷是否棧滿,若棧滿元素入棧會發生上溢現象
鏈式儲存:
用鍊錶儲存棧元素可以克服順序棧存在的溢位不足問題。用鍊錶儲存結構的棧也稱為鏈棧,由於棧中元素的插入和刪除僅在一端,因此不必另設頭指標,鍊錶的指標頭就是棧頂指標
棧的應用:
棧的典型應用包括表示式求值、匹配、計算機語言的實現、遞迴過程轉變為非遞迴過程的處理中棧發揮重要的作用
2.2 佇列
佇列是一種先進先出的線性表,只允許在表的一端插入元素另一端刪除元素。插入元素的一端稱隊尾,允許刪除的一端稱隊頭
基本運算:
初始化隊:建立乙個空佇列
判隊空: 當隊列為空時返回真,否則假。
入隊:將元素加入到佇列的隊尾,並更新隊尾指標
出隊:將元素從佇列中刪除,並更新隊頭指標
讀隊頭元素:返回隊頭元素值,但不更新隊頭指標
佇列的儲存結構:
(1)佇列順序儲存
(2)佇列鏈式儲存
(2)佇列應用
佇列結構常用語需要排列的場合。如作業系統中處理列印任務的列印佇列、離散事件的計算機模擬等
2.3 串
二、陣列、矩陣、廣義表
1 陣列
陣列是定長線性表在維數上的擴充套件,即線性表的元素又是乙個線性表。
陣列特點
(1)資料元素數目固定,一但定義了乙個陣列結構,就不再有元素個數的增減變化
(2)資料元素具有相同的型別
(3)資料元素的下標關係具有上下界的約束且下標有序
陣列的兩個基本運算
(1)給定一組下標,訪問相應的資料元素
(2)給定一組下標,修改相應的資料元素中某個資料項的值
幾乎所有高階程式設計都提供陣列型別。程式語言中把陣列看成是具有共同名字的同一型別的多個變數的集合
陣列順序儲存
陣列一般不做插入和刪除運算,定義陣列後資料元素個數和元素之間的關係不再發生變動,所以陣列適合採用順序儲存結構
計算機的記憶體結構再邏輯上是一維線性的,因此儲存多維陣列時必須按某種方式進行降維處理,即將陣列元素排成乙個線性序列
二維陣列的儲存結構可分為以行為主序和以列為主序的兩種方法
2 矩陣
矩陣是科學與工程計算領域研究的數學物件,
3 廣義表
三、樹
樹結構是一種非常重要的非線性結構,結構中乙個元素可以有兩個或兩個以上的直接後繼元素,樹可以描述客觀世界廣泛存在的層次結構
四、圖
五、查詢
六、排序
軟體設計師資料結構之線性結構複習小結
1.1 線性表的定義 乙個線性表是n n 0 個元素的有限序列,通常表示為 a1,a2,a3 an 非空線性表的特點如下 1 存在唯一的表頭和表尾 2 除第乙個元素外,序列中的每個元素均只有乙個直接前驅。3 除最後乙個元素外,序列中的每個元素均只有乙個直接後驅。1.2 線性表的儲存結構 線性表的儲存...
軟體設計師試題解析 資料結構篇
資料結構在高程考試中占有很大的比例,掌握好資料結構,對於程式設計人員來說無疑是內功的修煉。資料結構主要有三個方面的內容 資料的邏輯結構 資料的物理儲存結構 對資料的操作 或演算法 通常,演算法的設計取決於資料的邏輯結構,演算法的實現取決於資料的物理儲存結構。邏輯結構有四種基本型別 集合結構 線性結構...
複習 軟體設計師之資料結構與演算法基礎
1.常用資料結構 陣列 靜態陣列,動態陣列 線性表鍊錶 單向鍊錶,雙向鍊錶,迴圈鍊錶 佇列棧樹 二叉樹,查詢樹,平衡樹,線索樹,堆 圖hash 儲存位址計算,衝突處理 2.常用演算法 i 排序演算法,查詢演算法,數值計算法,字串處理方法,資料壓縮演算法,遞迴演算法,圖的相演算法 ii 演算法與資料結...