MIT公開課沒有講到的內容,介紹幾種基本數據結構
- 棧和隊列
- 鏈表
- 二叉樹
棧和隊列
棧和隊列都是動態集合,元素的出入是規定好的。棧規定元素是先進后出(FILO),隊列規定元素是先進先出(FIFO)
棧的基本操作包括入棧push和出棧pop,棧有一個棧頂指針top,指向最新如棧的元素,入棧和出棧操作操作都是從棧頂端進行的
棧操作
隊列的基本操作包括入隊enqueue和出隊dequeue,隊列有隊頭head和隊尾tail指針。元素總是從隊頭出,從隊尾入。采用數組實現隊列時候,為了合理利用空間,可以采用循環實現隊列空間的有效利用。
隊列操作
鏈表
鏈表與數組的區別是鏈表中的元素順序是有各對象中的指針決定的,相鄰元素之間在物理內存上不一定相鄰。采用鏈表可以靈活地表示動態集合。鏈表有單鏈表和雙鏈表及循環鏈表。
雙鏈表L的每一個元素是一個對象,每個對象包含一個關鍵字和兩個指針:next和prev。鏈表的操作包括插入一個節點、刪除一個節點和查找一個節點
雙鏈表操作
二叉樹
二叉樹(Binary Tree)是一種特殊的樹型結構,每個節點至多有兩棵子樹,且二叉樹的子樹有左右之分,次序不能顛倒
二叉樹
二叉樹的性質
- 在二叉樹中的第i層上至多有2(i-1)個結點(i>=1)。備注:表示此方
- 深度為k的二叉樹至多有2^k-1個節點(k>=1)。
- 對任何一棵二叉樹T,如果其終端結點數目為n0,度為2的節點數目為n2,則n0=n2+1
可以采用順序存儲數組和鏈式存儲二叉鏈表兩種方法來存儲二叉樹
遍歷二叉樹
先序遍歷:先訪問根節點,然后先根遍歷左子樹,最后先根遍歷右子樹
中序遍歷:先中根遍歷左子樹,然后訪問根結點,最后中根遍歷右子樹
后序遍歷:先后根遍歷左子樹,然后后根遍歷右子樹,最后訪問根結點