更新時(shí)間:2020-12-23 17:35:42 來源:動(dòng)力節(jié)點(diǎn) 瀏覽6164次
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合,它研究的是數(shù)據(jù)的邏輯結(jié)構(gòu)和數(shù)據(jù)的物理結(jié)構(gòu)以及它們之間的相互關(guān)系,并對(duì)這種結(jié)構(gòu)定義相適應(yīng)的運(yùn)算,設(shè)計(jì)出相應(yīng)的算法,并確保經(jīng)過這些運(yùn)算以后所得到的新結(jié)構(gòu)仍保持原來的結(jié)構(gòu)類型。數(shù)據(jù)結(jié)構(gòu)有很多種,一般來說,8種常用數(shù)據(jù)結(jié)構(gòu)分別為:數(shù)組,棧,鏈表,隊(duì)列,樹,圖,堆,散列表等,如圖所示:
下面詳細(xì)的介紹一下8個(gè)常用數(shù)據(jù)結(jié)構(gòu)。
1.數(shù)組(Array)
數(shù)組是一種聚合數(shù)據(jù)類型,它是將具有相同類型的若干變量有序地組織在一起的集合。數(shù)組可以說是最基本的數(shù)據(jù)結(jié)構(gòu),在各種編程語言中都有對(duì)應(yīng)。一個(gè)數(shù)組可以分解為多個(gè)數(shù)組元素,按照數(shù)據(jù)元素的類型,數(shù)組可以分為整型數(shù)組、字符型數(shù)組、浮點(diǎn)型數(shù)組、指針數(shù)組和結(jié)構(gòu)數(shù)組等。數(shù)組還可以有一維、二維以及多維等表現(xiàn)形式。
2.棧( Stack)
棧是一種特殊的線性表,它只能在一個(gè)表的一個(gè)固定端進(jìn)行數(shù)據(jù)結(jié)點(diǎn)的插入和刪除操作。棧按照后進(jìn)先出的原則來存儲(chǔ)數(shù)據(jù),也就是說,先插入的數(shù)據(jù)將被壓入棧底,最后插入的數(shù)據(jù)在棧頂,讀出數(shù)據(jù)時(shí),從棧頂開始逐個(gè)讀出。棧在匯編語言程序中,經(jīng)常用于重要數(shù)據(jù)的現(xiàn)場(chǎng)保護(hù)。棧中沒有數(shù)據(jù)時(shí),稱為空棧。
3.隊(duì)列(Queue)
隊(duì)列和棧類似,也是一種特殊的線性表。和棧不同的是,隊(duì)列只允許在表的一端進(jìn)行插入操作,而在另一端進(jìn)行刪除操作。一般來說,進(jìn)行插入操作的一端稱為隊(duì)尾,進(jìn)行刪除操作的一端稱為隊(duì)頭。隊(duì)列中沒有元素時(shí),稱為空隊(duì)列。
4.鏈表( Linked List)
鏈表是一種數(shù)據(jù)元素按照鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)進(jìn)行存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu),這種存儲(chǔ)結(jié)構(gòu)具有在物理上存在非連續(xù)的特點(diǎn)。鏈表由一系列數(shù)據(jù)結(jié)點(diǎn)構(gòu)成,每個(gè)數(shù)據(jù)結(jié)點(diǎn)包括數(shù)據(jù)域和指針域兩部分。其中,指針域保存了數(shù)據(jù)結(jié)構(gòu)中下一個(gè)元素存放的地址。鏈表結(jié)構(gòu)中數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序來實(shí)現(xiàn)的。
5.樹( Tree)
樹是典型的非線性結(jié)構(gòu),它是包括,2個(gè)結(jié)點(diǎn)的有窮集合K。在樹結(jié)構(gòu)中,有且僅有一個(gè)根結(jié)點(diǎn),該結(jié)點(diǎn)沒有前驅(qū)結(jié)點(diǎn)。在樹結(jié)構(gòu)中的其他結(jié)點(diǎn)都有且僅有一個(gè)前驅(qū)結(jié)點(diǎn),而且可以有兩個(gè)后繼結(jié)點(diǎn),m≥0。
6.圖(Graph)
圖是另一種非線性數(shù)據(jù)結(jié)構(gòu)。在圖結(jié)構(gòu)中,數(shù)據(jù)結(jié)點(diǎn)一般稱為頂點(diǎn),而邊是頂點(diǎn)的有序偶對(duì)。如果兩個(gè)頂點(diǎn)之間存在一條邊,那么就表示這兩個(gè)頂點(diǎn)具有相鄰關(guān)系。
7.堆(Heap)
堆是一種特殊的樹形數(shù)據(jù)結(jié)構(gòu),一般討論的堆都是二叉堆。堆的特點(diǎn)是根結(jié)點(diǎn)的值是所有結(jié)點(diǎn)中最小的或者最大的,并且根結(jié)點(diǎn)的兩個(gè)子樹也是一個(gè)堆結(jié)構(gòu)。
8.散列表(Hash)
散列表源自于散列函數(shù)(Hash function),其思想是如果在結(jié)構(gòu)中存在關(guān)鍵字和T相等的記錄,那么必定在F(T)的存儲(chǔ)位置可以找到該記錄,這樣就可以不用進(jìn)行比較操作而直接取得所查記錄。
當(dāng)然,數(shù)據(jù)結(jié)構(gòu)本身也不是一成不變的,隨著計(jì)算機(jī)科學(xué)的飛速發(fā)展,數(shù)據(jù)結(jié)構(gòu)也隨之發(fā)展,衍生出了新的數(shù)據(jù)結(jié)構(gòu)。但是,我們只要掌握了數(shù)據(jù)結(jié)構(gòu)本身的規(guī)律,萬變不離其宗,數(shù)據(jù)結(jié)構(gòu)也會(huì)成為我們解決問題的利刃。在本站的數(shù)據(jù)結(jié)構(gòu)和算法教程中,對(duì)這8種常見數(shù)據(jù)結(jié)構(gòu)都有詳細(xì)的講解,想深入學(xué)習(xí)的小伙伴千萬不要錯(cuò)過哦。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)