數據結構:棧
簡介
棧(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.任何一個節點到其每個葉子節點的所有路徑上黑色節點數相同
例如: