數據結構思想

程序的好壞一般來說有2個標準,一個是時間複雜度,一個是空間複雜度時間複雜度說的是程序運行的時間空間複雜度說的是程序的內存佔用的多少。

而數據結構就是爲了解決時間複雜度的,或者說一個好的數據結構(算法)可以節省程序運行的時間。

線性結構

顧名思義,線性表是一條線的。首先要稍稍提一下,數據結構的存儲只有數組(Array)鏈表(Linklist)2種方式來實現。任何的數據結構都會涉及到創建,插入,刪除這幾個操作

所以線性表同樣的,可以由數組和鏈表來實現。其中線性表又分爲2種形式一種叫堆棧(Stack),一種叫隊列(Queue)

堆棧

堆棧的特點是先進後出,後進先出。它的實現就是普通的數組和單向鏈表。

隊列

隊列的特點是先進先出,後進後出。就像排隊一樣。實現方法也是普通的數組和單向鏈表。只是思路變換了,不是什麼大難題。

接下來纔是我想特別寫的樹(tree)

樹的開始,我們來先說說二分查找https://baike.baidu.com/item/二分查找/10628618?fr=aladdin(我相信百度會比我說的好的)

二分查找的前提條件是這一堆數據必須是順序存儲,升序降序都可以,但是必須要順序。然後每次都拿中間項與查找項比較。

二分查找的優勢在於,它100%能排除到一半的數據,所以相比於堆棧和隊列的查找方式會快很多。 那麼通過二分查找來引出我們的

樹,

通過二分查找你有沒有發現,不管查找了多少次,查找的方向是左還是右,都是按照一定的規律進行的。我們來畫一個圖就看看

 

 我們查找2和5就一定會在第2次找到,我們要找1,4,6就一定會在第3次找到。也就是說在二分查找中,某個數據被查找的次數是固定的。而這樣一個圖是不是很像一個樹呢?其實這就是樹。

樹的概念

每一個元素都稱爲結點(node)(後面改了,下面的節點全部當成結點對待O(∩_∩)O)

樹和子樹

根:根是一個相對概念,比如對2節點5節點來說他們的根就是3節點1節點的根就是2節點4節點6節點的根是5節點

邊:就是上面的藍色箭頭。一個擁有N個節點的樹有N-1條邊。 

結點的層次:根結點的層次爲1,其餘結點的層次爲父結點層次+1 。

子樹:子樹同樣也是一棵樹,所以他們也擁有自己的根。每個子樹是互不相交的,如果子樹之間相交則不能稱之爲樹。除了根節點以外,每個節點只有一個父節點。

節點的度:一個節點的子樹個數。

樹的度:一棵樹中最大的節點的度作爲樹的度。例如上面,3節點的度是2。2節點的度是1。5節點的度是2 。所以這棵樹的度是2 

葉節點:度爲0的節點。用人話來說就是層次最低的節點。->1,4,6這幾個就是葉節點。 

父子節點:這是一個相對概念,需要注意的是父子關係只存在於相鄰的上下層次間。比如3是5的父節點,而不是4or6的父節點。

兄弟節點:在同一層次的節點稱爲兄弟節點。

路徑和路徑的長度:就是某一個節點沿着層層父節點往上走的軌跡。經過的箭頭就是該路徑的長度。

祖先節點:與父子節點類似,沿着一條向上的路徑,該路徑上所以的節點都是出發點的祖先節點。

子孫節點:沿着一條向下的路徑,該路徑所以的節點都是出發點的子孫節點。

樹的深度:樹的所有結點中最大的層次。

二叉樹:

簡單來說,一個node裏含有數據域和指針域(含有1個FirstChild指針和1個NextSibling指針)

二叉樹的種類

無序樹,有序樹,完全二叉樹,滿二叉樹。

完全二叉樹:

除了葉結點外,其餘結點的指針域都不是NULL;

滿二叉樹:

是從完全二叉樹衍生的一種樹,滿二叉樹只能缺少葉結點。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章