數(shù)據(jù)結(jié)構(gòu)與集合的不解之緣,你了解多少?
本篇文章將簡要介紹數(shù)據(jù)結(jié)構(gòu),讓讀者了解它們在計算機中以何種結(jié)構(gòu)方式存在。那么,什么是數(shù)據(jù)結(jié)構(gòu)呢?下面我們來詳細解釋。
數(shù)據(jù)結(jié)構(gòu)
1.1 數(shù)據(jù)結(jié)構(gòu)有什么用?
數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來更高的運行或者存儲效率。
數(shù)據(jù)結(jié)構(gòu)往往同高效的檢索算法和索引技術(shù)有關(guān)。這句話是啥意思呢?
我們舉個簡單的例子。就像金庸小說中所寫的,武功招式就相當于我們的算法,而數(shù)據(jù)結(jié)構(gòu)就是我們的內(nèi)功心法;而武功的高低,不僅僅是武功招式,更重要的是 學(xué)會的內(nèi)功心法。就比如張無忌在學(xué)會九陽神功之后,就可以大戰(zhàn)六大門派。
而數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí),也會讓我們事半功倍。憑借著“數(shù)據(jù)結(jié)構(gòu)+算法=程序”這句話,Pascal之父獲得了圖靈獎。
總結(jié)來說:
數(shù)據(jù)結(jié)構(gòu)就是一種是將世界上各種數(shù)據(jù)轉(zhuǎn)化為計算機可以存儲和操作的形式,定義了邏輯結(jié)構(gòu)如何在計算機上存儲,以及相關(guān)的基本操作。
算法是程序猿通過調(diào)用不同數(shù)據(jù)結(jié)構(gòu)的基本操作,從而實現(xiàn)了數(shù)據(jù)的處理。
而這兩點使我們作為程序開發(fā)人員的必備基本功,不是一朝一夕就能成為絕世高手的,我們需要一步步去不斷的學(xué)習(xí)積累,積硅步以致千里。
1.2 常見的數(shù)據(jù)結(jié)構(gòu)
在計算機學(xué)科中,數(shù)據(jù)結(jié)構(gòu)是一門很重要的基礎(chǔ)學(xué)科,知識點很多。在這里我們不講那么多,只講述我們集合中用到的幾種數(shù)據(jù)結(jié)構(gòu),同學(xué)們可以下去自行學(xué)習(xí)更多的數(shù)據(jù)結(jié)構(gòu)的知識。常用結(jié)構(gòu)三個:數(shù)組、鏈表、紅黑樹。
我們分別來了解一下:
1)數(shù)組
數(shù)組的定義:
- 數(shù)組是相同類型數(shù)據(jù)的有序集合;
- 數(shù)組描述的是相同類型的若干個數(shù)據(jù),按照一定的先后次序排列組合而成;
- 其中,每一個數(shù)據(jù)稱作一個數(shù)組元素,每個數(shù)組元素可以通過一個下標來訪問它們。
存儲思路:
所有數(shù)據(jù)存儲在連續(xù)的空間中,數(shù)組中的每個元素都是一個具體的數(shù)據(jù)。
數(shù)組的特點:
- 使用連續(xù)分配的內(nèi)存空間;
- 一次申請一大段連續(xù)的空間,需要事先聲明最大可能要占的固定內(nèi)存空間。
如下圖:
- 通過索引,查詢快
- 當給數(shù)組插入新元素時,數(shù)組中的a2,a3,a4整體后移,代價高。
- 如果插入元素時,數(shù)組長度,還要重新創(chuàng)建一個數(shù)組,然后循環(huán)賦值,代價高
優(yōu)點:
設(shè)計簡單,讀取與修改表中的任意一個元素的時間都是固定的,速度快 。
缺點:
容易造成內(nèi)存浪費;刪除或者插入數(shù)據(jù)需要移動大量數(shù)據(jù),速度慢。
2)鏈表
每個數(shù)據(jù)單獨存在一小塊內(nèi)存中,這個單元叫做節(jié)點,每個節(jié)點知道下一個節(jié)點的地址,叫做單向鏈表。每個節(jié)點既知道下一個節(jié)點地址,又知道上一個節(jié)點地址,叫做雙向鏈表。
鏈表的特點:
- 使用不連續(xù)的內(nèi)存空間;
- 不需要提前聲明好指定大小的內(nèi)存空間,一次申請一小塊,按需申請。
查詢元素,需要通過節(jié)點一次向后查找,直到查找到指定元素
增刪元素:只需修改連接節(jié)點的地址即可。
優(yōu)點: 充分節(jié)省內(nèi)存空間,數(shù)據(jù)插入和刪除方便,不需要移動大量數(shù)據(jù)。
缺點: 查詢數(shù)據(jù)必須按順序找到該數(shù)據(jù),操作麻煩。
3)紅黑樹
簡單理解,就是一種類似于我們生活中樹的結(jié)構(gòu),只不過每個節(jié)點最多只有兩個葉子。計算機世界的樹,剛好與我們現(xiàn)實中的樹成鏡像相反,樹根在上,樹枝在下。二叉樹如下圖:
而我們要說的是二叉樹的一種比較有意思的叫做紅黑樹,紅黑樹本身就是一顆二叉查找樹。我們在這里只需要記住它的特點就可以非常方便的對樹中的所有節(jié)點進行排序和檢索。
小結(jié)
本文介紹了三種常用的數(shù)據(jù)結(jié)構(gòu):數(shù)組、鏈表和紅黑樹,以及這些數(shù)據(jù)結(jié)構(gòu)在計算機中的重要意義。通過學(xué)習(xí)這些內(nèi)容,我們可以逐步深入了解計算機世界。