<font color="pink">數據結構= 程序 + 算法 </font>java
數據結構有什麼用node
當咱們使用着java官方給你提供的容器的時候,咱們用起來是很是方便的,ArrayList實際上是一個無線擴充的數據LinkedList實際上是一個鏈表。 現實世界中存儲數據,咱們要經過一些工具或者建模來進行存儲。每種數據結構都有本身的優缺點。 而算法,在這麼多的數據中若是以最快的速度實現插入,刪除,查找數據問題 咱們java語言是一種面向對象的編程語言,java就至關於自動檔汽車,C語言至關於手動擋汽車,python就是無人駕駛汽車,數據結構至關於變速箱的工做原理,若是你懂變速箱的工做原理,那麼不但能夠開車,也可修車,還能夠造車 數據結構內容很是多,咱們接收java當中常見的數據結構:堆棧,隊列,數組,鏈表和紅黑樹
常見的數據結構:python
數據存儲的常見結構:棧,隊列,數組,鏈表,和紅黑樹。算法
棧編程
棧,stack,又稱爲堆棧,他是運算受限的線性表結構,它的限制是僅容許在標的一端插入和刪除操做,不容許在其餘任何位置進行添加,查找,刪除等操做。數組
簡單的說,採用結構的集合,對元素的存取有如下特色數據結構
先進後出(存進去的元素,要在他後面的元素依此取出後,再能取出該元素)。例如:子彈壓進彈夾的動做編程語言
空棧:棧頂棧底相等ide
壓棧:存儲元素,元素存儲到棧的頂端位置,棧中已有的元素依此向棧底移動一個位置。工具
彈棧:取元素,棧的頂端位置元素取出,棧中已有元素依此向棧頂方向移動一個位置。
隊列
隊列,queue,簡稱對,它同堆棧幾乎同樣的,也是一種受限制的線性表結構,它的限制是僅容許在標的一端進行插入,在標的另外一端進行刪除。
簡單的說,採用該結構的集合,對元素的存儲有如下特色:
先進先出(存進去的元素,要在他前面的元素依此取出後,才能取出該元素)。列如:火車過隧道,火車頭先從山洞出來,車尾後出來。
數組
數組,Array,是有序的元素序列,數組在內存當中開闢一段連續的空間,並再此空間內存儲元素。列如:生活中的酒店當中的房間號是連續的,不間斷,有50個房間,從001--050每一個房間都有固定的編號,經過編號就能夠快速找到酒店房間的住戶。
簡單的說,採用此結構的集合,對元素取出有如下特色:
<img src="image\137b3856-0ae2-4eb9-9d5a-45d387c60da2.jpg" style="zoom:20% ;" />
查找元素塊,經過索引,能夠快速的訪問到指定位置的元素。
<img src="image\Snipaste_2020-12-02_15-51-23.png" title="style" style="zoom:80%;" />
鏈表結構
鏈表,linked list,由一系列結點node(鏈表當中的每個元素稱爲節點)組成,節點能夠在運行時動態生成。每一個節點包含兩個部分;存儲數據元素的數據域;用來存儲下一個節點的指針域。咱們常說的鏈表結構有單向列表和雙向鏈表
鏈表對元素的存取的特色
多個節點之間,經過地址進行鏈接。好比:多我的玩丟手絹,每一個人右手拉住下一我的的左手,上一我的的左手拉着該人的右手,以此類推,多我的就被鏈接起來了。
查詢元素比較慢:想要查找某個元素,須要經過鏈接的節點,依此向後查詢指定的元素。
增長一個元素:只須要修改鏈接下一個元素的地址便可。
鏈表結構的特色
查詢慢:鏈表結構的地址不是連續的,每次查詢元素,都必須從頭開始查詢。
增刪快:鏈表結構中,對
紅黑樹
二叉樹: binary tree ,每一個節點數不超過2的數(tree)
簡單的理解,就是相似於咱們生活中的數的結構,只不過每一個節點上最多隻能有兩個子節點。
頂上的節點稱爲根節點,兩邊的稱爲左子樹,右子樹
紅黑樹的約束:
紅黑樹的特色:
查詢速度很是快,趨近於平衡樹,查找葉子元素最小和最大不能超過2倍。