資料結構與演算法總結

2021-06-28 00:09:50 字數 4392 閱讀 8677

本教材共十一章:

第一章為資料結構與演算法概述,為本書學習基礎和預備知識。資料的邏輯結構是對資料之間關係的描述,有時就把邏輯結構簡稱為資料結構。邏輯結構形式地定義為(k,r

)(或(d,

s)),其中,k是

資料元素的有限集,r是k

上的關係的有限集。

邏輯結構有四種基本型別:集合結構、線性結構、樹狀結構和網路結構。表和樹是最常用的兩種高效資料結構,許多高效的演算法能夠用這兩種資料結構來設計實現。表是線性結構的(全序關係),樹(

偏序或層次關係

)和圖(區域性有序

(weak/local order)

)是非線性結構。順序儲存和鏈結儲存是資料的兩種最基本的儲存結構。在順序儲存中,每個

儲存空間含有所存元素本身的資訊,元素之間的邏輯關係是通過陣列下標位置簡單計算出來的線性表的順序儲存,若乙個元素儲存在對應陣列中的下標位置為i

,則它的前驅元素在對應陣列中的下標位置為

i-1,它的後繼元素在對應陣列中的下標位置為

i+1。在

鏈式儲存結構中,儲存結點不僅含有所存元素本身的資訊,而且含有元素之間邏輯關係的資訊。資料的鏈式儲存結構可用鏈結表來表示。其中data

表示值域,用來儲存

節點的數值部分。pl,p2

,…,pill(1n≥1)

均為指標域,每個指標域為其對應的後繼元素或前驅元素所在結點(

以後簡稱為後繼結點或前驅結點

)的儲存位置。通過結點的

指標域(

又稱為鏈域

)可以訪問到對應的後繼結點或前驅結點,若乙個結點中的某個指標域不需要指向其他結點,則令它的值為空(

null

)。在資料的順序儲存中,由於每個元素的儲存位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在資料的鏈結儲存中,由於每個元素的儲存位置儲存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按

指標訪問到,訪問任一元素的時間與該元素結點在鏈式儲存結構中的位置有關。

第二章為順序表及其應用,其中重點一是順序表的概念、資料型別、資料結構、基本演算法和效能分析等;二是順序表的應用,包括查詢問題(簡單順序查詢、二分查詢、分塊查詢)、排序問題(直接插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、歸併排序)、字元處理問題(模式匹配)等。順序表是在計算機記憶體中以陣列的形式儲存的線性表,是指用一組位址連續的儲存單元依次儲存資料元素的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組位址連續的儲存單元中。順序查詢為在乙個已知無(

或有序)序

佇列中找出與給定關鍵字相同的數的具體位置。原理是讓關鍵字與佇列中的數從最後乙個開始逐個比較,直到找出與給定關鍵字相同的數為止,它的缺點是效率低下。二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而 查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表 分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄, 使查詢成功,或直到子表不存在為止,此時查詢不成功。分塊查詢又稱索引順序查詢,它是順序查詢的一種改進方法將n

個資料元素

"按塊有序

"劃分為m塊(

m ≤ 

n)。每一塊中的結點不必有序,但塊與塊之間必須

"按塊有序

";即第

1塊中任一元素的關鍵字都必須小於第

2塊中任一元素的關鍵字;而第

2塊中任一元素的關鍵字又都必須小於第

3塊中的任一元素的關鍵字。

第三章為鍊錶及其應用,主要介紹了單鏈表和迴圈鍊錶。單鏈表是一種鏈式訪問的資料結構,用一組位址任意的

儲存單元存放線性表中的資料元素。鍊錶中的資料是以節點來表示的,每個結點的構成:元素(

資料元素的映象) + 

指標(指示後繼元素儲存位置

),元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。以「結點的序列」表示線性表稱作

線性鍊錶(單鏈表)。單鏈表是鏈式訪問的結構,為找第 i 

個資料元素,必須先找到第 i-1 

個資料元素。因此,查詢第 i 個

資料元素的基本操作為:移動指標,比較 j 和 i

。迴圈鍊錶是另一種形式的鏈式存貯結構。它的特點是表中最後乙個結點的

指標域指向頭結點,整個鍊錶形成乙個環。

第四章為堆疊及其應用,介紹了在兩種不同儲存結構下設計的堆疊,即順序棧和鏈棧。本人學到堆

棧是兩種資料結構。堆疊都是一種資料項按序排列的資料結構,只能在一端(

稱為棧頂

(top))

對資料項進行插入和刪除。

第五章為佇列及其應用,介紹了順序儲存和鏈結儲存方法下的兩種佇列,即順序(迴圈)佇列和鏈佇列的資料結構。佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front

)進行刪除操作,而在表的後端(

rear

)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。在佇列這種

資料結構中,最先插入的元素將是最先被刪除的元素;反之最後插入的元素將是最後被刪除的元素,因此佇列又稱為「先進先出」(fifo

—first in first out

)的線性表。

第六章為特殊矩陣、廣義表及其應用,有陣列、稀疏矩陣和廣義表的基本概念。矩陣中非零元素的個數遠遠小於矩陣元素的總數,並且非零元素的分布沒有規律,則稱該矩陣為稀疏矩陣(sparse matrix);與之相區別的是,如果非零元素的分布存在規律(如上三角矩陣、下三角矩陣、對稱矩陣),則稱該矩陣為

特殊矩陣。這五章為邏輯結構為「線性」的資料結構。

第七章二叉樹及其應用、內容包括二叉樹的建立、遍歷、線索化和表示式求值等演算法。並衍生一些應用問題,包括哈夫曼編碼問題、(平衡)二叉排序樹問題和堆疊序問題。二叉樹是每個結點最多有兩個子樹的有序樹。二叉樹常被用於實現二叉查詢樹和二叉堆。值得注意的是,二叉樹不是樹的特殊情形。在圖論中,二叉樹是乙個連通的無環圖,並且每乙個頂點的度不大於2

。有根二叉樹還要滿足根結點的度不大於

2。有了根結點後,每個頂點定義了唯一的根結點,和最多

2個子結點。然而,沒有足夠的資訊來區分左結點和右結點。在電腦科學中,二叉樹是每個結點最多有兩個子樹的有序樹。通常根的子樹被稱作「左子樹」(

left subtree

)和「右子樹」(

right subtree

)。二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹

(不存在出度大於

2的結點

),二叉樹的子樹有左右 之分,次序不能顛倒。

哈夫曼編碼(huffman coding)

是一種編碼方式,哈夫曼編碼是可變

字長編碼(vlc)

的一種。

huffman

於1952

年提出一種編碼方法,該方法完全依據

字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman

編碼(有時也稱為霍夫曼編碼)。

第八章樹和森林及其應用為邏輯結構為「樹形」的資料結構。樹是由根結點和若干顆子樹構成的。樹是由乙個集合以及在該集合上定義的一種關係構成的。集合中的元素稱為樹的結點,所定義的關係稱為父子關係。父子關係在樹的結點之間建立了乙個層次結構。在這種層次結構中有乙個結點具有特殊的地位,這個結點稱為該樹的根結點,或稱為樹根。

第九章為雜湊佇列及其應用,是雜湊儲存方法下的資料結構。雜湊儲存,又稱hash

儲存,是一種力圖將

資料元素的儲存位置與關鍵碼之間建立確定對應關係的查詢技術。雜湊法儲存的基本思想是:由節點的關鍵碼值決定節點的儲存位址。雜湊技術除了可以用於查詢外,還可以用於儲存。

第十章圖及其應用為邏輯結構為「圖形」的資料結構。內容包括圖的基本演算法以及圖的典型應用問題(最小生成樹、最短路徑、拓撲排序和關鍵路徑)。乙個有 n 

個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 

n 個結點,並且有保持圖連通的最少的邊。最小生成樹可以用

kruskal(克魯斯卡爾)演算法或prim(普里姆)演算法求出。對乙個有向無環圖(directed acyclic graph

簡稱dag)g

進行拓撲排序,是將

g中所有頂點排成乙個線性序列,使得圖中任意一對頂點u和

v,若邊

(u,v)

∈e(g),則u

v之前。通常,這樣的線性序列稱為滿足拓撲次序

(topological order)

的序列,簡稱拓撲序列。簡單的說,由某個集合上的乙個

偏序得到該集合上的乙個全序,這個操作稱之為拓撲排序。

第十一章為演算法效能分析和演算法設計方法,主要對演算法和程式效能分析中的目的、時間複雜性和空間複雜性要素和分析方法、時間複雜度性上(下)限值、演算法效能測量等問題。

資料結構與演算法總結

class solution return void bubblesort vector int arr if flag break void selectsort vector int arr if minpos i swap arr minpos arr i void insertsort ve...

資料結構與演算法 排序演算法總結

排序演算法 1 冒泡 對資料的有序性 敏感,一旦排序完成就會 立刻停止,如果待排序的資料是基本有序的,他的排序效率是非常高的。也是實現最簡單的排序,不易出錯,安全性高。2 插入 在已經有序的資料中,新增新的資料,對這個組資料再進行排序比較適合插入排序。3 選擇 是氣泡排序的變種,不是正統的排序方法,...

資料結構與演算法 排序演算法總結

前言 這是我考研時根據率輝老師的 高分筆記 總結的。名稱 空間複雜度 最好情況下時間複雜度 最差情況下時間複雜度 穩定性直接插入排序 o 1 已經有序,雙層迴圈變為單層,o n o n2 穩定希爾排序 o 1 無o n2 不穩定氣泡排序 o n 已經有序,o n o n2 穩定快速排序 o log2...