陣列是可以再記憶體中連續儲存多個元素的結構,在記憶體中的分配也是連續的,陣列中的元素通過陣列下標進行訪問。
優點:1、按照索引查詢元素速度快
2、按照索引遍歷陣列方便
缺點:1、陣列的大小固定後就無法擴容了
2、陣列只能儲存一種型別的資料
頻繁查詢,對儲存空間要求不大,很少增加和刪除的情況。
先進後出,或者說是後進先出,從棧頂放入元素的操作叫入棧,取出元素叫出棧。
棧常應用於實現遞迴功能方面的場景,例如斐波那契數列
佇列與棧一樣,也是一種線性表。
佇列在一端新增元素,在另一端取出元素,也就是:先進先出
因為佇列先進先出的特點,在多執行緒阻塞佇列管理中非常適用。
鍊錶是物理儲存單元上非連續的、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶的指標位址實現,每個元素包含兩個結點,乙個是儲存元素的資料域 (記憶體空間),另乙個是指向下乙個結點位址的指標域。
鍊錶能形成不同的結構,例如單鏈表,雙向鍊錶,迴圈鍊錶等。
優點:
鍊錶是很常用的一種資料結構,不需要初始化容量,可以任意加減元素;
新增或者刪除元素時只需要改變前後兩個元素結點的指標域指向位址即可,所以新增,刪除很快;
缺點: 因為含有大量的指標域,占用空間較大;
查詢元素需要遍歷鍊錶來查詢,非常耗時。
樹是一種資料結構,它是由n(n>=1)個有限節點組成乙個具有層次關係的集合。把它叫做 「樹」 是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。
○ 每個節點有零個或多個子節點;
○ 沒有父節點的節點稱為根節點;
○ 每乙個非根節點有且只有乙個父節點;
○ 除了根節點外,每個子節點可以分為多個不相交的子樹;
1、每個結點最多有兩顆子樹,結點的度最大為2。
2、左子樹和右子樹是有順序的,次序不能顛倒。
3、即使某結點只有乙個子樹,也要區分左右子樹。
二叉樹是一種比較有用的折中方案,它新增,刪除元素都很快,並且在查詢方面也有很多的演算法優化,所以,二叉樹既有鍊錶的好處,也有陣列的好處,是兩者的優化方案,在處理大批量的動態資料方面非常有用。
雜湊表,也叫雜湊表,是根據關鍵碼和值 (key和value) 直接進行訪問的資料結構,通過key和value來對映到集合中的乙個位置,這樣就可以很快找到集合中的對應元素。
記錄的儲存位置=f(key)
這裡的對應關係 f 成為雜湊函式,又稱為雜湊 (hash函式),而雜湊表就是把key通過乙個固定的演算法函式既所謂的雜湊函式轉換成乙個整型數字,然後就將該數字對陣列長度進行取餘,取餘結果就當作陣列的下標,將value儲存在以該數字為下標的陣列空間裡,這種儲存空間可以充分利用陣列的查詢優勢來查詢元素,所以查詢的速度很快。很多時候需要用到一種陣列鍊錶來做,也就是拉鍊法。
1. 直接定址法:取關鍵字或關鍵字的某個線性函式值為雜湊位址。即h(key)=key或h(key) = a·key + b,其中a和b為常數(這種雜湊函式叫做自身函式)。若其中h(key)中已經有值了,就往下乙個找,直到h(key)中沒有值了,就放進去。這種雜湊函式計算簡單,並且不可能有衝突產生,當關鍵字連續時,可用直接定址法;否則關鍵字的不連續將造成記憶體單元的大量浪費。
2. 數字分析法:分析一組資料,比如一組員工的出生年月日,這時我們發現出生年月日的前幾位數字大體相同,這樣的話,出現衝突的機率就會很大,但是我們發現年月日的後幾位表示月份和具體日期的數字差別很大,如果用後面的數字來構成雜湊位址,則衝突的機率會明顯降低。因此數字分析法就是找出數字的規律,盡可能利用這些資料來構造衝突機率較低的雜湊位址。
3. 平方取中法:當無法確定關鍵字中哪幾位分布較均勻時,可以先求出關鍵字的平方值,然後按需要取平方值的中間幾位作為雜湊位址。這是因為:平方後中間幾位和關鍵字中每一位都相關,故不同關鍵字會以較高的概率產生不同的雜湊位址。
堆是一種比較特殊的資料結構,可以被看做一棵樹的陣列物件。將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。常見的堆有二叉堆、斐波那契堆等。因為堆有序的特點,一般用來做陣列中的排序,稱為堆排序。
堆中某個節點的值總是不大於或不小於其父節點的值;
堆總是一棵完全二叉樹
圖是由結點的有窮集合v和邊的集合e組成。其中,為了與樹形結構加以區別,在圖結構中常常將結點稱為頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關係。
圖是一種比較複雜的資料結構,在儲存資料上有著比較複雜和高效的演算法,分別有鄰接矩陣 、鄰接表、十字鍊錶、鄰接多重表、邊集陣列等儲存結構。
○ 深度優先遍歷方法(dfs):從圖中某個初始定點出發,首先訪問初始點,然後選擇乙個與頂點相鄰且沒有被訪問的頂點w為初始頂點,在繼續從頂點w出發進行深度優先遍歷,直到所有人頂點被訪問。顯然該遍歷過程是乙個遞迴過程。(一次訪問乙個點)
○ 廣度優先遍歷方法(bfs):首先訪問初始點v,接著訪問頂點v的所有未被訪問過的所有鄰接點v1,v2,v3,,,vt,訪問每乙個頂點的所有未被訪問過的鄰接點,依次類推。(一次訪問所有鄰接點)
資料結構彙總
棧 stack 佇列 queue 鍊錶佇列 樹 tree 圖 graph 集合 set 鍵值對 map 參考書籍 在接下來的日子裡會不定期整理一些資料結構的資訊。在這裡彙總。持續更新中 陣列是將資料連續儲存於記憶體的物理資料結構 陣列是將資料不連續儲存於記憶體的物理資料結構 迴圈鍊錶就是首尾相接的鍊...
資料結構彙總
乙個100行的 除錯都可能會讓程式設計師遇到很多挫折,所以,面對挫折,我們永遠不能低頭。以下是我在自學資料結構這門課程的簡單 筆記,記錄的很是匆忙,等空閒下來再做深入的標準注釋補充 get技能 1 掌握常見的資料結構code 2 c語言標頭檔案和原始檔的編寫 3 掌握 編寫規範 未來計畫 1 重構測...
JS常用資料結構型別的特徵彙總
一 陣列資料型別 var arr 1 2,3 4,5 6 特徵 1.陣列無名有值 2.可根據下標記錄對應資料,通過順序進行記錄 3.如果需要找到某個資料,必須遍歷整個陣列 4.陣列為緊密結構,導致插入 刪除 新增元素時間長 5.陣列的元素是可以重複,元素沒有唯一性 6.陣列有關聯關係,可以根據自身前...