Java 數據結構快速入門


數據結構:棧

簡介

棧(stack),又稱堆棧,它是運算受限的線性表。

限制

棧(stack)的限制是僅允許在標的一端進行插入和刪除操作,不允許在其他任何位置進行添加、查找、刪除等操作。

采用該結構的特點

1、先進后出(即:存進去的元素,要在后它后面的元素依次取出后,オ能取出該元素)。

2、棧的入口、出口的都是棧的頂端位置。

例如

子彈壓進彈夾先壓進去的子彈在下面,后壓進去的子弾在上面,當開槍時,先彈出上面的子彈,然后才能彈出下面的子彈。

說明

棧(stack):彈夾

入棧(壓棧):向彈夾中添加子彈

出棧(彈棧):子彈從彈夾中彈出來

數據結構:隊列

簡介

隊列(queue),簡稱隊,它同堆棧一樣,也是一種運算受限的線性表。

限制

隊列的限制是僅允許在表的一端進行插入而在表的另一端進行刪除。

采用該結構的特點

1、先進先出(即:存進去的元素,要在后它前面的元素依次取出后,オ能取出該元素)。

2、隊列的入口、出口各占一側。

例如

小火車過山洞,車頭先進去,車尾后進去;車頭先出來,車尾后出來。

數據結構:數組

簡介

數組(Array)是有序的元素序列,數組是在堆內存中開辟一段連實的空間,並在此空間存放元素。

采用該結構的特點

1、查找元素快

2、增刪元素慢

為什么說數組查找元素快,增刪元素慢

1、數組查詢快:數組的地址是連續的我們通過數組的首地址可以找到數組,通過數組的素引可以快速查找某一個

2、元素增刪慢:數組的長度是固定的我們想要增加/刪除一個元素,必須創建一個新數組把源數組的數據復制過來

3、增刪元素,會在堆內存中頻繁的創建新數組、復制數組中的元素、銷毀數組,導致效率低下

例如

一排出租屋,有100個房間,從001到100每個房間都有固定編號,通過編號就可以快速找到租房子的人。

數據結構:鏈表

簡介

鏈表(linked、list)由一系列結點node(鏈表中毎一個元素稱為結點)組成,結點可以在運行時動態生成。

每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲結點地址的指針域。

鏈表結構有單向鏈表與雙向鏈表

單向鏈表

鏈表中只有一條鏈子,不能保證元素的順序(存儲元素和取出元素的順序有可能不一致)

雙向鏈表

鏈表中有兩條鏈子有一條鏈子是專門記錄元素的順序,是一個有序的集合

說明

鏈表中的每一個元素也稱之為一個節點

一個節點包含了一個數據源(存儲數據),兩個指針域(存儲地址),一個指針域存儲本節點的地址,一個指針域存儲第一個節點的地址

 

采用該結構的特點

多個結點之間,通過地址進行連接。例如:多個人手拉手,每個人使用自己的右手拉住下個人的左手,依次類推,這樣多個人就連在一起了。

查找元素慢:想查找某個元素,需要通過連接的節點,依次向后查找指定元素。

增刪元素快:增加或刪除某個元素只需修改一下連接元素之間的地址值即可

為什么說鏈表查詢慢,增刪快

查詢慢:鏈表中地址不是連續的每次查詢元素都必須從頭開始查詢

增刪快:鏈表結構增加/刪除一個元素對鏈表的整體結構沒有影響,所以增刪快

圖形理解

每個node

 

 單向鏈表node之間的連接(無序的)

 

 雙向鏈表node之間的連接(有序的)

 

 假如想要增刪數據,只需更改連接下一個node的地址值即可

數據額結構:紅黑樹

首先簡單了解一下計算機中的樹(如圖:“下面分支的連接不是箭頭,而是線”)

 

 什么是二叉樹

分支不能夠超過兩個的樹

如:

 

什么是排序樹/查找樹

在二叉樹的基礎上,元素是有大小順序的,左子樹小,右子樹大

如:

 

 平衡樹

左子樹 = 右子樹

如:

 

 不平衡樹

左子樹 != 右子樹

 

如:

紅黑樹

特點

趨近於平衡樹,查詢的速度非常的快,查詢葉子節點最大次數和最小次數不能超過2倍

約束

1.節點可以是紅色的或者黑色的

2.根節點是黑色的

3.葉子節點(空節點)是黑色的

4.每個紅色的節點的子節點都是黑色的

5.任何一個節點到其每個葉子節點的所有路徑上黑色節點數相同

例如:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM