資料結構小知識點整理
1 緒論
《資料結構主要是研究資料結構的邏輯結構、儲存結構以及定義在該結構上的操作及操作實現三個方面的內容。》
1.1 基本概念和常用術語
資料:資料是描敘客觀事物的數值、字元以及能輸入機器且能被處理的各種字元的集合,
u 即計算化的資訊。
資料元素:資料元素也稱為結點,它是組成資料的基本單位,是一個數據整體中相對獨立的單元。
欄位:欄位是構成資料的最小單位。
資料物件:在資料結構中,將性質相同的資料元素的集合稱為資料物件,它是資料的一個子 集。
資料結構:由某一資料元素集合及該集合中所有資料元素之間的關係組成。具體來說,資料結構包含3個方面的內容,即資料的邏輯結構、資料的儲存結構和對數所施加的操作。
根據資料結構中元素之間的結構關係的不同特徵,通常將資料結構分為如下四種基本結構:
(1)、集合結構(set)::資料元素的有限結合。
u (2)、線性結構或者稱為序列::資料元素的有序結合。
u (3)、樹形結構(tree)::樹的層次結構,樹中資料元素之間存在一對多的關係。
u (4)、圖形結構:::圖中資料元素之間的關係是多對多。
1.2 邏輯結構
《結點和結點之間的邏輯關係稱為資料的邏輯結構。》
(1)、線性結構。元素之間為一對一的線性關係,第一個元素無直接前驅,最後一個元素無直接後繼,其餘元素都有一個直接前驅和直接後繼。
(2)、非線性結構。元素之間為一對多或多對多的非線性關係,元素可有多個直接前驅或多個直接後繼。
(3)、集合結構。元素之間無任何關係,元素的排序無任何順序。
1.3 儲存結構
《資料的邏輯結構是獨立於計算機的,它與資料在計算中的儲存無關,要對資料進行處理,
就必須將資料儲存在計算機中。資料在計算機中的儲存方式稱為 資料的儲存結構。資料的
儲存結構主要有4種。》
2 樹《一對多》
《樹形結構是計算機演算法中最重要的非線性資料結構,其中以樹和二叉樹最為常用,它可以很好地描述具有分支關係和層次特性的物件,同時也是具有層次關係的資料在計算機中的表示提供了一種自然的表示方法。》
2.1 樹的基本概念
樹(Tree)是由n(n>=0)個結點組成的有限集合。n=0的樹稱為空樹;n>0的樹即為任意一顆非空樹。
2.1.1 樹的邏輯表示方法
(1)、直接表示法
(2)、巢狀集合表示法
(3)、凹入表示法<似文件目錄>
(4)、廣義表表示法
2.1.2 樹的基本術語
(1)、結點的度(degree)-----------指結點中所擁有的子樹的個數。
(2)、樹的度--------------是指樹中各結點的度的最大值。《結點的度的最大值》
(3)、結點的層次(level)---在樹中根節點的層次為1,其餘任一結點的層次等於其雙親結點的層次加1.
(4)、樹的深度(depth)------樹中結點的最大層次稱為樹的深度,又稱高度。
2.2 二叉樹的概念和性質
2.2.1 定義
二叉樹(binary tree)是指樹的度最大為2的有序樹。它是一種最簡單、最重要的樹,在
計算機領域有著廣泛的應用。
2.2.2 二叉樹的性質
性質1:在一棵非空的二叉樹的第i層上,最多有2^i-1次方個結點(i>=0)。
性質2:一棵深度為K的二叉樹,最多具有2^K-1個結點(K>=1)。
性質3:對任意一棵非空二叉樹,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1。
滿二叉樹:一棵深度為K且含有2^k-1個結點的二叉樹稱為滿二叉樹。
完全二叉樹:一個深度為k,有n個結點的二叉樹,對樹中的結點按從上至下、從左到右的順序編號,如果編號為i(1<=i<=n)的結點與滿二叉樹中編號為i的結點在二叉樹中位置相同,則稱此二叉樹為完全二叉樹。
性質4:具有n個結點的完全二叉樹的深度為|log2N|+1.
性質5:如果對一棵有n個結點的完全二叉樹(其深度為|log2N|+1)的結點按層次編號(從第一層到第|log2N|+1層,每層從左到),則對任一結點i(1<=i<=n),有如下性質:
(1)
3 圖《多對多》
3.1 圖的定義
圖(graph)是由非空的頂點集合和一個描述頂點之間的關係-----邊(或者弧)的有限集
合組成的一種資料結構。
3.2 圖的相關術語
| 無向圖:沒有方向。
| 有向圖:有方向,射線。
| 無向完全圖:有n*(n-1)/2條邊的圖<n為頂點數>。
| 有向完全圖:有n*(n-1)條邊的圖<n為頂點數>。
| 稀疏圖和稠密圖:由頂點引發邊的多少來判斷。
| 頂點的度,《入度,出度相對於有向圖來說》:無向圖頂點的度----引發的線段數
有向圖頂點的度<TD>----=入度<ID>+出度<OD>
| 權和網:權值,邊或者弧帶有權值的圖形成為網。
| 路徑和路徑長度:路徑----由頂點和相鄰頂點偶對構成的邊所形成的序列
路徑長度------連線頂點的軌跡的權值相加。
| 迴路:從頂點回到頂點形成的閉合環形。
| 子圖:圖的部分。
| 連通圖和連通分量:《連通圖》:每頂點都能與其餘頂點相連想成的圖。《連通分量》:把不是連通圖拆分成多個子連通圖。
| 強連通圖和強連通分量:《強連通圖》---有向圖,雙向連線的連通圖 《強連通分量》:把不是強連通圖拆分成多個子強連通圖。
| 生成樹:它必包含且僅包含G的n-1條邊。《多一條:形成了迴路;少一條:非連通》
| 生成森林。
3.3 圖的儲存結構
3.3.1 鄰接矩陣儲存結構
形式:A[i][j][email protected]: 1------代表兩頂點存在邊
[email protected]:0----代表兩頂點不存在邊
1:無向連線矩陣圖
特點:對稱分佈
頂點的度:行中非零點的個數。
2:有向連線矩陣圖
特點:一般不是對稱分佈,僅當它為完全有向圖時對稱。
非零點的個數:行中非零點的個數代表出度。
列中非零點的個數代表入度
3:無向連線矩陣網
帶權圖,矩陣中的1用權值替換,0用無窮值替換。
4:有向連線矩陣網
帶權圖,矩陣中的1用權值替換,0用無窮值替換。
3.3.2 鄰接表儲存結構
《相對於稀疏圖來說,是為了節約儲存空間,引入了指標》
1:無向圖鄰接表
《將每一頂點連線的線段轉換為一個單鏈表。》
頂點的度為:分得的段數.<節點數>
矩陣大小:n^2
2:有向圖鄰接表
《將每一頂點連線的線段轉換為一個單鏈表。只關心出度。》
如果要關心入度則引入:有向圖逆鄰接表
3: 延伸
《延伸:對於一個具有n個頂點和e條邊的無向圖,若採取鄰接表表示,則表頭向量的大小為:n, ;所有鄰接表中的結點總數是:2e》
4.4 棧和佇列
1:棧的定義《先進後出》------是限定只能在表的一端進行插入和刪除操作的線性表。(棧頂<允許插入和刪除的一端>,棧底<不允許插入和刪除的一端>)。
《分為:順序棧和鏈棧》。
2:***順序棧,的定義,初始化,入棧,出棧,取棧頂元素操作,判斷空操作,置棧空操作。
3:多<雙>棧共享(鄰接空間)
4:鏈棧<涉及到指標>:棧也可以採用鏈式的儲存結構表示,這種結構的棧簡稱為鏈棧。
鏈棧的操作---《@1:分配節點空間
@2:資料域
@3:指標域
@3:頂指標節點指向》
5:佇列---《先進先出,對其操作時:隊尾插入,對頭刪除。》:是一種限定性的線性表,它只允許在表的一端插入元素,而在表的另一端刪除資料。
《佇列分為:順序佇列和鏈佇列》
6:順序佇列:佇列的順序儲存結構稱為順序佇列,順序佇列實際上是運算受限的順序表,和順序表一樣,順序佇列也必須用一個向量空間來存放當前佇列中的元素。
由於佇列的對頭和隊尾的位置是變化的,因而要設定兩個指標front和rear,分別用於指示對頭元素和隊尾元素在向量空間的位置。
(特殊說明:指標front和rear初始化均應設定為0;在非空佇列裡,頭指標始終指向對頭元素,而為指標始終指向隊尾元素的下一個位置)
為了防止“假溢位現象”引入-------迴圈佇列。
------迴圈佇列(在front==rear的情況下)是為空還是佇列已滿:兩種方法--:
《
方法一:犧牲儲存空間。判斷佇列“滿”的條件為(rear+1)MAXSIZE=front。
方法二:設定一個標誌變數的方法。(標誌tag=0表示最後的一次操作是出隊,tag=1表示最後的一次操作是入隊)---判斷隊空的條件為:front==rear && tag==0
判斷隊滿的條件為:front==rear && tag==1。
》
7:鏈佇列--佇列的鏈式儲存結構簡稱為鏈佇列,它是限制僅在表頭刪除和表尾插入的單鏈表。顯然僅有單鏈表的頭指標不便於在表尾做插入操作,
為此再新增一個為指標,指向連結串列上的最後一個節點。於是,一個鏈佇列由一個頭指標和一個尾指標唯一確定。