女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內(nèi)不再提示

編程面試之前你應該知曉的八大數(shù)據(jù)結(jié)構(gòu)

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:未知 ? 作者:李倩 ? 2018-08-30 11:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

瑞士計算機科學家Niklaus Wirth在1976年寫了一本書,名為《算法+數(shù)據(jù)結(jié)構(gòu)=編程》。

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

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

有些面試題會明確提及某種數(shù)據(jù)結(jié)構(gòu),例如,“給定一個二叉樹。”而另一些則隱含在面試題中,例如,“我們希望記錄每個作者相關的書籍數(shù)量。”

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

什么是數(shù)據(jù)結(jié)構(gòu)?

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

為什么我們需要數(shù)據(jù)結(jié)構(gòu)?

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

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

數(shù)據(jù)需要根據(jù)不同的場景,按照特定的格式進行存儲。有很多數(shù)據(jù)結(jié)構(gòu)能夠滿足以不同格式存儲數(shù)據(jù)的需求。

常見的數(shù)據(jù)結(jié)構(gòu)

首先列出一些最常見的數(shù)據(jù)結(jié)構(gòu),我們將逐一說明:

數(shù)組

隊列

鏈表

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

散列表(哈希表)

數(shù)組

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

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

以下是數(shù)組的兩種類型:

一維數(shù)組(如上所示)

多維數(shù)組(數(shù)組的數(shù)組)

數(shù)組的基本操作

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

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

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

Size——得到數(shù)組所有元素的數(shù)量

面試中關于數(shù)組的常見問題

尋找數(shù)組中第二小的元素

找到數(shù)組中第一個不重復出現(xiàn)的整數(shù)

合并兩個有序數(shù)組

重新排列數(shù)組中的正值和負值

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

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

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

棧的基本操作

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

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

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

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

面試中關于棧的常見問題

使用棧計算后綴表達式

對棧的元素進行排序

判斷表達式是否括號平衡

隊列

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

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

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

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

隊列的基本操作

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

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

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

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

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

使用隊列表示棧

對隊列的前k個元素倒序

使用隊列生成從1到n的二進制數(shù)

鏈表

鏈表是另一個重要的線性數(shù)據(jù)結(jié)構(gòu),乍一看可能有點像數(shù)組,但在內(nèi)存分配、內(nèi)部結(jié)構(gòu)以及數(shù)據(jù)插入和刪除的基本操作方面均有所不同。

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

鏈表一般用于實現(xiàn)文件系統(tǒng)、哈希表和鄰接表。

這是鏈表內(nèi)部結(jié)構(gòu)的展示:

鏈表包括以下類型:

單鏈表(單向)

雙向鏈表(雙向)

鏈表的基本操作:

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

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

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

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

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

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

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

反轉(zhuǎn)鏈表

檢測鏈表中的循環(huán)

返回鏈表倒數(shù)第N個節(jié)點

刪除鏈表中的重復項

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

圖的類型

無向圖

有向圖

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

鄰接矩陣

鄰接表

常見圖遍歷算法

廣度優(yōu)先搜索

深度優(yōu)先搜索

面試中關于圖的常見問題

實現(xiàn)廣度和深度優(yōu)先搜索

檢查圖是否為樹

計算圖的邊數(shù)

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

樹形結(jié)構(gòu)是一種層級式的數(shù)據(jù)結(jié)構(gòu),由頂點(節(jié)點)和連接它們的邊組成。 樹類似于圖,但區(qū)分樹和圖的重要特征是樹中不存在環(huán)路。

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

這是一個簡單樹的示意圖,以及樹數(shù)據(jù)結(jié)構(gòu)中使用的基本術語:

Root - 根節(jié)點

Parent - 父節(jié)點

Child - 子節(jié)點

Leaf - 葉子節(jié)點

Sibling - 兄弟節(jié)點

以下是樹形結(jié)構(gòu)的主要類型:

N元樹

平衡樹

二叉樹

二叉搜索樹

AVL樹

紅黑樹

2-3樹

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

面試中關于樹結(jié)構(gòu)的常見問題:

求二叉樹的高度

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

查找與根節(jié)點距離k的節(jié)點

在二叉樹中查找給定節(jié)點的祖先節(jié)點

字典樹(Trie)

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

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

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

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

計算字典樹中的總單詞數(shù)

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

使用字典樹對數(shù)組的元素進行排序

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

構(gòu)建T9字典(字典樹+ DFS )

哈希表

哈希法(Hashing)是一個用于唯一標識對象并將每個對象存儲在一些預先計算的唯一索引(稱為“鍵(key)”)中的過程。因此,對象以鍵值對的形式存儲,這些鍵值對的集合被稱為“字典”。可以使用鍵搜索每個對象。基于哈希法有很多不同的數(shù)據(jù)結(jié)構(gòu),但最常用的數(shù)據(jù)結(jié)構(gòu)是哈希表。

哈希表通常使用數(shù)組實現(xiàn)。

散列數(shù)據(jù)結(jié)構(gòu)的性能取決于以下三個因素:

哈希函數(shù)

哈希表的大小

碰撞處理方法

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

面試中關于哈希結(jié)構(gòu)的常見問題:

在數(shù)組中查找對稱鍵值對

追蹤遍歷的完整路徑

查找數(shù)組是否是另一個數(shù)組的子集

檢查給定的數(shù)組是否不相交

以上是在編程面試之前你應該知曉的八大數(shù)據(jù)結(jié)構(gòu)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標題:應對程序員面試,你必須知道的八大數(shù)據(jù)結(jié)構(gòu)

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    大話數(shù)據(jù)結(jié)構(gòu)pdf下載

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

    收藏 | 程序員面試必須知道的8大數(shù)據(jù)結(jié)構(gòu)

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

    數(shù)據(jù)結(jié)構(gòu)的幾個重要知識點

    。如果從事編程的工作,不管你現(xiàn)在是不是需要用到數(shù)據(jù)結(jié)構(gòu)的相關知識,在工作的過程中理解、掌握好數(shù)據(jù)結(jié)構(gòu),對現(xiàn)在的工作和以后的發(fā)展都是有幫助的。
    發(fā)表于 02-27 15:01

    常見的數(shù)據(jù)結(jié)構(gòu)

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

    C語言與數(shù)據(jù)結(jié)構(gòu)

    目錄個人介紹筆試單選題C語言數(shù)據(jù)結(jié)構(gòu)計算機與操作系統(tǒng)網(wǎng)絡通信填空題C語言與數(shù)據(jù)結(jié)構(gòu)網(wǎng)絡通信問答題嵌入式基礎知識C語言與數(shù)據(jù)結(jié)構(gòu)C編程一面二面功能快捷鍵合理的創(chuàng)建標題,有助于目錄的生成如
    發(fā)表于 08-06 07:10

    數(shù)據(jù)結(jié)構(gòu)教程,下載

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

    數(shù)據(jù)結(jié)構(gòu)在游戲編寫中的應用

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

    數(shù)據(jù)結(jié)構(gòu)是什么_數(shù)據(jù)結(jié)構(gòu)有什么用

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

    數(shù)據(jù)結(jié)構(gòu)常見的八大排序算法

    本文總結(jié)了數(shù)據(jù)結(jié)構(gòu)常見的八大排序算法。詳細分析請看下文
    發(fā)表于 02-05 15:26 ?1894次閱讀
    <b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>常見的<b class='flag-5'>八大</b>排序算法

    什么是數(shù)據(jù)結(jié)構(gòu)?為什么要學習數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的應用實例分析

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

    java常見數(shù)據(jù)結(jié)構(gòu)面試

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

    數(shù)據(jù)結(jié)構(gòu)的存儲方式及基本操作

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

    數(shù)據(jù)結(jié)構(gòu)解決滑動窗口問題

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

    epoll的基礎數(shù)據(jù)結(jié)構(gòu)

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

    探索編程世界的七大數(shù)據(jù)結(jié)構(gòu)

    結(jié)構(gòu)就像是一顆倒掛的小樹,有根、有枝、有葉。它是一種非線性的數(shù)據(jù)結(jié)構(gòu),以層級的方式存儲數(shù)據(jù),頂部是根節(jié)點,底部是葉節(jié)點。
    的頭像 發(fā)表于 04-16 12:04 ?646次閱讀