掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
數(shù)據(jù)結(jié)構(gòu)是一種在計算機中組織和存儲數(shù)據(jù)的專門方法,使我們可以更有效地對存儲的數(shù)據(jù)執(zhí)行操作。數(shù)據(jù)結(jié)構(gòu)在計算機科學(xué)和軟件工程領(lǐng)域有著廣泛而多樣的使用范圍。

成都創(chuàng)新互聯(lián)公司專注于岳麓網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供岳麓營銷型網(wǎng)站建設(shè),岳麓網(wǎng)站制作、岳麓網(wǎng)頁設(shè)計、岳麓網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造岳麓網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供岳麓網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
幾乎所有已開發(fā)的程序或軟件系統(tǒng)都在使用數(shù)據(jù)結(jié)構(gòu)。此外,數(shù)據(jù)結(jié)構(gòu)屬于計算機科學(xué)和軟件工程的基礎(chǔ)知識。當(dāng)涉及到軟件工程面試問題時,這是一個關(guān)鍵話題。因此,作為開發(fā)人員,我們必須對數(shù)據(jù)結(jié)構(gòu)有很好的了解。
在這篇文章中,我將簡要解釋每個程序員都必須了解的 8 種常用數(shù)據(jù)結(jié)構(gòu)。
數(shù)組是一種固定大小的結(jié)構(gòu),可以容納相同數(shù)據(jù)類型的項。它可以是整數(shù)數(shù)組、浮點數(shù)數(shù)組、字符串?dāng)?shù)組甚至數(shù)組的數(shù)組(例如二維數(shù)組)。數(shù)組是有索引的,這意味著可以進(jìn)行隨機訪問。
由于數(shù)組的大小是固定的,因此無法立即向數(shù)組插入元素和從數(shù)組中刪除元素。如果要將元素插入數(shù)組,首先必須創(chuàng)建一個大小增加的新數(shù)組(當(dāng)前大小 + 1),復(fù)制現(xiàn)有元素并添加新元素。對于刪除尺寸減小的新數(shù)組也是如此。
鏈表是一種順序結(jié)構(gòu),由一系列按線性順序相互鏈接的項目組成。因此,您必須順序訪問數(shù)據(jù),而隨機訪問是不可能的。鏈接列表提供了動態(tài)集的簡單而靈活的表示。
讓我們考慮以下有關(guān)鏈表的術(shù)語。
以下是可用的各種類型的鏈接列表。
堆棧是一種LIFO(后進(jìn)先出 - 最后放置的元素可以首先訪問)結(jié)構(gòu),在許多編程語言中都很常見。這種結(jié)構(gòu)被命名為“堆棧”,因為它類似于現(xiàn)實世界中的堆棧——一堆盤子。
下面給出了可以在堆棧上執(zhí)行的 2 個基本操作。
此外,還為堆棧提供了以下附加函數(shù)以檢查其狀態(tài)。
隊列是一種FIFO(先進(jìn)先出——先放置的元素可以先訪問)結(jié)構(gòu),在許多編程語言中都很常見。這種結(jié)構(gòu)被命名為“隊列”,因為它類似于現(xiàn)實世界的隊列——人們在隊列中等待。
下面給出了可以在隊列上執(zhí)行的 2 個基本操作。
哈希表是一種存儲值的數(shù)據(jù)結(jié)構(gòu),這些值具有與每個值關(guān)聯(lián)的鍵。此外,如果我們知道與值關(guān)聯(lián)的鍵,它就可以有效地支持查找。因此,無論數(shù)據(jù)大小如何,插入和搜索都非常有效。
直接尋址在表中存儲時使用值和鍵之間的一對一映射。但是,當(dāng)存在大量鍵值對時,這種方法會出現(xiàn)問題。該表將非常龐大,包含如此多的記錄,并且考慮到典型計算機上的可用內(nèi)存,可能不切實際甚至不可能進(jìn)行存儲。為了避免這個問題,我們使用哈希表。
稱為散列函數(shù)(h)的特殊函數(shù)用于克服直接尋址中的上述問題。
在直接訪問中,具有鍵k的值存儲在槽k中。使用哈希函數(shù),我們計算每個值所在的表(槽)的索引。使用哈希函數(shù)對給定鍵計算出的值稱為哈希值,它指示該值映射到的表的索引。
h(k) = k % m
考慮哈希函數(shù)h(k) = k % 20,其中哈希表的大小為 20。給定一組鍵,我們要計算每個鍵的哈希值,以確定它在哈希表中應(yīng)位于的索引。考慮我們有以下鍵、哈希和哈希表索引。
從上面給出的最后兩個示例中,我們可以看到,當(dāng)哈希函數(shù)為多個鍵生成相同的索引時,可能會出現(xiàn)沖突。我們可以通過選擇合適的哈希函數(shù) h 并使用鏈接和開放尋址等技術(shù)來解決沖突。
樹是一種層次結(jié)構(gòu),其中數(shù)據(jù)按層次結(jié)構(gòu)組織并鏈接在一起。這種結(jié)構(gòu)與鏈表不同,而在鏈表中,項目以線性順序鏈接。
在程序的應(yīng)用中,為了適應(yīng)某些應(yīng)用并滿足某些限制,已經(jīng)開發(fā)了各種類型的樹木。一些例子是二叉搜索樹、B樹、treap、紅黑樹、splay樹、AVL樹和n叉樹。
二叉搜索樹(BST),顧名思義,是一種二叉樹,其中數(shù)據(jù)以層次結(jié)構(gòu)組織。該數(shù)據(jù)結(jié)構(gòu)按排序順序存儲值。
二叉搜索樹中的每個節(jié)點都包含以下屬性。
二叉搜索樹具有區(qū)別于其他樹的獨特屬性。該屬性稱為二叉搜索樹屬性。
令x為二叉搜索樹中的一個節(jié)點。
堆是二叉樹的一種特殊情況,其中父節(jié)點與其子節(jié)點的值進(jìn)行比較,并進(jìn)行相應(yīng)的排列。
讓我們看看如何表示堆。堆可以使用樹和數(shù)組來表示。下面兩張圖顯示了如何使用二叉樹和數(shù)組來表示二叉堆。
圖由一組有限的頂點或節(jié)點以及一組連接這些頂點的邊組成。
圖的階數(shù)是圖中頂點的數(shù)量。圖的大小是圖中邊的數(shù)量。
如果兩個節(jié)點通過同一條邊相互連接,則稱它們是相鄰的。
如果圖G的所有邊都具有指示起始頂點和終止頂點的方向,則稱圖 G 是有向圖。
我們說(u, v)是從頂點u入射或離開頂點u ,并且是從頂點 v 入射或進(jìn)入頂點v。
自循環(huán):從頂點到自身的邊。
如果圖G的所有邊都沒有方向,則稱其為無向圖。它可以在兩個頂點之間雙向移動。
如果一個頂點沒有連接到圖中的任何其他節(jié)點,則稱該頂點是孤立的。
還有很多種數(shù)據(jù)結(jié)構(gòu),其實都是基于以上數(shù)據(jù)結(jié)構(gòu)變種生成的,數(shù)據(jù)結(jié)構(gòu)是每個程序員都要掌握的,無論是工作中還是面試都必不可少的知識儲備。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流