話說我一個測試人員爲啥要學算法呢?說白了,都是生活所迫。
如今大廠面試哪一個不考點算法,若是想過關,那就得刷題,可是一個小白,直接刷題只會被困難勸退。
因此,索性就學一下算法,不說能學的多深,可是總歸不至於抓瞎。面試
言歸正傳,都知道數據結構是算法的基礎。也就是說,雖然你學好數據結構不必定就能作好題,可是你學很差
數據結構,必定作很差題。算法
數據結構能夠分爲2大類:線性結構與非線性結構。數組
線性結構是最經常使用的數據結構,而其常見的形式有:數組、隊列、鏈表和棧。數據結構
線性結構的特色就是:數據元素之間存在着一對一的線性關係。好比說:
有一個數組a = [1, 3, 2, 5, 6]
,因而a[3] = 5
,當數組下標爲3的時候,就有一個對應的值是5。
同理,a[1] = 3
,也是這樣1對1
的關係。測試
而在線性結構中,又存在2種不一樣的存儲結構:順序存儲結構、鏈式存儲結構。code
順序存儲結構:
順序存儲結構的線性表稱爲順序表,它的存儲元素是連續的(內存地址連續,好比數組)。隊列
鏈式存儲結構:
鏈式存儲結構的線性表稱爲鏈表,它的存儲元素不必定是連續的,元素節點中存放數據元素以及相鄰元素的地址信息,
好比,單鏈表、雙向鏈表。由於地址不連續,因此能夠利用碎片內存。內存
與線性結構相反,非線性結構就不是1對1的關係了。它包括:二維數組、多維數組、廣義表、樹結構、圖結構。
數組相對來講還算比較簡單,可是在應用中,樹結構跟圖結構算是用的最多的。基礎
單從樹結構與圖結構,就能夠延伸出不少算法。鏈表