資料結構與演算法(重要知識總結)

2021-10-03 07:10:54 字數 3259 閱讀 6807

1、資料結構

邏輯結構:資料物件中資料元素之間的相互關係。

物理結構:資料的邏輯結構在計算機中的儲存形式。

四大邏輯結構:整合結構、線性結構、樹形結構、圖形結構。

2、演算法效率

演算法採用的策略、方案;

編譯產生的**質量;

問題的輸入模組;

機器執行命令的速度;

1、鍊錶

單鏈表,只有乙個存放指標的模組,存放位址可以不連續,訪問是方便訪問當前節點的後繼節點;

雙鏈表,乙個資料元素單元有兩個存放指標的模組,乙個指標指向前繼節點,乙個指標指向後繼節點。

鍊錶中因為頭結點也會有所不同,可以迴圈鍊錶或者其他,主要注意鍊錶中指標的操作,屬於細節問題且必須掌握,不贅述。

2、棧、佇列

棧:先進後出。

佇列:先進先出。

1、基礎知識

樹:是n個節點的有限集。

二叉樹:除葉子結點外,每個節點的子節點數最多為2,空樹也是二叉樹。

滿二叉樹:非葉子節點的子結點數都為2,。

完全二叉樹:葉子結點只能出現最下兩層,可以非葉子結點可以只有左結點,但不可以有只有右結點。

二叉樹性質:

在二叉樹的第i層至多有2^i-1個結點。

深度為k的二叉樹至多有2^k-1個結點。

對於任何乙個二叉樹,葉子結點數為n0,度為2的結點數為n2,則n0=n2+1

具有n個結點的完全二叉樹的深度為log2n+1(向下取整)。

2、樹的遍歷

前序遍歷:先訪問根節點,再訪問左結點,最後訪問右結點。

中序遍歷:先訪問左結點,再訪問根節點,最後訪問右結點。

後序遍歷:先訪問左節點,再訪問右結點,最後訪問根節點。

層序遍歷:一層一層的訪問樹的結點。

備註:構建樹**編寫時常常使用遞迴(其他有關樹操作也是)。

3、線索二叉樹

線索二叉樹中存放乙個結點時分為五塊,從左至右分別為:lchild,ltag,data,rtag,rchild。(構造時以中序遍歷基礎)

ltag為0時,lchild指向該結點的左孩子;為1時,lchild指向該結點的前驅;

rtag為0時,rchild指向該結點的右孩子;為1時,rchild指向該結點的後繼;

4、二叉樹、樹、森林

樹轉二叉樹:①在樹中所有的兄弟之間加一條連線;②對每乙個結點,除了保留與其左孩子(長子)的連線外,去掉該結點與其他孩子的連線。

森林轉二叉樹:①先將森林的每棵樹變為二叉樹;②再將各個二叉樹的根節點視為兄弟似的從左至右的連在一起(第乙個樹轉為二叉樹的右子樹)。

二叉樹轉樹:①若結點x是其雙親y的結點,則把x的右孩子,右孩子的右孩子,,,,都與y連在一起;②去掉所有雙親到右孩子的連線。

備註:樹的前序遍歷對應樹的二叉樹的前序的遍歷,後序遍歷對應二叉樹的中序遍歷。

1、基礎知識

圖(graph)是由頂點的有窮非空集合和頂點之間的邊的集合組成,通常為g(v,e)其中g表示乙個圖,v是圖g中頂點的集合,e是圖中邊的集合。

頂點:為圖中資料元素。

無向邊:頂點之間的邊沒有方向。

有向邊:頂點之間的邊有方向(出度:為指向其他頂點的邊數,入度:為指向本頂點的邊數)。

無向完全圖:在無向圖中,如果任意兩個頂點之間都存在邊,則稱改圖為無向圖,含有n個頂點的無向圖有n*(n-1)/2條邊。

有向完全圖:如果任意兩個頂點之間都存在方向互為相反的兩條弧,則稱該圖為有向圖。

g1(v1,e1),g2(v2,e2),若v2包含於v1,e2包含於e1,則g2為g1的子圖。

備註:每條帶有權重的圖就叫網

2、圖的儲存

領接矩陣:適合稠密圖

用兩個陣列表示圖,頂點放在一位陣列,邊放在二維陣列。無向圖為對稱矩陣,有向圖則不是。

鄰接表:適合稀疏圖

頂點用一維陣列儲存,圖中每個頂點vi的所有領接點構成乙個線性表。

備註:其他儲存方式有十字鍊錶(適合有向圖),領接多重表(方便刪除)。

3、 圖的遍歷

深度優先遍歷:在沒有碰到重複頂點的情況下,分叉路口始終是向右手邊走,每路過乙個頂點就做乙個記號。

廣度優先遍歷:以某個頂點開始先訪問其所有連線頂點。

4、拓展知識

最小生成樹(圖中沒有環路)

普里姆(prim)演算法:每次頂點連線權值最小邊,若乙個頂點與多個頂點連線,考慮選擇權值最小的邊。適合稠密圖。

克魯斯卡爾演算法:將圖中邊按照權值從小到大排列,然後從最小的邊開始,如果該邊併入不構成迴路的話,則將該邊併入當前生成樹,直到所有的邊都檢測完為止。適合稀疏圖。

最短路徑

網圖:邊上權值之和最少的路徑。

非網圖:兩點之間經過邊數最少的路徑。

迪傑斯特拉演算法:一步步求出乙個頂點到所以頂點之間的最短路徑。o(n^2)

佛洛依德演算法:求出所有頂點到所有頂點的最短路徑。o(n^3)

拓撲排序

無環圖dag(無環有向圖)

aow 網不存在迴路

拓撲序列:設g(v,e)是乙個具有n個結點的有向圖,v中所有頂點序列滿足若從頂點vi-vj有一條路徑,則在頂點序列中vi必在vj之前。稱這樣的頂點序列為乙個拓撲序列。

拓撲排序:對乙個有向圖構造拓撲序列的過程。

關鍵路徑

aoe帶權有向圖,頂點為事件,邊權值表示活動持續時間。

關鍵路徑:事件完成時間最長的路徑。

1、普通查詢方法

順序查詢、插值查詢、斐波那契查詢(**比例查詢)、線性索引查詢(稠密查詢、分塊查詢、倒排查詢)。

重點二叉排序樹:左子樹上的值均小於它的根結點值,右子樹上的值均大於根結點的值。

平衡二叉樹:具有二叉排序樹性質的同時,任意子樹的左右子樹的層數差值最多為1。

2、其他查詢方法

b樹:多路查詢樹的每個結點都具有兩個孩子或多個孩子,所有葉子結點都在同一層次。

注意:插入需拆解應從小往上拆,先插入上一層,再在下一層**。

平衡多路查詢樹

1、把結點最大的孩子數目稱為b樹的階;

2、根結點不是葉節點時,至少有兩個子樹;

3、非根結點的分支結點都有k-1個元素,k-1個孩子,k大於等於m+1向下取整,小於等於m;

雜湊表(hash表)

在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f(key),儲存在一塊連續的儲存空間。

f:hash函式,經典構造方法:除留餘數法。

解決衝突

開放定址法:f(key)=f(key)+di,修改di值;

再hash法:再一次使用hash函式;

鏈位址法:陣列存放位址,鍊錶存放在此位址的關鍵字。

公共溢位法:開闢新的**存放溢位的關鍵字。

資料結構重要排序演算法總結

排序思想 將待排序的記錄ri 插入到已排好序的記錄表r1,r2,ri 1中,得到乙個新的 記錄數增加1的有序表。直到所有的記錄都插入完為止。設待排序的記錄順序存放在陣列r 1 n 中,在排 序的某一時刻,將記錄序列分成兩部分 r 1 i 1 已排好序的有序部分 r 1 n 未排好序的無序部分。顯然,...

資料結構與演算法知識總結(二)

下面對常見的資料結構和常用演算法知識進行總結。我們知道資料結構研究物件可以分為邏輯資料結構和儲存 物理 資料結構兩種。但對資料結構進行分類,資料結構可分為很多種,如按照資料的邏輯結構對其進行簡單的分類,可以分為線性結構和非線性結構,而且還可以對這兩種結構進行細分,那就是平時所說的常見的人八大資料結構...

資料結構與演算法 知識總結二

一 堆疊的特點 後進先出。堆疊是一種特殊的線性表。簡稱為棧,是限定只能在表的一端進行插入和刪除操作的線性表。允許插入和刪除的一端為 棧頂 另一端為 棧底 將元素插入棧頂的稱為 入棧 進棧或壓棧 刪除棧頂元素的為 出棧 棧的兩種儲存結構 1 順序棧 採用順序結構儲存 2 鏈棧 採用鏈式結構儲存 堆疊的...