自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)據(jù)結構是噩夢?想要通過面試,你應該掌握它

大數(shù)據(jù) 數(shù)據(jù)分析
想要通過編程面試,必須求解算法,這就離不開數(shù)據(jù)結構。別害怕,一旦了解了數(shù)據(jù)結構,就會發(fā)現(xiàn)它們其實沒有看上去那么難了。本文將會簡化和總結這些最基本的數(shù)據(jù)結構,幫你搞定數(shù)據(jù)結構。

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)

就當是一場夢,醒了還是很悲痛,還是難以忘記被數(shù)據(jù)結構折磨的慘痛。當你打開一本數(shù)據(jù)結構和算法的教科書時,里面總是充滿復雜的數(shù)學,令人望而生畏。對于那些不太喜歡這門學科的人來說,這就是一場噩夢。

然而現(xiàn)實是,想要通過編程面試,必須求解算法,這就離不開數(shù)據(jù)結構。別害怕,一旦了解了數(shù)據(jù)結構,就會發(fā)現(xiàn)它們其實沒有看上去那么難了。

本文將會簡化和總結這些最基本的數(shù)據(jù)結構,幫你搞定數(shù)據(jù)結構。

[[323231]]

什么是數(shù)據(jù)結構?

數(shù)據(jù)結構是一種在計算機中組織數(shù)據(jù)以便高效使用的特殊方式:

“在計算機科學中,數(shù)據(jù)結構是一種數(shù)據(jù)組織、管理和存儲的格式,其允許高效地訪問和修改。更準確地說,數(shù)據(jù)結構是數(shù)據(jù)值,數(shù)據(jù)值之間的關系,以及可應用于數(shù)據(jù)的函數(shù)或操作的集合。”

我們必須將數(shù)據(jù)存儲到某種數(shù)據(jù)結構中,選擇正確的數(shù)據(jù)結構至關重要。

值得注意的是,數(shù)據(jù)結構沒有好壞之分,每種數(shù)據(jù)結構都有其優(yōu)缺點。有很多方法可以用來衡量一種數(shù)據(jù)結構,這些也被稱為大O符號,這是衡量操作可伸縮性的一個指標。

現(xiàn)在來討論一下不同類型的數(shù)據(jù)結構。

鏈表

鏈表的單位被稱為“節(jié)點”,一個節(jié)點包含一個值和一個指針(Pointer)。值只是一個數(shù)字,如12,而指針將該值鏈接到鏈中的下一個節(jié)點。這就是鏈表的連接部分,鏈表中的第一個節(jié)點被稱為頭,最后一個沒有指針的節(jié)點被稱為尾。

數(shù)據(jù)結構是噩夢?想要通過面試,你必須掌握它
  • 優(yōu)點:添加刪除節(jié)點很方便,只需要更改指針指向的地址即可。
  • 缺點:不擅長檢索節(jié)點,盡管有索引或搜索功能。因為每個節(jié)點只知道相鄰節(jié)點的信息。

散列表(哈希表)

哈希映射或哈希表,也是一種關鍵的數(shù)據(jù)結構。它類似于JavaScript中的對象和Python中的字典,在這種類型的數(shù)據(jù)結構中,用戶為散列表提供一個單詞或者鍵,它將檢索定義或值。

其工作原理很像一個數(shù)組,該鍵通過名為“散列函數(shù)(哈希函數(shù))”的函數(shù)運行,該函數(shù)會找出鍵對應的內存地址。

不同之處在于,這些位置在內存中不需要相鄰,而是可以在任意位置。因此,大小的增加不會存在問題。

但是,存在一個不同問題——根據(jù)使用的散列函數(shù),兩個鍵可能會指向同一個內存地址。這就是所謂的“沖突”,有很多種辦法可以解決這個問題,但是這一切都隱藏在函數(shù)內。

數(shù)據(jù)結構是噩夢?想要通過面試,你必須掌握它
  • 優(yōu)點:正如已提及的,散列函數(shù)(哈希函數(shù))非常適合添加和讀取。
  • 缺點:可能會導致鍵值沖突。

棧和隊列

這兩種結構彼此非常相似,都是在數(shù)組的基礎上構建了一些附加功能。

棧是后進先出的數(shù)據(jù)結構。這類似于堆疊在一起的托盤,頂部的托盤在放入時是最后一個,在取出時是第一個。

將一個元素添加到棧頂稱為入棧,而從棧頂取出一個元素稱為出棧。每種語言都通過稱為調用堆棧的方式跟蹤已調用的函數(shù)。棧對于稱為深度優(yōu)先搜索(DFS)的算法非常重要。

 

數(shù)據(jù)結構是噩夢?想要通過面試,你必須掌握它

 

另一方面,隊列是一種先進先出的結構,就像公共汽車站的排隊,最后一個排隊的人最后上車。在末尾添加元素的操作稱為入隊,從隊首刪除元素稱為出隊。隊列被用于稱為廣度優(yōu)先搜索(BFS)的重要算法中。

數(shù)據(jù)結構是噩夢?想要通過面試,你必須掌握它
  • 優(yōu)點:兩種結構在添加和刪除元素時都非常有效。
  • 缺點:與其他的數(shù)據(jù)結構相比,它們的用例數(shù)量有限。

數(shù)組

數(shù)組在所有的編程語言中都很常見,它是計算機內存中連續(xù)的單元塊。

下面的示例表示了一個具有12個元素的整數(shù)數(shù)組。數(shù)組的索引從0開始,因此包含12個元素的數(shù)組具有從0到11的索引。

 

數(shù)據(jù)結構是噩夢?想要通過面試,你必須掌握它

 

 

圖源:BeginnersBook

 

  • 優(yōu)點:數(shù)組擅于檢索項,但前提是數(shù)組較小。
  • 缺點:隨著數(shù)組規(guī)模不斷增大,會占用內存中的其他項來運行。因此,數(shù)組的添加操作效率很低,因為可能需要將數(shù)組移動到內存中的一個新位置以適應其長度。

幸運的是,這種情況出現(xiàn)在高級語言中,比如JavaScript和Python。若在底層語言中,必須要事先聲明數(shù)組的大小。

圖和樹

計算機語言中有一個專門的部分叫做“圖論”,圖類似于鏈表有著指向其它節(jié)點的節(jié)點,只是這些指針被稱為“邊”,邊可以有權重或者被賦予編號。

有一種特殊的層圖稱為“樹”,其中的數(shù)據(jù)向一個方向拓展。它們可以用于指代很多事物,例如“家譜”,或者用于表示網(wǎng)絡。與數(shù)組、鏈表、棧和隊列這樣的線性數(shù)據(jù)結構不同,樹是分層數(shù)據(jù)結構。

數(shù)據(jù)結構是噩夢?想要通過面試,你必須掌握它
  • 優(yōu)點:樹提供了高效的插入和搜索能力,而且樹的數(shù)據(jù)格式非常靈活,允許以最小的工作量來移動子樹。
  • 缺點:缺點在于,修改列表和檢索的時間長度為O(log n)。

入門算法求解離不開這些數(shù)據(jù)結構,關鍵在于不要畏難。搏一搏,噩夢變美夢。祝你早日掌數(shù)據(jù)結構。

 

責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2023-09-06 13:16:00

數(shù)據(jù)庫數(shù)據(jù)

2025-04-03 09:56:40

Python算法開發(fā)

2019-06-21 15:20:05

Redis數(shù)據(jù)結構數(shù)據(jù)庫

2021-01-04 10:04:23

SQL數(shù)據(jù)庫開發(fā)

2019-05-08 09:43:00

Elasticsear LuceneJava

2022-11-04 08:29:05

索引數(shù)據(jù)庫JSON

2021-10-29 11:27:52

鏈表數(shù)據(jù)結構算法

2020-08-11 17:14:31

數(shù)據(jù)庫SQL技術

2013-12-13 15:42:32

Lua腳本語言

2017-12-19 15:20:47

代碼應用架構

2012-10-10 10:30:18

數(shù)據(jù)結構

2012-10-09 10:09:19

數(shù)據(jù)結構

2012-10-08 14:52:56

數(shù)據(jù)結構

2012-10-08 15:59:38

數(shù)據(jù)結構

2012-10-10 10:13:22

數(shù)據(jù)結構

2012-10-18 10:40:46

數(shù)據(jù)結構

2011-03-31 15:41:51

Cacti數(shù)據(jù)表結構

2023-10-31 08:51:25

數(shù)據(jù)結構存儲數(shù)據(jù)

2012-04-28 14:21:47

Java數(shù)據(jù)結構線性結構

2021-02-07 22:24:59

Redis數(shù)據(jù)存儲
點贊
收藏

51CTO技術棧公眾號