資料結構:
資料結構是計算機儲存, 組織資料的一種方式,是指一種或多種特定關係的資料元素的集合。
集合:
資料結構間除了 同屬於乙個集合 的相互屬性之外 , 別無其他關係。
線性結構:
資料結構中元素存在一對一的相互關係。
樹形結構:
資料結構中元素存在一對多的相互關係。
圖形結構:
資料結中的元素存在多對多的相互關係。
常用的資料結構:
陣列,棧,佇列,鍊錶,樹,圖,堆,雜湊表。
陣列:
陣列是在記憶體中開闢一塊連續的儲存空間,並在此空間存放元素,像是一節火車, 有10個車廂,從01到10 有固定的編號,通過編號可以快速找到這節車廂。
陣列的特點:
元素型別固定,長度固定,通過腳標查詢,所以查詢快,增刪慢。
棧 :
線性結構。順序進出,只有乙個出口,按進出順序進行出入
如果要刪除某個元素,只能從出口端,乙個乙個的順序刪除,同理,增加也是 。只能通過入口端順序的新增進去, 其底層就是linkedlist去實現的。
鍊錶:
鍊錶是一種物理儲存單元上不連續,無順序的儲存結構。資料元素的邏輯順序是根據鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點組成,結點在執行時動態的生成的。
鍊錶大致可分為:單鏈表,雙鏈表和有序鍊錶。
可以這樣理解: 鍊錶中的位址,是通過別的結點中獲取的, 比如a結點,有b結點的位址,b 結點有c 結點的位址,要想找c 結點的位址,就尋找b來獲取c 的位址,那麼abc 的關係就構成乙個鍊錶。
單鏈表:
就是a 有且只有b 的位址,b 有且只有c 的位址,這樣的型別。
雙鏈表:
就是a 有b 的位址,還有d 的位址。有兩個元素的位址。
迴圈鍊錶:
就是a 有b 的位址, b 有c 的位址,c 有a 的位址, 這樣構成乙個迴圈。
有序鍊錶:
以某種順序給鍊錶的元素排序,比如按照內容大小,雜湊值等等。
相比於陣列來說:
鍊錶好處: 鍊錶不需要確定大小,儲存空間也不需要是連續的。
二叉樹:
在電腦科學中,二叉樹是每個結點最多有兩個子樹的樹結構。頂上的叫根節點。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆
遍歷是對樹的最基本的運算,所謂遍歷二叉樹,就是按照一定的規則和屬性走便二叉樹的所有節點,使每乙個節點都被訪問一次,而且只被訪問一次。由於二叉樹是非線性結構,所以,樹的遍歷實際上是將二叉樹的各個結點轉換為乙個線性序列來表示。
二叉樹的遍歷分為四種 : 分別是 前序遍歷,中序遍歷,後序遍歷,按層遍歷。
按上圖說示為例:
前序遍歷:根-->左-->右 1-->2--4--5--3--6--7
中序遍歷:左-->根-->右 4-->2--5--1--6--3--7
後序遍歷:左-->右-->根 4-->2--5--6--7--3--1
按層遍歷:從上到下,從左到右(1-->2-->3-->4-->5-->6-->7)
二叉樹和樹的區別:
二叉樹,顧名思義就是有每個節點有且最多只有兩個分支。可以有乙個分支,但是樹 則沒有,樹的節點可以有不確定多個分支。
二叉樹的節點有左右之分,樹的節點沒有左右之分。
雜湊表(雜湊表):
雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。
給定表m,存在函式f(key),對任意給定的關鍵字值key,代入函式後若能得到包含該關鍵字的記錄在表中的位址,則稱表m為雜湊(hash)表,函式f(key)為雜湊(hash) 函式。
記錄的儲存位置=f(關鍵字)
這裡的對應關係f稱為雜湊函式,又稱為雜湊(hash函式),採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊表或雜湊表(hash table)。
雜湊表hashtable(key,value) 就是把key通過乙個固定的演算法函式既所謂的雜湊函式轉換成乙個整型數字,然後就將該數字對陣列長度進行取餘,取餘結果就當作陣列的下標,將value儲存在以該數字為下標的陣列空間裡。(或者:把任意長度的輸入(又叫做預對映, pre-image),通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,而不可能從雜湊值來唯一的確定輸入值。簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式。)
而當使用雜湊表進行查詢的時候,就是再次使用雜湊函式將key轉換為對應的陣列下標,並定位到該空間獲取value,如此一來,就可以充分利用到陣列的定位效能進行資料定位。
陣列的特點是:定址容易,插入和刪除困難;
而鍊錶的特點是:定址困難,插入和刪除容易。
那麼我們能不能綜合兩者的特性,做出一種定址容易,插入刪除也容易的資料結構?答案是肯定的,這就是我們提起的雜湊表。
po 一下 看到的大佬總結的
hash的應用
1、hash主要用於資訊保安領域中加密演算法,它把一些不同長度的資訊轉化成雜亂的128位的編碼,這些編碼值叫做hash值. 也可以說,hash就是找到一種資料內容和資料存放位址之間的對映關係。
2、查詢:雜湊表,又稱為雜湊,是一種更加快捷的查詢技術。我們之前的查詢,都是這樣一種思路:集合中拿出來乙個元素,看看是否與我們要找的相等,如果不等,縮小範圍,繼續查詢。而雜湊表是完全另外一種思路:當我知道key值以後,我就可以直接計算出這個元素在集合中的位置,根本不需要一次又一次的查詢!
舉乙個例子,假如我的陣列a中,第i個元素裡面裝的key就是i,那麼數字3肯定是在第3個位置,數字10肯定是在第10個位置。雜湊表就是利用利用這種基本的思想,建立乙個從key到位置的函式,然後進行直接計算查詢。
3、hash表在海量資料處理中有著廣泛應用。
hash table的查詢速度非常的快,幾乎是o(1)的時間複雜度。
hash就是找到一種資料內容和資料存放位址之間的對映關係。
雜湊法:元素特徵轉變為陣列下標的方法。
我想大家都在想乙個很嚴重的問題:「如果兩個字串在雜湊表中對應的位置相同怎麼辦?」,畢竟乙個陣列容量是有限的,這種可能性很大。解決該問題的方法很多,我首先想到的就是用「鍊錶」。我遇到的很多演算法都可以轉化成鍊錶來解決,只要在雜湊表的每個入口掛乙個鍊錶,儲存所有對應的字串就ok了。
雜湊表的查詢步驟
當儲存記錄時,通過雜湊函式計算出記錄的雜湊位址
當查詢記錄時,我們通過同樣的是雜湊函式計算記錄的雜湊位址,並按此雜湊位址訪問該記錄
關鍵字——雜湊函式(雜湊函式)——雜湊位址
優點:一對一的查詢效率很高;
好的雜湊函式=計算簡單+分布均勻(計算得到的雜湊位址分布均勻)
雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。
優缺點優點:不論雜湊表中有多少資料,查詢、插入、刪除(有時包括刪除)只需要接近常量的時間即0(1)的時間級。實際上,這只需要幾條機器指令。
雜湊表運算得非常快,在電腦程式中,如果需要在一秒種內查詢上千條記錄通常使用雜湊表(例如拼寫檢查器)雜湊表的速度明顯比樹快,樹的操作通常需要o(n)的時間級。雜湊表不僅速度快,程式設計實現也相對容易。
如果不需要有序遍歷資料,並且可以提前**資料量的大小。那麼雜湊表在速度和易用性方面是無與倫比的。
缺點:它是基於陣列的,陣列建立後難於擴充套件,某些雜湊表被基本填滿時,效能下降得非常嚴重,所以程式設計師必須要清楚表中將要儲存多少資料(或者準備好定期地把資料轉移到更大的雜湊表中,這是個費時的過程)。
常用資料結構
文章參考 資料結構 c語言版 嚴蔚敏 線性表 有頭有尾,中間節點有前驅有後繼 定義 一組連續的儲存單元依次儲存線性表的資料元素。定長順序表 typedef struct sqlist psqlist 不定長順序表 typedef struct dsqlist dsqlist,pdsqlist 單鏈表...
常用資料結構
function delete array element arr,pos for i pos 1 i length 1 i array pop arr return arr pos 3 echo 除第位置上的元素後 echo implode delete array element arr,pos...
常用資料結構
基本資料結構 邏輯 集合,線性結構,樹形結構,圖形結構 基本資料結構 物理 順序,鏈式,索引,雜湊。陣列,棧,鍊錶,圖,雜湊表,對列,樹,堆 陣列 在記憶體中連續儲存多個元素的結構,在記憶體中的分配是連續,通過陣列下標運算元組元素 建立陣列 int a int a new int 3 int a n...