成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)-創(chuàng)新互聯(lián)

譯者按: 搞定面試,不要急著刷題,先弄懂什么是數(shù)據(jù)結(jié)構(gòu)!

在麻栗坡等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作 網(wǎng)站設(shè)計制作按需求定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,營銷型網(wǎng)站建設(shè),外貿(mào)營銷網(wǎng)站建設(shè),麻栗坡網(wǎng)站建設(shè)費(fèi)用合理。
  • 原文:The top data structures you should know for your next coding interview
  • 譯者:Fundebug

為了保證可讀性,本文采用意譯而非直譯。另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。

代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)

1976年,一個瑞士計算機(jī)科學(xué)家寫一本書《Algorithms + Data Structures = Programs》。即:算法 + 數(shù)據(jù)結(jié)構(gòu) = 程序。40多年過去了,這個等式依然成立。

很多代碼面試題都要求候選者深入理解數(shù)據(jù)結(jié)構(gòu),不管你來自大學(xué)計算機(jī)專業(yè)還是編程培訓(xùn)機(jī)構(gòu),也不管你有多少年編程經(jīng)驗(yàn)。有時面試題會直接提到數(shù)據(jù)結(jié)構(gòu),比如“給我實(shí)現(xiàn)一個二叉樹”,然而有時則不那么明顯,比如“統(tǒng)計一下每個作者寫的書的數(shù)量”。

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

數(shù)據(jù)結(jié)構(gòu)是計算機(jī)存儲、組織數(shù)據(jù)的方式。對于特定的數(shù)據(jù)結(jié)構(gòu)(比如數(shù)組),有些操作效率很高(讀某個數(shù)組元素),有些操作的效率很低(刪除某個數(shù)組元素)。程序員的目標(biāo)是為當(dāng)前的問題選擇最優(yōu)的數(shù)據(jù)結(jié)構(gòu)。

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

數(shù)據(jù)是程序的核心要素,因此數(shù)據(jù)結(jié)構(gòu)的價值不言而喻。無論你在寫什么程序,你都需要與數(shù)據(jù)打交道,比如員工工資、股票價格、雜貨清單或者電話本。在不同場景下,數(shù)據(jù)需要以特定的方式存儲,我們有不同的數(shù)據(jù)結(jié)構(gòu)可以滿足我們的需求。

8種常用數(shù)據(jù)結(jié)構(gòu)

  1. 數(shù)組
  2. 隊(duì)列
  3. 鏈表
  4. 前綴樹
  5. 哈希表

1. 數(shù)組

數(shù)組(Array)大概是最簡單,也是最常用的數(shù)據(jù)結(jié)構(gòu)了。其他數(shù)據(jù)結(jié)構(gòu),比如棧和隊(duì)列都是由數(shù)組衍生出來的。

下圖展示了1個數(shù)組,它有4個元素:

代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)
每一個數(shù)組元素的位置由數(shù)字編號,稱為下標(biāo)或者索引(index)。大多數(shù)編程語言的數(shù)組第一個元素的下標(biāo)是0。

根據(jù)維度區(qū)分,有2種不同的數(shù)組:

  • 一維數(shù)組(如上圖所示)
  • 多維數(shù)組(數(shù)組的元素為數(shù)組)
數(shù)組的基本操作
  • Insert - 在某個索引處插入元素
  • Get - 讀取某個索引處的元素
  • Delete - 刪除某個索引處的元素
  • Size - 獲取數(shù)組的長度
常見數(shù)組代碼面試題
  • 查找數(shù)組中第二小的元素
  • 查找第一個沒有重復(fù)的數(shù)組元素
  • 合并2個排序好的數(shù)組
  • 重新排列數(shù)組中的正數(shù)和負(fù)數(shù)

2. 棧

撤回,即Ctrl+Z,是我們最常見的操作之一,大多數(shù)應(yīng)用都會支持這個功能。你知道它是怎么實(shí)現(xiàn)的嗎?答案是這樣的:把之前的應(yīng)用狀態(tài)(限制個數(shù))保存到內(nèi)存中,最近的狀態(tài)放到第一個。這時,我們需要棧(stack)來實(shí)現(xiàn)這個功能。

棧中的元素采用LIFO (Last In First Out),即后進(jìn)先出

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

代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)

棧的基本操作
  • Push?—?在棧的最上方插入元素
  • Pop?— 返回棧最上方的元素,并將其刪除
  • isEmpty?—?查詢棧是否為空
  • Top?—?返回棧最上方的元素,并不刪除
常見的棧代碼面試題
  • 使用棧計算后綴表達(dá)式
  • 使用棧為棧中的元素排序
  • 檢查字符串中的括號是否匹配正確

3. 隊(duì)列

隊(duì)列(Queue)與棧類似,都是采用線性結(jié)構(gòu)存儲數(shù)據(jù)。它們的區(qū)別在于,棧采用LIFO方式,而隊(duì)列采用先進(jìn)先出,即FIFO(First in First Out)。

下圖展示了一個隊(duì)列,1是最上面的元素,它會被第一個移除:

代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)

隊(duì)列的基本操作
  • Enqueue?—?在隊(duì)列末尾插入元素
  • Dequeue?—?將隊(duì)列第一個元素刪除
  • isEmpty?—?查詢隊(duì)列是否為空
  • Top?—?返回隊(duì)列的第一個元素
常見的隊(duì)列代碼面試題
  • 使用隊(duì)列實(shí)現(xiàn)棧
  • 倒轉(zhuǎn)隊(duì)列的前K個元素
  • 使用隊(duì)列將1到n轉(zhuǎn)換為二進(jìn)制

4. 鏈表

鏈表(Linked List)也是線性結(jié)構(gòu),它與數(shù)組看起來非常像,但是它們的內(nèi)存分配方式、內(nèi)部結(jié)構(gòu)和插入刪除操作方式都不一樣。

鏈表是一系列節(jié)點(diǎn)組成的鏈,每一個節(jié)點(diǎn)保存了數(shù)據(jù)以及指向下一個節(jié)點(diǎn)的指針。鏈表頭指針指向第一個節(jié)點(diǎn),如果鏈表為空,則頭指針為空或者為null。

鏈表可以用來實(shí)現(xiàn)文件系統(tǒng)、哈希表和鄰接表。

下圖展示了一個鏈表,它有3個節(jié)點(diǎn):

代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)

鏈表分為2種:

  • 單向鏈表
  • 雙向鏈表
鏈表的基本操作
  • InsertAtEnd?—?在鏈表結(jié)尾插入元素
  • InsertAtHead?—?在鏈表開頭插入元素
  • Delete?—?刪除鏈表的指定元素
  • DeleteAtHead?—?刪除鏈表第一個元素
  • Search?—?在鏈表中查詢指定元素
  • isEmpty?—?查詢鏈表是否為空
常見的隊(duì)列代碼面試題
  • 倒轉(zhuǎn)1個鏈表
  • 檢查鏈表中是否存在循環(huán)
  • 返回鏈表倒數(shù)第N個元素
  • 移除鏈表中的重復(fù)元素

5. 圖

圖(graph)由多個節(jié)點(diǎn)(vertex)構(gòu)成,節(jié)點(diǎn)之間闊以互相連接組成一個網(wǎng)絡(luò)。(x, y)表示一條邊(edge),它表示節(jié)點(diǎn)x與y相連。邊可能會有權(quán)值(weight/cost)。

代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)
圖分為兩種:

  • 無向圖
  • 有向圖

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

  • 鄰接矩陣(Adjacency Matrix)
  • 鄰接表(Adjacency List)

遍歷圖有兩周算法

  • 廣度優(yōu)先搜索(Breadth First Search)
  • 深度優(yōu)先搜索(Depth First Search)
常見的圖代碼面試題
  • 實(shí)現(xiàn)廣度優(yōu)先搜索
  • 實(shí)現(xiàn)深度優(yōu)先搜索
  • 檢查圖是否為樹
  • 統(tǒng)計圖中邊的個數(shù)
  • 使用Dijkstra算法查找兩個節(jié)點(diǎn)之間的最短距離

6. 樹

樹(Tree)是一個分層的數(shù)據(jù)結(jié)構(gòu),由節(jié)點(diǎn)和連接節(jié)點(diǎn)的邊組成。樹是一種特殊的圖,它與圖大的區(qū)別是沒有循環(huán)。

樹被廣泛應(yīng)用在人工智能和一些復(fù)雜算法中,用來提供高效的存儲結(jié)構(gòu)。

下圖是一個簡單的樹以及與樹相關(guān)的術(shù)語:

代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)
樹有很多分類:

  • N叉樹(N-ary Tree)
  • 平衡樹(Balanced Tree)
  • 二叉樹(Binary Tree)
  • 二叉查找樹(Binary Search Tree)
  • 平衡二叉樹(AVL Tree)
  • 紅黑樹(Red Black Tree)
  • 2-3樹(2–3 Tree)

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

常見的樹代碼面試題
  • 計算樹的高度
  • 查找二叉平衡樹中第K大的元素
  • 查找樹中與根節(jié)點(diǎn)距離為k的節(jié)點(diǎn)
  • 查找二叉樹中某個節(jié)點(diǎn)所有祖先節(jié)點(diǎn)

7. 前綴樹

前綴樹(Prefix Trees或者Trie)與樹類似,用于處理字符串相關(guān)的問題時非常高效。它可以實(shí)現(xiàn)快速檢索,常用于字典中的單詞查詢,搜索引擎的自動補(bǔ)全甚至IP路由。

下圖展示了“top”, “thus”和“their”三個單詞在前綴樹中如何存儲的:

代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)

單詞是按照字母從上往下存儲,“p”, “s”和“r”節(jié)點(diǎn)分別表示“top”, “thus”和“their”的單詞結(jié)尾。

常見的樹代碼面試題
  • 統(tǒng)計前綴樹表示的單詞個數(shù)
  • 使用前綴樹為字符串?dāng)?shù)組排序

8. 哈希表

哈希(Hash)將某個對象變換為唯一標(biāo)識符,該標(biāo)識符通常用一個短的隨機(jī)字母和數(shù)字組成的字符串來代表。哈??梢杂脕韺?shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu),其中最常用的就是哈希表(hash table)

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

哈希表的性能取決于3個指標(biāo):

  • 哈希函數(shù)
  • 哈希表的大小
  • 哈希沖突處理方式

下圖展示了有數(shù)組實(shí)現(xiàn)的哈希表,數(shù)組的下標(biāo)即為哈希值,由哈希函數(shù)計算,作為哈希表的鍵(key),而數(shù)組中保存的數(shù)據(jù)即為值(value)
代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)
<img style="width:30%;" src="./code-interview-data-structure/hash_table.png" />

常見的哈希表代碼面試題
  • 查找數(shù)組中對稱的組合
  • 確認(rèn)某個數(shù)組的元素是否為另一個數(shù)組元素的子集
  • 確認(rèn)給定的數(shù)組是否互斥

參考

  • Fundebug博客 - Node.js面試題之2017
  • Fundebug博客 - 快速掌握J(rèn)avaScript面試基礎(chǔ)知識(一)
  • Fundebug博客 - 快速掌握J(rèn)avaScript面試基礎(chǔ)知識(二)
  • Fundebug博客 - 快速掌握J(rèn)avaScript面試基礎(chǔ)知識(三)
  • GeeksforGeeks

關(guān)于Fundebug

Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java實(shí)時BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計處理了7億+錯誤事件,得到了Google、360、金山軟件、百姓網(wǎng)等眾多知名用戶的認(rèn)可。歡迎免費(fèi)試用!

代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)

版權(quán)聲明

轉(zhuǎn)載時請注明作者Fundebug以及本文地址:

https://blog.fundebug.com/2018/08/27/code-interview-data-structure/

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前名稱:代碼面試需要知道的8種數(shù)據(jù)結(jié)構(gòu)(附面試題及答案鏈接)-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://jinyejixie.com/article4/dhocie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司、網(wǎng)站設(shè)計公司、移動網(wǎng)站建設(shè)、域名注冊、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
平江县| 互助| 政和县| 崇仁县| 抚顺县| 梁平县| 固原市| 武隆县| 射阳县| 徐汇区| 石景山区| 民乐县| 河北省| 武定县| 木兰县| 青川县| 甘孜| 濮阳市| 波密县| 诸暨市| 潢川县| 夏河县| 阿克| 张家港市| 金阳县| 图木舒克市| 泾川县| 田林县| 黄石市| 平江县| 逊克县| 平阴县| 常山县| 阳泉市| 青川县| 亳州市| 镇安县| 贺州市| 绥棱县| 同心县| 松潘县|