常見的8中資料結構

2022-02-06 04:48:01 字數 2756 閱讀 3735

1976 年,乙個瑞士計算機科學家寫一本書《algorithms + data structures = programs》。即:演算法 + 資料結構 = 程式。40 多年過去了,這個等式依然成立。

很多**面試題都要求候選者深入理解資料結構,不管你來自大學計算機專業還是程式設計培訓機構,也不管你有多少年程式設計經驗。有時面試題會直接提到資料結構,比如「給我實現乙個二叉樹」,然而有時則不那麼明顯,比如「統計一下每個作者寫的書的數量」。

資料結構是計算機儲存、組織資料的方式。對於特定的資料結構(比如陣列),有些操作效率很高(讀某個陣列元素),有些操作的效率很低(刪除某個陣列元素)。程式設計師的目標是為當前的問題選擇最優的資料結構。

為什麼我們需要資料結構?

資料是程式的核心要素,因此資料結構的價值不言而喻。無論你在寫什麼程式,你都需要與資料打交道,比如員工工資、****、雜貨清單或者**本。在不同場景下,資料需要以特定的方式儲存,我們有不同的資料結構可以滿足我們的需求。陣列棧

佇列鍊錶圖樹

字首樹雜湊表

陣列(array)大概是最簡單,也是最常用的資料結構了。其他資料結構,比如棧和佇列都是由陣列衍生出來的。

下圖展示了 1 個陣列,它有 4 個元素:

每乙個陣列元素的位置由數字編號,稱為下標或者索引(index)。大多數程式語言的陣列第乙個元素的下標是 0。

根據維度區分,有 2 種不同的陣列:

陣列的基本操作

常見陣列**面試題撤回,即 ctrl+z,是我們最常見的操作之一,大多數應用都會支援這個功能。你知道它是怎麼實現的嗎?答案是這樣的:把之前的應用狀態(限制個數)儲存到記憶體中,最近的狀態放到第乙個。這時,我們需要棧(stack)來實現這個功能。

棧中的元素採用 lifo (last in first out),即後進先出。

下圖的棧有 3 個元素,3 在最上面,因此它會被第乙個移除:

棧的基本操作

常見的棧**面試題佇列(queue)與棧類似,都是採用線性結構儲存資料。它們的區別在於,棧採用 lifo 方式,而佇列採用先進先出,即fifo(first in first out)。

下圖展示了乙個佇列,1 是最上面的元素,它會被第乙個移除:

佇列的基本操作

常見的佇列**面試題鍊錶(linked list)也是線性結構,它與陣列看起來非常像,但是它們的記憶體分配方式、內部結構和插入刪除操作方式都不一樣。

鍊錶是一系列節點組成的鏈,每乙個節點儲存了資料以及指向下乙個節點的指標。煉表頭指標指向第乙個節點,如果鍊錶為空,則頭指標為空或者為 null。

鍊錶可以用來實現檔案系統、雜湊表和鄰接表。

下圖展示了乙個鍊錶,它有 3 個節點:

鍊錶分為 2 種:

鍊錶的基本操作

常見的佇列**面試題圖(graph)由多個節點(vertex)構成,節點之間闊以互相連線組成乙個網路。(x, y)表示一條邊(edge),它表示節點 x 與 y 相連。邊可能會有權值(weight/cost)。

圖分為兩種:

在程式語言中,圖有可能有以下兩種形式表示:

遍歷圖有兩周演算法

常見的圖**面試題樹(tree)是乙個分層的資料結構,由節點和連線節點的邊組成。樹是一種特殊的圖,它與圖最大的區別是沒有迴圈。

樹被廣泛應用在人工智慧和一些複雜演算法中,用來提供高效的儲存結構。

樹有很多分類:

其中,二叉樹和二叉查詢樹是最常用的樹。

常見的樹**面試題字首樹(prefix trees 或者 trie)與樹類似,用於處理字串相關的問題時非常高效。它可以實現快速檢索,常用於字典中的單詞查詢,搜尋引擎的自動補全甚至 ip 路由。

下圖展示了「top」, 「thus」和「their」三個單詞在字首樹中如何儲存的:

單詞是按照字母從上往下儲存,「p」, 「s」和「r」節點分別表示「top」, 「thus」和「their」的單詞結尾。

常見的樹**面試題雜湊(hash)將某個物件變換為唯一識別符號,該識別符號通常用乙個短的隨機字母和數字組成的字串來代表。雜湊可以用來實現各種資料結構,其中最常用的就是雜湊表(hash table)。

雜湊表通常由陣列實現。

雜湊表的效能取決於 3 個指標:

下圖展示了有陣列實現的雜湊表,陣列的下標即為雜湊值,由雜湊函式計算,作為雜湊表的鍵(key),而陣列中儲存的資料即為值(value):

常見的雜湊表**面試題

常見的8種資料結構

1976 年,乙個瑞士計算機科學家寫一本書 algorithms data structures programs 即 演算法 資料結構 程式。40 多年過去了,這個等式依然成立。很多 面試題都要求候選者深入理解資料結構,不管你來自大學計算機專業還是程式設計培訓機構,也不管你有多少年程式設計經驗。有...

常見的資料結構

棧 stack,又稱堆疊,它是運算受限的線性表,其限制是僅允許在表的一端進行插入和刪除操作,不允許在其他任何位置進行新增 查詢 刪除等操作。採用該結構的集合,對元素的訪問有如下的特點 1.先進後出。2.棧的入口 出口的都是棧的頂端位置。壓棧 就是存元素。即,把元素儲存到棧的頂端位置,棧中已有元素依次...

常見的資料結構

資料儲存的常用結構有 棧 佇列 陣列 鍊錶和紅黑樹。我們分別來了解一下 棧 stack,又稱堆疊,它是運算受限的線性表,其限制是僅允許在標的一端進行插入和刪除操作,不允許在其他任何位置進行新增 查詢 刪除等操作。簡單的說 採用該結構的集合,對元素的訪問有如下的特點 佇列 queue,簡稱隊,它同堆疊...