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