下面對常見的資料結構和常用演算法知識進行總結。
我們知道資料結構研究物件可以分為邏輯資料結構和儲存(物理)資料結構兩種。但對資料結構進行分類,資料結構可分為很多種,如按照資料的邏輯結構對其進行簡單的分類,可以分為線性結構和非線性結構,而且還可以對這兩種結構進行細分,那就是平時所說的常見的人八大資料結構。
一、常見的資料結構:
(1)陣列(array)
陣列是一種聚合資料型別,它將具有相同型別的若干個變數有序地組織在一起的集合。陣列可以說是最基本的資料結構,在各種程式語言中都有對應。乙個陣列可以分解為多個陣列元素,按照資料元素的型別,陣列可以分為整型陣列、字元型陣列、浮點型陣列、指標陣列以及結構陣列等。陣列還可以有一維、二維以及多維等表現形式。
(2)棧(stack)
棧是堆疊的簡稱,是一種特殊的線性表,它限定只能在乙個表的乙個固定端進行資料節點的插入與刪除操作。在表中,允許插入和刪除的一端稱作「棧頂」,另一端稱作「棧底」。通常將元素插入棧頂的操作稱為「入棧」(進棧或壓棧),稱刪除棧頂的操作為「出棧」。棧按照後進先出的原則來儲存資料,簡單點來講就是,後面來的資料反而能最先走,所以我們說它是「蠻不講理的堆疊」。(出入棧如圖)
棧的基本運算:
(1)stackinit()初始化堆疊
(2)stackempty(s)判斷棧s是否為空
(3)stacklength(s)求堆疊s的長度
(4)gettop(s)獲取棧頂元素的值
(5)push(s,e)將元素e進棧
(6)pop(s),出棧(刪除棧頂元素)
棧的儲存結構:(兩種儲存結構)
(1)順序棧——採用順序結構儲存
(2)鏈棧——採用鏈式結構儲存
(3)佇列(queue)
佇列簡稱為隊,是一種特殊的線性表。佇列是限定只能在表的一端插入運算,而在另一端進行刪除操作。其特點為「先進先出」。在表中,允許進行插入操作的一端稱為隊尾,允許進行刪除操作的一端稱作隊首(隊頭)。通常將元素插入隊尾的操作稱作入佇列(或入隊),稱刪除隊首元素的操作為出佇列(或出隊)。佇列中沒有元素時,稱為空隊。(出入隊如下圖)
佇列的儲存結構:(兩種結構)
(1)順序結構——採用順序結構儲存
(2)鏈式結構——採用鏈式結構儲存
(4)鍊錶(linked list)
鍊錶是一種資料元素按照鏈式儲存結構進行儲存的資料結構,這種儲存結構具有在物理上存在非連續的特點。也就是說鍊錶不是位址連續的空間,它的插入和刪除不需要移動元素,它看到記憶體有空餘位址就可以毫無顧忌地擠進去,所以我們叫它「調皮的鍊錶」。鍊錶由一系列資料節點構成,每個資料節點包括資料域和指標域兩部分。指標域儲存了資料結構中下乙個元素存放的位址。鍊錶結構中資料元素的邏輯順序是通過鍊錶中的指標連線次序來實現的。鍊錶分為雙鏈表和單鏈表,單鏈表中構成表的節點只有乙個指向直接後繼結點的指標域。其結構特點:邏輯上相鄰的資料元素在物理上不一定相鄰。
(5)樹(tree)
樹是典型的非線性結構,它是由n(n≥0)個節點組成的有限集合t。如果n=0,稱為空樹;如果n>0,則滿足。有乙個特定的稱之為根(root)的節點,它只有直接後繼,但沒有直接前驅;除根以外的其它節點劃分為m(m>0)個互不相交的有限集合t1,t2,…,tm,每個集合又是一棵樹,並且稱之為根的子樹(subtree)。每棵子樹的根節點有且僅有乙個直接前驅,但可以有0個或多個直接後繼。
樹的基本術語:
節點(node):包含乙個資料元素及若干個指向其子樹的分支
節點的度(degree):節點的子樹的個數
樹的度(degree):樹中節點度的最大值
葉子(leaf):度為零的節點
分支(branch):度不為零的節點
孩子(child):某節點的各子樹的根
雙親(parent):該節點的直接前驅節點
兄弟(sibling):具有相同雙親的節點
有序樹和無序樹:如果樹中每個節點的各個子樹是從左到右有次序
森林:m(m>=0)根互不相交的樹的有限集合
樹的深度:樹中所有節點的最大層數,也稱
高度(height)
(6)圖(graph)
圖結構是一種比樹型結構更複雜的非線性資料結構,任意乙個節點都可以有任意多個前驅和後繼。在圖結構中,資料節點一般稱為頂點,而邊是頂點的有序偶對。如果兩個頂點之間存在一條邊,那麼就表示這兩個頂點具有相鄰關係。
圖的基本術語:1.鄰接點、相關邊 2.頂點的度、入度和出度 3.完全圖、稠密圖、稀疏圖 4.子圖 5.路徑 6.連通圖、連通分量 7.強連通圖、強連通分量 8.權、網 9.有向圖、無向圖
(7)堆(heap)
堆是一種特殊的樹型資料結構,一般討論的堆是二叉堆。堆的特點是根節點的值是所有節點中最小或者最大的,並且根節點的兩個子樹也是一樣的。
(8)雜湊表(hash)
雜湊表(雜湊表)源自於
雜湊函式
(hash function)
,其思想是如果在結構中存在關鍵字和t相等的記錄,那麼必定在f(t)的儲存位置可以找到該記錄,這樣就可以不用進行比較操作而直接取得所查記錄。
二、資料結構常用演算法
資料結構研究的內容:就是如何按一定的邏輯結構,把資料組織起來,並選擇適當的儲存表示方法把邏輯結構組織好的資料儲存到計算機的儲存器裡。演算法研究的目的是為了更有效的處理資料,提高資料運算效率。資料的運算是定義在資料的邏輯結構上,但運算的具體實現要在儲存結構上進行。一般有以下幾種常用運算:
(1)檢索:檢索就是在資料結構裡查詢滿足一定條件的節點。一般是給定乙個某字段的值,找具有該字段值的節點。
(2)插入:往資料結構中增加新的節點。
(3)刪除:把指定的結點從資料結構中去掉。
(4)更新:改變指定節點的乙個或多個欄位的值。
(5)排序:把節點按某種指定的順序重新排列。例如遞增或遞減。
資料結構與演算法 知識總結二
一 堆疊的特點 後進先出。堆疊是一種特殊的線性表。簡稱為棧,是限定只能在表的一端進行插入和刪除操作的線性表。允許插入和刪除的一端為 棧頂 另一端為 棧底 將元素插入棧頂的稱為 入棧 進棧或壓棧 刪除棧頂元素的為 出棧 棧的兩種儲存結構 1 順序棧 採用順序結構儲存 2 鏈棧 採用鏈式結構儲存 堆疊的...
資料結構與演算法(重要知識總結)
1 資料結構 邏輯結構 資料物件中資料元素之間的相互關係。物理結構 資料的邏輯結構在計算機中的儲存形式。四大邏輯結構 整合結構 線性結構 樹形結構 圖形結構。2 演算法效率 演算法採用的策略 方案 編譯產生的 質量 問題的輸入模組 機器執行命令的速度 1 鍊錶 單鏈表,只有乙個存放指標的模組,存放位...
演算法與資料結構知識點總結
演算法與資料結構 1.資料結構 資料 資料元素 資料物件 資料結構 資料型別 抽象資料型別 dat 2.演算法 有窮性 確定性 可行性 輸入 0個或多個 輸出 1個或者多個輸出 3.排序演算法 氣泡排序 每次找出最大值,然後放到所在範圍的最後一位 是一種簡單的易於理解的排序演算法,但是效率很低,由於...