資料結構(初級)

choubou發表於2021-09-09

資料結構是以某種形式將資料組織在一起的集合,它不僅儲存資料,還支援訪問和處理資料的操作。演算法是為求解一個問題需要遵循的、被清楚指定的簡單指令的集合。下面會簡單的介紹一些資料結構和演算法,歡迎糾錯。

一、資料結構

1、雜湊表(Hash table)

Hash表也稱雜湊表,也有直接譯作雜湊表,Hash表是一種特殊的資料結構,它同陣列、連結串列以及二叉排序樹等相比較有很明顯的區別,它能夠快速定位到想要查詢的記錄,而不是與表中存在的記錄的關鍵字進行比較來進行查詢。
這個源於Hash表設計的特殊性,它採用了函式對映的思想將記錄的儲存位置與記錄的關鍵字關聯起來,從而能夠很快速地進行查詢。
也就是說,雜湊表的結構就是以鍵-值(key-value)這樣一種對映來儲存資料,這樣當我們需要查詢時只要輸入key,就可以查詢到相對應的值。

這是對於簡單的鍵的情況。當我們處理更加複雜的型別的鍵的時候就會涉及到處理多個鍵被雜湊到同一個索引值的情況,也就是我們要學習如何處理雜湊碰撞衝突,由於還沒深入學習,這裡就先不涉獵了。

2、佇列(Queue)

  • 先進先出

  • 在隊尾插入元素,在隊首刪除元素

就像排隊一樣,在佇列中先進來排隊的人也就是隊首的先出去,而新來的人想要排隊也只能從隊尾開始。

var q = []  //空隊// 進隊q.push('檸萌')1q.push('曹玫')2q.push('項焦')3// 出隊q.shift()'檸萌'q.shift()'曹玫'q.shift()'項焦'

3、棧(Stack)

  • 先進後出

  • 限定僅在表尾進行插入和刪除操作

我們把允許插入和刪除的一端成為棧頂,另一端稱為棧底,不含任何資料元素的棧稱為空棧

就像盜夢空間,我們依次進入第一層夢,第二層夢,第三層夢,退出時也只能先退出第三層夢,再退出第二層,第一層。

var stack = []// 進棧stack.push('第一層夢')1stack.push('第二層夢')2stack.push('第三層夢')3// 出棧stack.pop()"第三層夢"stack.pop()"第二層夢"stack.pop()"第一層夢"

4、連結串列(Linked list)

  • 連結串列是物理儲存單元上非連續的、非順序的儲存結構,資料元素的邏輯順序是透過連結串列的指標地址實現,有一系列結點(地址)組成,結點可動態的生成。

  • 結點包括兩個部分:一、儲存資料元素的資料域(記憶體空間),二、儲存指向下一個結點地址的指標域。

  • 實現資料元素的儲存按一定順序儲存,允許在任意位置插入和刪除結點。

  • c/c++/jave都可以實現

圖片描述

image

5、樹(tree)

是由n(n>=1)個有限節點組成一個具有層次關係的集合。

特點:

  • 每個節點有零個或多個子節點;

  • 沒有父節點的節點稱為節點;

  • 每一個非根節點有且只有一個父節點

  • 除了根節點外,每個子節點可以分為多個不相交的子樹。

二叉樹:滿足每個節點最多兩個叉(Binary tree)

滿二叉樹:葉子全滿

每一層上節點數都是最大節點數

圖片描述

image

滿足i層,最多節點2^i, 所有層節點數即2^(i-1) - 1

完全二叉樹:除了最後一層,其餘層葉子均滿,最後一層或滿或右邊缺少連續若干節點。

圖片描述

image



作者:飢人谷_陳楊
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4548/viewspace-2817753/,如需轉載,請註明出處,否則將追究法律責任。

相關文章