Java常見基礎數據結構
棧:
stack
,又稱堆棧,他是運算受限的線性表,其限制是僅允許在表的一端進行插入和刪除操作,不允許在其他任何位置進行添加、查找、刪除等操作。
簡單的來說,采用該結構的集合,對元素的存取有如下幾個特點
1、先進後出。
2、棧的入口、出口都是棧的頂端位置。
壓棧:就是存元素,把元素存儲到棧的頂端位置,棧中已有元素一次向棧底方向移動一個位置。
彈棧:就是取元素,把棧頂端的元素取出,棧中已有元素依次向棧頂方向移動一個位置。
隊列:
queue
,簡稱隊,它同堆棧一樣,也是運算受限的線性表,其限制是隻允許在表的一端進行插入,而在表的另一端進行刪除。
簡單來說,采用該結構的集合,對元素的存取有如下的特點:
1、先進先出
2、隊列的入口、出口各占一側,例如左側為入口,右側為出口
數組:
Array
,是一個有序的元素序列,數組是在內存中開辟出一端連續的空間,並在此空間存放元素,可以通過索引快速找到對應的數據。
采用此方式存儲數據有如下幾個特點:
1、查找元素快,通過索引可以快速訪問指定位置的元素。
2、增刪元素慢,在指定索引位置增加元素,需要創建一個新的數組,將指定新元素存儲在指定的索引位置,然後再把原數組元素根據索引,復制到新數組對應的索引位置
刪除元素,需要創建一個新數組,把原數組元素根據索引,復制到新數組對應索引的位置,原數組中指定索引位置元素不復制到新數組中。
鏈表:
Linked List
,由一系列結點node組成,結點可以在運行時動態生成。每個結點包括兩部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。鏈表分為單向鏈表和雙向鏈表,雙向鏈表是指有上一個結點的引用和下一個結點的指針,單向鏈表是隻有下一個結點的指針。
簡單的說,采用該數據結構的集合,對數據的存儲有如下幾個特點:
- 多個結點之間,通過地址進行連接。
- 查詢慢,如果想查找某個元素,需要通過連接的結點依次向後查找。
- 增刪快,隻需要修改連接下一個元素的地址即可。
紅黑樹:
二叉樹:是每個結點不超過2的有序樹
簡單理解,二叉樹是每個結點最多有兩個子樹的樹結構。頂上的叫根節點,兩邊被稱作為左子樹和右子樹。
紅黑樹本身就是一顆二叉查找數,將節點插入後,該數仍然是一顆二叉查找數,也就意味之數的鍵值仍然是有序的。
紅黑樹的約束:
- 節點可以是紅色的或者黑色的
- 根節點是黑色的
- 葉子節點是黑色的
- 每個紅色節點的子節點都是黑色的
- 任何一個節點到其每一個葉子節點的所有路徑上黑色節點數相同
紅黑樹的特點:
速度特別快,趨近平衡樹,查找葉子元素最少和最多次數不多於兩倍。
總結
本篇文章就到這裡瞭,希望可以幫到你,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- 使用go實現常見的數據結構
- JavaScript數據結構與算法
- Java線程池隊列LinkedBlockingDeque
- Java二叉樹的四種遍歷方式詳解
- Java線程池隊列PriorityBlockingQueue和SynchronousQueue詳解