資料結構 概述

2021-10-24 18:21:58 字數 2906 閱讀 4905

棧佇列

鍊錶雜湊表堆圖

圖的儲存結構樹小記

資料結構是計算機儲存、組織資料的方式。資料結構是指相互之間存在一種或者是多種特定關係的資料元素集合。一般有邏輯結構、儲存結構:

邏輯結構:反映資料元素之間的邏輯關係,邏輯關係是指資料元素之間前後件之間的關係,與儲存位置是沒有關係的

儲存結構:在計算機空間裡面的儲存方式,一般是順序儲存、鏈式儲存、索引儲存、雜湊儲存等

物理結構:資料邏輯結構在計算機儲存空間的一種存放形式,也可以說是資料結構在計算機中的對映,一種資料結構可以有多種儲存方式

常用的資料結構可以分為四大類:

集合:除了在乙個集合中,沒有什麼關係

線性結構:一對一的關係

樹形結構:一對多的關係

圖形結構:多對多的關係

陣列可以連續儲存多個元素的資料結構,在記憶體中的分配也是連續的,可以通過元素的下標來訪問元素,下標都是從0開始的

按照索引快速查詢元素

按住索引遍歷陣列很方便

陣列大小恆定

只能儲存一種型別的資料結構

新增和刪除操作比較慢

頻繁查詢、對儲存空間要求不大,很少有新增和刪除的情況

在golang語言中,有乙個內建的資料結構切片,可以實現可變陣列長度。

但是在golang語言中,乙個陣列就是乙個資料的實體物件,使用該變數就是使用了該陣列,它是值型別。而對於切片來說確實引用傳遞。

golang 切片

如果陣列的占用的記憶體過多時,此時通過值傳遞給函式,就會消耗很大的記憶體空間,如果傳遞的是指向陣列的指標,如果原指標發生了改變,那麼函式裡面的指標指向也會跟著發生改變。

所以這個時候如果用切片傳遞陣列引數的時候,就會既能處理好節約記憶體的問題,又能很好的達到共享記憶體的問題。

但是也是存在著反例的,切片的底層陣列可能會在堆上分配記憶體,而且小陣列在棧上copy消耗也未必會比make消耗的大。

棧是一種特殊的鍊錶,但是只是對線性表的一端進行操作,棧頂允許操作,棧底不允許操作。棧的特點就是:先進後出,後進先出。

從棧頂進入叫做入棧,取出元素叫做出棧

大都用來實現遞迴操作,比如斐波那契數列

佇列也是線性表的一種,但是從一端加入元素,從另一段取出元素,也就是先進先出。

加入元素,被稱為入列,取出元素為出隊。

多執行緒阻塞佇列中經常使用到

鍊錶是物理儲存單元上非連續的、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶的指標位址來實現,每乙個元素都包含著兩個節點,乙個是儲存元素的資料域,另乙個是指向下乙個節點位址的指標域。根據指標的指向,鍊錶能形成不同的結構,單鏈表、

雙鏈表、迴圈鍊錶等

鍊錶是很常用的一種資料結構,不需要初始化容量,可以任意加減元素

新增或者是刪除元素只需要改變兩個元素結點的指標域指向的位址就可以了

包含大量的指標域。占用的空間比較大

查詢元素的時候需要遍歷鍊錶,非常耗時

資料量比較小、需要頻繁增加和刪除操作的時候

雜湊表也稱為hash表,根據碼和值(key和value)直接進行訪問的資料結構,通過key和value來對映到集合中的乙個位置,這樣就可以快速定位到集合中元素。

特殊的雜湊表

位的對映

應用(快速排序、快速去重、快速查詢)

點陣圖的拓展

當乙個元素被加入集合時,通過k各雜湊函式將這個元素對映成乙個位陣列中的k個點,並將k個點全部置為1

存在誤判(不存在一定不存在,存在不一定存在):和雜湊函式的個數和點陣圖的大小有關

堆是一種比較特殊的資料結構,可以被看作一棵樹的陣列物件,具有以下的性質:

堆中的某個節點的值總是不大於活著不小於其父結點的值

堆是乙個完全二叉樹

插入乙個資料的時候,我們把新插入的資料放在陣列的最後,然後從下往上對話;刪除堆頂資料的時候,我們把陣列中最後乙個元素放在對丁,然後從上往下堆化

根節點最大的堆叫做最大堆或者大根堆,根結點最小的堆叫做最小堆或者是小根堆。常見的堆有二叉堆、斐波那契堆

堆排序資料訪問的方式沒有快速排序友好,跳著訪問的,對cpu不友好

對於同樣的資料,在排序過程中,堆排序演算法的資料交換次數要多於快速排序

優先順序佇列

求topk(靜態資料:維護乙個k的小頂堆,依次比較logk)

求動態資料的中位數

在圖形的結構中,結點之間關係可以是任意的,圖中任意兩個元素之間都可能相關:

有向圖無向圖

表示頂點之間相鄰關係的矩陣

優點:容易實現圖的操作,判斷頂點間是否有邊

缺點:對稀疏圖浪費空間

一種順序分配與鏈式分配相結合的儲存方法,它包括兩部分:一部分是單鏈表,用來存放邊的資訊;另一部分是陣列,主要用來存放頂點本身的資料資訊

優點:空間利用率很高,容易找到頂點的相鄰節點

缺點:判斷兩個頂點間是否有弧,需要搜尋兩個頂點對應的單鏈表

為了解決鄰接表的缺點,查詢入度需要遍歷頂點對應的邊

是有向圖的另一種鏈式儲存的結構,可以看成是將有向圖的鄰接表和逆鄰接表結合起來得到的一種鍊錶。

在十字鍊錶中,每條弧和每個頂點分別對應著乙個結點

無向圖的另一種鏈式儲存的結構,鄰接多重表和十字鍊錶一樣,每條邊和每個頂點分別對應著乙個頂點

深度優先搜尋(dfs)

回溯思想

借助棧來實現

廣度優先搜尋(wfs)

地毯式層層推進

借助佇列來實現

一棵樹是有n個元素組成的有限集合,其中:

每個元素被稱為乙個結點

有乙個特定的節點,成為根結點或者根

除了根結點之外的其餘節點被分成m個互不相交的有限集合,每個子集都是一棵樹,被稱為原樹的子樹

他的每乙個節點可以有零個或者是多個後繼的節點,但有乙個且只有乙個前驅節點(根結點除外),這些資料節點按分支關係組織起來,清晰地反映了資料元素之間的層次關係

一定熟練掌握常用的資料結構和其儲存結構

熟練掌握常用資料結構的常用操作

熟練掌握,可以手撕一些常用的排序演算法和查詢演算法

資料結構概述

1 資料 資料是資訊的的載體,是描述客觀事物的數 字元,以及所有能輸入到計算機中並被電腦程式識別和處理的符號的集合。資料大致可以分為 數值型資料 整數 浮點數 複數 雙精度數等 非數值型資料 字元 字串,以及文字 圖形 影象 語音等資料 2 資料結構 data structure 資料結構有兩個層次...

資料結構概述

還可以通過另乙個方面來看資料結構,那就是從它們的強項和弱項來看。在這裡用 的 方式來概述主要資料結構。下面的表顯示了不同資料結構的優缺點,大致給出它們的特性,就象從天空中鳥瞰地面的風景一樣。所以如果對其中的術語不太清楚的話,請不要太著急。陣列 插入快,如果知道下標 但查詢慢,刪除慢,大小固定 有序陣...

資料結構 概述

資料結構概述 定義 我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構 儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢 某個元素,刪除某個元素,對所有元素進行排序 而執行的相應操作,這 個相應的操作也叫演算法。資料結構 個體 個體的關係 演算法 對儲存資料的操作 演...