日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

每個(gè)程序員都必須知道的八種必須掌握數(shù)據(jù)結(jié)構(gòu)

來(lái)源: 責(zé)編: 時(shí)間:2023-11-01 09:18:51 298觀看
導(dǎo)讀數(shù)據(jù)結(jié)構(gòu)是一種在計(jì)算機(jī)中組織和存儲(chǔ)數(shù)據(jù)的專門(mén)方法,使我們可以更有效地對(duì)存儲(chǔ)的數(shù)據(jù)執(zhí)行操作。數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)科學(xué)和軟件工程領(lǐng)域有著廣泛而多樣的使用范圍。幾乎所有已開(kāi)發(fā)的程序或軟件系統(tǒng)都在使用數(shù)據(jù)結(jié)構(gòu)。此外

l4x28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)結(jié)構(gòu)是一種在計(jì)算機(jī)中組織和存儲(chǔ)數(shù)據(jù)的專門(mén)方法,使我們可以更有效地對(duì)存儲(chǔ)的數(shù)據(jù)執(zhí)行操作。數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)科學(xué)和軟件工程領(lǐng)域有著廣泛而多樣的使用范圍。l4x28資訊網(wǎng)——每日最新資訊28at.com

幾乎所有已開(kāi)發(fā)的程序或軟件系統(tǒng)都在使用數(shù)據(jù)結(jié)構(gòu)。此外,數(shù)據(jù)結(jié)構(gòu)屬于計(jì)算機(jī)科學(xué)和軟件工程的基礎(chǔ)知識(shí)。當(dāng)涉及到軟件工程面試問(wèn)題時(shí),這是一個(gè)關(guān)鍵話題。因此,作為開(kāi)發(fā)人員,我們必須對(duì)數(shù)據(jù)結(jié)構(gòu)有很好的了解。l4x28資訊網(wǎng)——每日最新資訊28at.com

在這篇文章中,我將簡(jiǎn)要解釋每個(gè)程序員都必須了解的 8 種常用數(shù)據(jù)結(jié)構(gòu)。l4x28資訊網(wǎng)——每日最新資訊28at.com

1、數(shù)組(Arrays)

數(shù)組是一種固定大小的結(jié)構(gòu),可以容納相同數(shù)據(jù)類型的項(xiàng)它可以是整數(shù)數(shù)組、浮點(diǎn)數(shù)數(shù)組、字符串?dāng)?shù)組甚至數(shù)組的數(shù)組(例如二維數(shù)組)。數(shù)組是有索引的,這意味著可以進(jìn)行隨機(jī)訪問(wèn)。l4x28資訊網(wǎng)——每日最新資訊28at.com

l4x28資訊網(wǎng)——每日最新資訊28at.com

隊(duì)列操作

下面給出了可以在隊(duì)列上執(zhí)行的 2 個(gè)基本操作。l4x28資訊網(wǎng)——每日最新資訊28at.com

  • Enqueue:將一個(gè)元素插入到隊(duì)列末尾。
  • Dequeue:從隊(duì)列開(kāi)頭刪除元素。

l4x28資訊網(wǎng)——每日最新資訊28at.com

隊(duì)列的應(yīng)用

  • 用于管理多線程中的線程。
  • 用于實(shí)現(xiàn)排隊(duì)系統(tǒng)(例如:優(yōu)先級(jí)隊(duì)列)。

5、哈希表(Hash Tables)

哈希表是一種存儲(chǔ)值的數(shù)據(jù)結(jié)構(gòu),這些值具有與每個(gè)值關(guān)聯(lián)的鍵。此外,如果我們知道與值關(guān)聯(lián)的鍵,它就可以有效地支持查找。因此,無(wú)論數(shù)據(jù)大小如何,插入和搜索都非常有效。l4x28資訊網(wǎng)——每日最新資訊28at.com

直接尋址在表中存儲(chǔ)時(shí)使用值和鍵之間的一對(duì)一映射。但是,當(dāng)存在大量鍵值對(duì)時(shí),這種方法會(huì)出現(xiàn)問(wèn)題。該表將非常龐大,包含如此多的記錄,并且考慮到典型計(jì)算機(jī)上的可用內(nèi)存,可能不切實(shí)際甚至不可能進(jìn)行存儲(chǔ)。為了避免這個(gè)問(wèn)題,我們使用哈希表。l4x28資訊網(wǎng)——每日最新資訊28at.com

哈希函數(shù)

稱為散列函數(shù)(h)的特殊函數(shù)用于克服直接尋址中的上述問(wèn)題。l4x28資訊網(wǎng)——每日最新資訊28at.com

在直接訪問(wèn)中,具有鍵k的值存儲(chǔ)在槽k中。使用哈希函數(shù),我們計(jì)算每個(gè)值所在的表(槽)的索引。使用哈希函數(shù)對(duì)給定鍵計(jì)算出的值稱為哈希值,它指示該值映射到的表的索引。l4x28資訊網(wǎng)——每日最新資訊28at.com

h(k) = k % ml4x28資訊網(wǎng)——每日最新資訊28at.com

  • h:哈希函數(shù)。
  • k:需要確定哈希值的Key。
  • m:哈希表的大小(可用槽的數(shù)量)。對(duì)于m來(lái)說(shuō),不接近 2 的精確冪的素?cái)?shù)是一個(gè)不錯(cuò)的選擇。

l4x28資訊網(wǎng)——每日最新資訊28at.com

考慮哈希函數(shù)h(k) = k % 20,其中哈希表的大小為 20。給定一組鍵,我們要計(jì)算每個(gè)鍵的哈希值,以確定它在哈希表中應(yīng)位于的索引。考慮我們有以下鍵、哈希和哈希表索引l4x28資訊網(wǎng)——每日最新資訊28at.com

  • 1 → 1%20 → 1
  • 5 → 5%20 → 5
  • 23 → 23%20 → 3
  • 63 → 63%20 → 3

從上面給出的最后兩個(gè)示例中,我們可以看到,當(dāng)哈希函數(shù)為多個(gè)鍵生成相同的索引時(shí),可能會(huì)出現(xiàn)沖突。我們可以通過(guò)選擇合適的哈希函數(shù) h 并使用鏈接和開(kāi)放尋址等技術(shù)來(lái)解決沖突。l4x28資訊網(wǎng)——每日最新資訊28at.com

哈希表的應(yīng)用

  • 用于實(shí)現(xiàn)數(shù)據(jù)庫(kù)索引。
  • 用于實(shí)現(xiàn)關(guān)聯(lián)數(shù)組。
  • 用于實(shí)現(xiàn)“集合”數(shù)據(jù)結(jié)構(gòu)。

6、樹(shù)(Trees)

樹(shù)是一種層次結(jié)構(gòu)其中數(shù)據(jù)按層次結(jié)構(gòu)組織并鏈接在一起。這種結(jié)構(gòu)與鏈表不同,而在鏈表中,項(xiàng)目以線性順序鏈接。l4x28資訊網(wǎng)——每日最新資訊28at.com

在程序的應(yīng)用中,為了適應(yīng)某些應(yīng)用并滿足某些限制,已經(jīng)開(kāi)發(fā)了各種類型的樹(shù)木。一些例子是二叉搜索樹(shù)、B樹(shù)、treap、紅黑樹(shù)、splay樹(shù)、AVL樹(shù)和n叉樹(shù)。l4x28資訊網(wǎng)——每日最新資訊28at.com

二叉搜索樹(shù)

二叉搜索樹(shù)(BST),顧名思義,是一種二叉樹(shù),其中數(shù)據(jù)以層次結(jié)構(gòu)組織。該數(shù)據(jù)結(jié)構(gòu)按排序順序存儲(chǔ)值。l4x28資訊網(wǎng)——每日最新資訊28at.com

二叉搜索樹(shù)中的每個(gè)節(jié)點(diǎn)都包含以下屬性。l4x28資訊網(wǎng)——每日最新資訊28at.com

  • key:存儲(chǔ)在節(jié)點(diǎn)中的值。
  • left:指向左孩子的指針。
  • right:指向右孩子的指針。
  • p:指向父節(jié)點(diǎn)的指針。

二叉搜索樹(shù)具有區(qū)別于其他樹(shù)的獨(dú)特屬性。該屬性稱為二叉搜索樹(shù)屬性。l4x28資訊網(wǎng)——每日最新資訊28at.com

令x為二叉搜索樹(shù)中的一個(gè)節(jié)點(diǎn)。l4x28資訊網(wǎng)——每日最新資訊28at.com

  • 如果y是x左子樹(shù)中的節(jié)點(diǎn),則y.key ≤ x.key。
  • 如果y是x右子樹(shù)中的節(jié)點(diǎn),則y.key ≥ x.key。

l4x28資訊網(wǎng)——每日最新資訊28at.com

樹(shù)的應(yīng)用

  • 二叉樹(shù):用于實(shí)現(xiàn)表達(dá)式解析器和表達(dá)式求解器。
  • 二叉搜索樹(shù):用于許多數(shù)據(jù)不斷進(jìn)入和離開(kāi)的搜索應(yīng)用程序。
  • :JVM(Java 虛擬機(jī))用來(lái)存儲(chǔ) Java 對(duì)象。
  • Treaps:用于無(wú)線網(wǎng)絡(luò)。

7、堆(Heaps)

堆是二叉樹(shù)的一種特殊情況,其中父節(jié)點(diǎn)與其子節(jié)點(diǎn)的值進(jìn)行比較,并進(jìn)行相應(yīng)的排列l4x28資訊網(wǎng)——每日最新資訊28at.com

讓我們看看如何表示堆。堆可以使用樹(shù)和數(shù)組來(lái)表示。下面兩張圖顯示了如何使用二叉樹(shù)和數(shù)組來(lái)表示二叉堆。l4x28資訊網(wǎng)——每日最新資訊28at.com

l4x28資訊網(wǎng)——每日最新資訊28at.com

l4x28資訊網(wǎng)——每日最新資訊28at.com

堆可以有兩種類型

  1. 最小堆— 父級(jí)的鍵小于或等于其子級(jí)的鍵。這稱為最小堆屬性。根將包含堆的最小值。
  2. 最大堆— 父級(jí)的鍵大于或等于其子級(jí)的鍵。這稱為最大堆屬性。根將包含堆的最大值。

堆的應(yīng)用

  • 用于堆排序算法
  • 用于實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列,因為可以根據(jù)堆屬性對(duì)優(yōu)先級(jí)值進(jìn)行排序,其中堆可以使用數(shù)組來(lái)實(shí)現(xiàn)。
  • 隊(duì)列函數(shù)可以在O(log n)時(shí)間內(nèi)使用堆實(shí)現(xiàn)。
  • 用于查找給定數(shù)組中 k?? 的最小(或最大)值。

8、圖表(Graphs)

圖由一組有限的頂點(diǎn)或節(jié)點(diǎn)以及一組連接這些頂點(diǎn)的邊組成。l4x28資訊網(wǎng)——每日最新資訊28at.com

圖的階數(shù)是圖中頂點(diǎn)的數(shù)量。圖的大小是圖中邊的數(shù)量。l4x28資訊網(wǎng)——每日最新資訊28at.com

如果兩個(gè)節(jié)點(diǎn)通過(guò)同一條邊相互連接,則稱它們是相鄰的。l4x28資訊網(wǎng)——每日最新資訊28at.com

有向圖

如果圖G的所有邊都具有指示起始頂點(diǎn)和終止頂點(diǎn)的方向,則稱圖 G 是有向圖。l4x28資訊網(wǎng)——每日最新資訊28at.com

我們說(shuō)(u, v)是從頂點(diǎn)u入射或離開(kāi)頂點(diǎn)u ,并且是從頂點(diǎn) v 入射或進(jìn)入頂點(diǎn)v。l4x28資訊網(wǎng)——每日最新資訊28at.com

自循環(huán):從頂點(diǎn)到自身的邊。l4x28資訊網(wǎng)——每日最新資訊28at.com

無(wú)向圖

如果圖G的所有邊都沒(méi)有方向,則稱其為無(wú)向圖。它可以在兩個(gè)頂點(diǎn)之間雙向移動(dòng)。l4x28資訊網(wǎng)——每日最新資訊28at.com

如果一個(gè)頂點(diǎn)沒(méi)有連接到圖中的任何其他節(jié)點(diǎn),則稱該頂點(diǎn)是孤立的l4x28資訊網(wǎng)——每日最新資訊28at.com

l4x28資訊網(wǎng)——每日最新資訊28at.com

圖的應(yīng)用

  • 用于表示社交媒體網(wǎng)絡(luò)。每個(gè)用戶都是一個(gè)頂點(diǎn),當(dāng)用戶連接時(shí),他們會(huì)創(chuàng)建一條邊。
  • 用于表示搜索引擎的網(wǎng)頁(yè)和鏈接。互聯(lián)網(wǎng)上的網(wǎng)頁(yè)通過(guò)超鏈接相互鏈接。每個(gè)頁(yè)面是一個(gè)頂點(diǎn),兩個(gè)頁(yè)面之間的超鏈接是一條邊。用于百度中的頁(yè)面排名。
  • 用于表示 GPS 中的位置和路線。位置是頂點(diǎn),連接位置的路線是邊。用于計(jì)算兩個(gè)位置之間的最短路線。

總結(jié)

還有很多種數(shù)據(jù)結(jié)構(gòu),其實(shí)都是基于以上數(shù)據(jù)結(jié)構(gòu)變種生成的,數(shù)據(jù)結(jié)構(gòu)是每個(gè)程序員都要掌握的,無(wú)論是工作中還是面試都必不可少的知識(shí)儲(chǔ)備。l4x28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-16283-0.html每個(gè)程序員都必須知道的八種必須掌握數(shù)據(jù)結(jié)構(gòu)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: C#開(kāi)發(fā)三個(gè)重要的內(nèi)存區(qū)域:托管堆內(nèi)存、非托管堆內(nèi)存和棧內(nèi)存

下一篇: Springboot中如何自定義Web容器的運(yùn)行參數(shù)

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 主站蜘蛛池模板: 靖安县| 广元市| 繁峙县| 赤峰市| 清苑县| 勃利县| 佛学| 普洱| 伊吾县| 大渡口区| 霍州市| 筠连县| 友谊县| 额敏县| 尉氏县| 玉溪市| 锡林浩特市| 香格里拉县| 牟定县| 砀山县| 曲靖市| 宣化县| 澜沧| 平安县| 保山市| 汉源县| 盐亭县| 东阿县| 嘉鱼县| 安宁市| 合肥市| 固镇县| 顺义区| 衡阳市| 泰来县| 平罗县| 吴江市| 西贡区| 金寨县| 岳池县| 二连浩特市|