資料結構指資料元素的集合及元素間的相互關係和構造方法。元素之間的相互關係是資料的邏輯結構,資料元素及元素間關係的儲存稱為儲存結構(物理結構)。資料結構按照邏輯關係的不同分為線性結構和非 線性結構兩大類,其中,非線性結構又可分為樹結構和圖結構。
(一)線性結構
線性結構的特點是資料元素之間呈現一種線性關係。
1、線性表
常採用順序儲存和鏈式儲存,主要的基本操作是插入、刪除和查詢等。
定義:乙個線性表是n(n >= 0)個元素的有限序列,通常表示為(a1、a2、……、an)。非空線性表的特點如下:(1)存在唯一的乙個「第乙個」元素(2)存在唯一的乙個「最後乙個」元素(3)除了第乙個元素外,序列中的每個元素均只有乙個直接前驅(4)除了最後乙個元素外,序列中的每個元素均只有乙個直接後繼。
儲存結構:線性表的儲存結構分為順序儲存和鏈式儲存。(1)順序儲存是指用一組位址 連續的儲存單元 一次儲存線性表中的資料元素,從而使得邏輯上相鄰的兩個元素在物理位置上也相鄰。這種儲存方式下,元素間的邏輯關係無須占用額外的空間來儲存。一般以loc(a1)表示 線性表中第乙個元素的儲存位置,在順序儲存結構中,第i個 元素ai的儲存位置為loc(ai) = loc(a1) + (i - 1)*l。其中,l是表中每個資料元素所佔空間的位元組數。線性表採用順序結構的優點是可以隨時訪問表中的元素, 缺點是插入和刪除操作需要移動元素。(2)線性表的鏈式儲存是用通過指標連線起來的結點來儲存資料元素,基本的結點結構如下:優點。根據結點中指標域的設定方式,除單鏈表外還有其他幾種鍊錶結構:雙向鍊錶、迴圈鍊錶、靜態鍊錶。
2、棧與佇列
棧與佇列的邏輯 結構與線性表相同, 其特點在於運算有所限制:棧「後進先出」,佇列「先進先出」,故稱為運算受限的線性表。
(1)棧
定義:棧是只能通過訪問它的一端來實現資料儲存和檢索的一種線性資料結構。棧又稱為後進先出(lifo)的線性表。棧中進行插入和刪除操作的一端稱為棧頂(top),另一端稱為棧底(bottom)不含資料元素的棧稱為空棧。
棧的基本運算包括:初始化棧(initstack(s))、判空棧(isempty(s))、入棧(push(s,x))、出棧(pop(s))、讀棧頂元素(top(s))。
棧的儲存結構:(a)順序儲存:用一組位址連續的儲存單元依次儲存自棧頂到棧底的資料元素,同時附設指標top指示棧頂元素的位置。採用順序儲存結構的棧也稱為順序棧,這種儲存方式下,需要預先定義(或申請)棧的儲存空間, 也就是說,棧空間的容量是有限的。因此,順序棧中,元素入棧需判斷是否棧滿。(b)鏈式儲存:採用鏈式儲存結構的棧也稱為鏈棧。由於棧中元素的插入和刪除僅在棧頂一端進行,因此不必另外設定頭指標,鍊錶的頭指標就是棧頂指標。
(2)佇列
定義:佇列是一種先進先出(fifo)的線性表,它 只允許在表的一端插入元素,而在 表的另一端刪除元素。佇列中允許插入元素的一端稱為隊尾,允許刪除元素的一端稱為隊頭。
佇列的基本運算包括:初始化佇列(initqueue(q))、判隊空(isempty(q))、入隊(enqueue(q,x))、出隊(delqueue(q))、讀隊頭元素(frontque(q))。
佇列的儲存結構:(a)順序儲存:採用順序儲存結構的佇列也稱為順序佇列,它也是用一組位址連續的儲存單元 存放佇列中的元素。由於佇列中元素的插入和刪除限定在表的兩端進行,因此設定隊頭指標和隊尾指標,分別 指出當前的隊頭和隊尾。順序佇列的儲存空間容量提前設定,隊尾指標有乙個上限值,達到上限後,就不能只通過修改 隊尾指標來實現新元素的入隊操作了。若將順序佇列假想成乙個環狀結構,則可維持入隊、出隊操作運算的簡單性,稱它為迴圈佇列。(迴圈佇列空和滿時,隊頭指標q.front和隊尾指標q.rear指向的位置是相同的,所以無法根據q.rear和 q.front之間的關係來判斷佇列的狀態。為區別可採用以下方法:[i]設定乙個標誌,以區別。[ii]犧牲乙個儲存單元,約定「佇列的尾指標所指位置的下乙個位置是隊頭指標時」表示佇列滿,頭尾指標的值相同時表示隊列為空)(b)鏈式儲存:採用鏈式儲存結構的佇列也稱為鏈佇列。為 便於操作給鏈佇列新增乙個頭結點,並令頭指標指向頭結點。因此,隊列為空的判定條件是頭指標和尾指標的值相同,且均指向頭結點。
3、串
串是一種特殊的線性表,其資料元素為字元。
定義:串是僅有字元構成的有限序列,是一種線性表。一般記做s='a1 a2 ……an',其中s是串名,單引號括起來的字串行是串值。
串的幾個基本概念:空串、空格串(乙個或多個空格組成的串。計算長度時空格也要計算在內)、子串、串相等、串比較。
串的基本操作:賦值strassign(s, t)、連線操作concat(s, t)、求串長strlength(s)、串比較strcompare(s, t)、求子串 substring(s, start, len)
儲存結構:順序儲存或鏈式儲存。(a)串的順序結構指用一組位址連續的儲存單元來儲存串值的字串行。(b)用鍊錶儲存串中的字元時,每個 結點中可以儲存乙個字元,也可以儲存多個字元,此時要考慮儲存密度問題。 鏈式儲存中,結點大小的選擇會直接影響對串的處理效率。
串的模式匹配:子串的定位操作,子串也稱為模式串。(a)樸素的模式匹配演算法:布魯特-福斯演算法,基本思想是從主串的第乙個字元起與模式串的第乙個字元比較,若相等,則繼續逐一對字元進行後續的比較,否則從主串第二個字元起與模式串的第乙個字元重新比較,直到模式串中每個字元依次和主串中乙個連續的字串行相等為止,此時稱為匹配成功。找不到與模式串 相同的子串,則匹配失敗。(b)改進的模式匹配演算法:kmp演算法,改進之處在於: 每當匹配過程**現相比較的字元不相等時,不需要回退主串的字元為止指標,而是利用已經得到的「部分匹配」結構將模式串向右「滑動」盡可能遠的距離,再繼續進行比較。kmp中,依據模式串的next值實現子串的滑動。
(二)陣列、矩陣和廣義表
陣列和廣義錶可看做是線性表的推廣,其特點是資料元素仍然是乙個表。
1、陣列
定義:陣列是定長線性表在維數上的擴充套件,即線性表中的元素又是乙個線性表。n維陣列是一種「同構」的資料結構,其每個資料元素型別相同、結構一致。
陣列結構的特點:陣列元素數目固定、型別相同、 陣列元素的下標關係具有上下界的約束且下標有序。
陣列的兩個基本運算:(a)給定一組下標,訪問相應的資料元素。(b)給定一組下標,修改相應的資料元素中某個資料項的值。
陣列的順序儲存:陣列一般不做插入和刪除運算,一旦定義後,結構中資料元素個數和元素的關係不再發生變動,因此 陣列適合採用順序儲存結構。二維陣列的儲存結構可分為以行為主序和以列為主序的兩種方法。
2、矩陣
在一些矩陣中存在很多值相同的元素或者是0元素。為節省儲存空間,可以對這類矩陣進行壓縮儲存,即為多個值相同的元素只分配乙個儲存單元,對0不分配儲存單元。假如值相同的元素或0元素在矩陣中的分布有一定的規律,則稱此類矩陣為特殊矩陣,否則稱為稀疏矩陣。
(1)特殊矩陣
若矩陣中元素(或非0元素)的分布有一定的規律,則成為特殊矩陣。常見特殊矩陣有對稱矩陣、三角矩陣和 對角矩陣等。
(2)稀疏矩陣
在乙個矩陣中,若非0元素的個數遠遠少於0元素的個數,且非0元素的分布沒有規律,則稱為為稀疏矩陣。對於稀疏矩陣,儲存非0元素時必須同時儲存其 位置,所以三元組(i, j, aij)可唯一確定矩陣a中的乙個元素。由此,乙個稀疏矩陣可由表示非0元素的三元組及其行、列數唯一確定。 稀疏矩陣的三元組表的順序儲存結構稱為三元組順序表,常用的三元組表的鏈式 儲存結構是十字鍊錶。
3、廣義表
廣義表是線性表的推廣,是由0個或多個單元素或子表組成的有限序列。
廣義表和線性表的區別在於:線性表的元素都是結構上不可分的單元素,而 廣義表的元素既可以是單元素,也可以是有結構的表。 ls = (a1,a2,……,an) 其中,ai(1 <= i <= n)既可以是單個元素,又可以是廣義表,分別稱為原子和子表。
廣義表的長度是指廣義表中元素的個數。廣義表的深度是指廣義表展開後所含的括號的最大層數。
重要的基本操作:取表頭head(ls)、取表尾tail(ls)。非空廣義表的第乙個元素稱為表頭,除表頭外,其餘元素所構成的表稱為表尾。非空廣義表的表尾必然是乙個表。一對確定的表頭和表尾可唯一確定乙個廣義表。
特點:廣義表可以是多層次的結構、廣義表的元素可以是已經定義的廣義表的名字、 廣義表可以是乙個遞迴的表。
儲存結構:廣義表通常採用鏈式儲存結構。
資料結構複習一
一 名詞術語 資料 描述客觀事物的數字,字元以及一切能夠輸入到計算機中,並且能夠被電腦程式處理的符號的集合。資料元素 資料這個集合中的乙個個的元素,乙個資料元素可以包含乙個或若干個資料項。資料物件 具有相同特性的資料元素的集合。結構 資料元素之間具有的關係。資料結構 就是具有結構的資料元素的集合。二...
資料結構複習(一)
資料結構的物理結構主要分為兩種 1 順序儲存結構 2 鏈式儲存結構 1 順序儲存結構 順序儲存結構 是把資料元素存放在位址連續的儲存單元中,其資料的邏輯關係和物理關係一致,即邏輯上的前驅後繼關係對應儲存結構也是前驅後繼關係 我們在之前的c語言課程中,陣列就是順序儲存結構。2 鏈式儲存結構 指標 鏈式...
資料結構複習(一)
一 單項選擇題 1.資料的四種基本邏輯結構是指。a.鍊錶 陣列 串 圖狀結構 b.線性表 鍊錶 棧佇列 陣列 c.線性結構 鍊錶 樹形結構 圖形結構 d.集合 線性結構 樹形結構 圖狀結構 2 評價演算法的時間複雜性,比較 對數階量級 與 線性階量級 則有。a 對數階量級複雜性大於線性階量級 b 對...