在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

編程面試之前你應該知曉的八大數據結構

算法與數據結構 ? 來源:未知 ? 作者:李倩 ? 2018-08-30 11:55 ? 次閱讀

瑞士計算機科學家Niklaus Wirth在1976年寫了一本書,名為《算法+數據結構=編程》。

40多年后,這個等式仍被奉為真理。這就是為什么在面試過程中,需要考察軟件工程師對數據結構的理解。

幾乎所有的問題都需要面試者對數據結構有深刻的理解。無論你是初入職場的新兵(剛從大學或者編程培訓班畢業),還是擁有幾十年經驗的職場老鳥。

有些面試題會明確提及某種數據結構,例如,“給定一個二叉樹。”而另一些則隱含在面試題中,例如,“我們希望記錄每個作者相關的書籍數量?!?/p>

即便是對于一些非常基礎的工作來說,學習數據結構也是必須的。那么,就讓我們先從一些基本概念開始入手。

什么是數據結構?

簡單地說,數據結構是以某種特定的布局方式存儲數據的容器。這種“布局方式”決定了數據結構對于某些操作是高效的,而對于其他操作則是低效的。首先我們需要理解各種數據結構,才能在處理實際問題時選取最合適的數據結構。

為什么我們需要數據結構?

數據是計算機科學當中最關鍵的實體,而數據結構則可以將數據以某種組織形式存儲,因此,數據結構的價值不言而喻。

無論你以何種方式解決何種問題,你都需要處理數據——無論是涉及員工薪水、股票價格、購物清單,還是只是簡單的電話簿問題。

數據需要根據不同的場景,按照特定的格式進行存儲。有很多數據結構能夠滿足以不同格式存儲數據的需求。

常見的數據結構

首先列出一些最常見的數據結構,我們將逐一說明:

數組

隊列

鏈表

字典樹(這是一種高效的樹形結構,但值得單獨說明)

散列表(哈希表)

數組

數組是最簡單、也是使用最廣泛的數據結構。棧、隊列等其他數據結構均由數組演變而來。下圖是一個包含元素(1,2,3和4)的簡單數組,數組長度為4。

每個數據元素都關聯一個正數值,我們稱之為索引,它表明數組中每個元素所在的位置。大部分語言將初始索引定義為零。

以下是數組的兩種類型:

一維數組(如上所示)

多維數組(數組的數組)

數組的基本操作

Insert——在指定索引位置插入一個元素

Get——返回指定索引位置的元素

Delete——刪除指定索引位置的元素

Size——得到數組所有元素的數量

面試中關于數組的常見問題

尋找數組中第二小的元素

找到數組中第一個不重復出現的整數

合并兩個有序數組

重新排列數組中的正值和負值

著名的撤銷操作幾乎遍布任意一個應用。但你有沒有思考過它是如何工作的呢?這個問題的解決思路是按照將最后的狀態排列在先的順序,在內存中存儲歷史工作狀態(當然,它會受限于一定的數量)。這沒辦法用數組實現。但有了棧,這就變得非常方便了。

可以把棧想象成一列垂直堆放的書。為了拿到中間的書,你需要移除放置在這上面的所有書。這就是LIFO(后進先出)的工作原理

下圖是包含三個數據元素(1,2和3)的棧,其中頂部的3將被最先移除:

棧的基本操作

Push——在頂部插入一個元素

Pop——返回并移除棧頂元素

isEmpty——如果棧為空,則返回true

Top——返回頂部元素,但并不移除它

面試中關于棧的常見問題

使用棧計算后綴表達式

對棧的元素進行排序

判斷表達式是否括號平衡

隊列

與棧相似,隊列是另一種順序存儲元素的線性數據結構。棧與隊列的最大差別在于棧是LIFO(后進先出),而隊列是FIFO,即先進先出。

一個完美的隊列現實例子:售票亭排隊隊伍。如果有新人加入,他需要到隊尾去排隊,而非隊首——排在前面的人會先拿到票,然后離開隊伍。

下圖是包含四個元素(1,2,3和4)的隊列,其中在頂部的1將被最先移除:

移除先入隊的元素、插入新元素

隊列的基本操作

Enqueue()?——?在隊列尾部插入元素

Dequeue()?——移除隊列頭部的元素

isEmpty()——如果隊列為空,則返回true

Top()?——返回隊列的第一個元素

面試中關于隊列的常見問題

使用隊列表示棧

對隊列的前k個元素倒序

使用隊列生成從1到n的二進制數

鏈表

鏈表是另一個重要的線性數據結構,乍一看可能有點像數組,但在內存分配、內部結構以及數據插入和刪除的基本操作方面均有所不同。

鏈表就像一個節點鏈,其中每個節點包含著數據和指向后續節點的指針。 鏈表還包含一個頭指針,它指向鏈表的第一個元素,但當列表為空時,它指向null或無具體內容。

鏈表一般用于實現文件系統、哈希表和鄰接表。

這是鏈表內部結構的展示:

鏈表包括以下類型:

單鏈表(單向)

雙向鏈表(雙向)

鏈表的基本操作:

InsertAtEnd - 在鏈表的末尾插入指定元素

InsertAtHead - 在鏈接列表的開頭/頭部插入指定元素

Delete? - 從鏈接列表中刪除指定元素

DeleteAtHead - 刪除鏈接列表的第一個元素

Search? - 從鏈表中返回指定元素

isEmpty - 如果鏈表為空,則返回true

面試中關于鏈表的常見問題

反轉鏈表

檢測鏈表中的循環

返回鏈表倒數第N個節點

刪除鏈表中的重復項

圖是一組以網絡形式相互連接的節點。節點也稱為頂點。 一對節點(x,y)稱為邊(edge),表示頂點x連接到頂點y。邊可以包含權重/成本,顯示從頂點x到y所需的成本。

圖的類型

無向圖

有向圖

在程序語言中,圖可以用兩種形式表示:

鄰接矩陣

鄰接表

常見圖遍歷算法

廣度優先搜索

深度優先搜索

面試中關于圖的常見問題

實現廣度和深度優先搜索

檢查圖是否為樹

計算圖的邊數

找到兩個頂點之間的最短路徑

樹形結構是一種層級式的數據結構,由頂點(節點)和連接它們的邊組成。 樹類似于圖,但區分樹和圖的重要特征是樹中不存在環路。

樹形結構被廣泛應用于人工智能和復雜算法,它可以提供解決問題的有效存儲機制。

這是一個簡單樹的示意圖,以及樹數據結構中使用的基本術語:

Root - 根節點

Parent - 父節點

Child - 子節點

Leaf - 葉子節點

Sibling - 兄弟節點

以下是樹形結構的主要類型:

N元樹

平衡樹

二叉樹

二叉搜索樹

AVL樹

紅黑樹

2-3樹

其中,二叉樹和二叉搜索樹是最常用的樹。

面試中關于樹結構的常見問題:

求二叉樹的高度

在二叉搜索樹中查找第k個最大值

查找與根節點距離k的節點

在二叉樹中查找給定節點的祖先節點

字典樹(Trie)

字典樹,也稱為“前綴樹”,是一種特殊的樹狀數據結構,對于解決字符串相關問題非常有效。它能夠提供快速檢索,主要用于搜索字典中的單詞,在搜索引擎中自動提供建議,甚至被用于IP的路由。

以下是在字典樹中存儲三個單詞“top”,“so”和“their”的例子:

這些單詞以頂部到底部的方式存儲,其中綠色節點“p”,“s”和“r”分別表示“top”,“thus”和“theirs”的底部。

面試中關于字典樹的常見問題

計算字典樹中的總單詞數

打印存儲在字典樹中的所有單詞

使用字典樹對數組的元素進行排序

使用字典樹從字典中形成單詞

構建T9字典(字典樹+ DFS )

哈希表

哈希法(Hashing)是一個用于唯一標識對象并將每個對象存儲在一些預先計算的唯一索引(稱為“鍵(key)”)中的過程。因此,對象以鍵值對的形式存儲,這些鍵值對的集合被稱為“字典”??梢允褂面I搜索每個對象?;诠7ㄓ泻芏嗖煌臄祿Y構,但最常用的數據結構是哈希表。

哈希表通常使用數組實現。

散列數據結構的性能取決于以下三個因素:

哈希函數

哈希表的大小

碰撞處理方法

下圖為如何在數組中映射哈希鍵值對的說明。該數組的索引是通過哈希函數計算的。

面試中關于哈希結構的常見問題:

在數組中查找對稱鍵值對

追蹤遍歷的完整路徑

查找數組是否是另一個數組的子集

檢查給定的數組是否不相交

以上是在編程面試之前你應該知曉的八大數據結構。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40628
  • 存儲數據
    +關注

    關注

    0

    文章

    89

    瀏覽量

    14291

原文標題:應對程序員面試,你必須知道的八大數據結構

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    大話數據結構pdf下載

    大話數據結構是一本很值得初學者看的編程書籍,用簡單的語言然人深刻的理解數據結構,強烈程序員推薦下載收藏,下面是部分內容預覽: 完整的pdf格式電子書下載: 《大話數據結構》.pdf
    發表于 07-04 00:33

    收藏 | 程序員面試必須知道的8大數據結構

    哈希結構的常見問題:在數組中查找對稱鍵值對追蹤遍歷的完整路徑查找數組是否是另一個數組的子集檢查給定的數組是否不相交以上是在編程面試之前
    發表于 09-30 09:35

    數據結構的幾個重要知識點

    。如果從事編程的工作,不管你現在是不是需要用到數據結構的相關知識,在工作的過程中理解、掌握好數據結構,對現在的工作和以后的發展都是有幫助的。
    發表于 02-27 15:01

    常見的數據結構

    順序表結構的底層實現借助的就是數組,因此對于初學者來說,可以把順序表完全等價為數組,但實則不是這樣。數據結構是研究數據存儲方式的一門學科,它囊括的都是各種存儲結構,而數組只是各種
    發表于 05-10 07:58

    C語言與數據結構

    目錄個人介紹筆試單選題C語言數據結構計算機與操作系統網絡通信填空題C語言與數據結構網絡通信問答題嵌入式基礎知識C語言與數據結構C編程一面二面功能快捷鍵合理的創建標題,有助于目錄的生成如
    發表于 08-06 07:10

    數據結構教程,下載

    1. 數據結構的基本概念 2. 算法與數據結構3. C語言的數據類型及其算法描述要點4. 學習算法與數據結構的意義與方法
    發表于 05-14 17:22 ?0次下載
    <b class='flag-5'>數據結構</b>教程,下載

    數據結構在游戲編寫中的應用

    在游戲的編寫中,不可避免的出現很多應用數據結構的地方,有些簡單的游戲,只是由幾個 數據結構 的組合,所以說,數據結構在游戲編程中扮演著很重要的角色。 本文主要講述
    發表于 07-25 16:26 ?0次下載

    數據結構是什么_數據結構有什么用

    數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高
    發表于 11-17 14:45 ?1.6w次閱讀
    <b class='flag-5'>數據結構</b>是什么_<b class='flag-5'>數據結構</b>有什么用

    數據結構常見的八大排序算法

    本文總結了數據結構常見的八大排序算法。詳細分析請看下文
    發表于 02-05 15:26 ?1888次閱讀
    <b class='flag-5'>數據結構</b>常見的<b class='flag-5'>八大</b>排序算法

    什么是數據結構?為什么要學習數據結構數據結構的應用實例分析

    本文檔的主要內容詳細介紹的是什么是數據結構?為什么要學習數據結構?數據結構的應用實例分析包括了:數據結構在串口通信當中的應用,數據結構在按鍵
    發表于 09-26 15:45 ?14次下載
    什么是<b class='flag-5'>數據結構</b>?為什么要學習<b class='flag-5'>數據結構</b>?<b class='flag-5'>數據結構</b>的應用實例分析

    java常見數據結構面試

    Java面試過程中,經常會被問到數據結構和算法相關的知識。對于工作多年的程序員來說,這些理論的知識可能已經忘得差不多了吧,所以面試前還是有必要臨時抱抱佛腳的。
    的頭像 發表于 08-15 16:09 ?1w次閱讀
    java常見<b class='flag-5'>數據結構</b><b class='flag-5'>面試</b>

    數據結構的存儲方式及基本操作

    首先,這里講的都是普通的數據結構和算法,咱不是搞競賽的,野路子出生,只解決常規的問題,以面試為最終目標。另外,以下是我個人的經驗的總結,沒有哪本算法書會寫這些東西,所以請讀者試著理解我的角度,別糾結于細節問題,因為這篇文章就是對數據結構
    的頭像 發表于 04-19 10:47 ?1639次閱讀
    <b class='flag-5'>數據結構</b>的存儲方式及基本操作

    數據結構解決滑動窗口問題

    前文用 [單調棧解決三道算法問題]介紹了單調棧這種特殊數據結構,本文寫一個類似的數據結構「單調隊列」。 也許這種數據結構的名字沒聽過,其實沒啥難的,就是一個「隊列」,只是使用了一點
    的頭像 發表于 04-19 10:50 ?894次閱讀
    <b class='flag-5'>數據結構</b>解決滑動窗口問題

    epoll的基礎數據結構

    一、epoll的基礎數據結構 在開始研究源代碼之前,我們先看一下 epoll 中使用的數據結構,分別是 eventpoll、epitem 和 eppoll_entry。 1、eventpoll 我們
    的頭像 發表于 11-10 10:20 ?1078次閱讀
    epoll的基礎<b class='flag-5'>數據結構</b>

    探索編程世界的七大數據結構

    結構就像是一顆倒掛的小樹,有根、有枝、有葉。它是一種非線性的數據結構,以層級的方式存儲數據,頂部是根節點,底部是葉節點。
    的頭像 發表于 04-16 12:04 ?614次閱讀
    主站蜘蛛池模板: 色偷偷91久久综合噜噜噜噜 | 在线播放你懂得 | 四虎永久网址影院 | 免费大片黄国产在线观看 | 国内精品免费视频精选在线观看 | 77se77亚洲欧美在线大屁股 | 色老久久精品偷偷鲁一区 | 在线观看h网站 | 日本一区二区三区四区在线观看 | 色天使美国 | 在线网站黄色 | 亚洲精品美女久久久aaa | 欧美性xxxx巨大黑人猛 | 2018国产大陆天天弄 | 毛片你懂的 | 国产色丁香久久综合 | 天天拍夜夜添久久精品中文 | 久草一本| 天天看天天射天天碰 | 免费日韩一级片 | 久久777国产线看观看精品卜 | 欧美色图综合 | 成人国产三级精品 | 夜夜嘿视频免费看 | 亚洲综合激情网 | 狼人 成人 综合 亚洲 | 国产在线五月综合婷婷 | 欧美伊人久久大香线蕉综合69 | 日本a级在线| 拍拍拍无档又黄又爽视频 | 日本口工禁漫画无遮挡全彩 | a一级黄| 日本不卡免费新一区二区三区 | 女人被两根一起进3p在线观看 | 欲香欲色 | 亚洲 另类 在线 欧美 制服 | 国产美女视频一区二区二三区 | 国产成人精品本亚洲 | 免费黄色福利视频 | 99热久久精品免费精品 | 站长工具天天爽视频 |