话说我一个测试人员为啥要学算法呢?说白了,都是生活所迫。
如今大厂面试哪一个不考点算法,若是想过关,那就得刷题,可是一个小白,直接刷题只会被困难劝退。
因此,索性就学一下算法,不说能学的多深,可是总归不至于抓瞎。面试
言归正传,都知道数据结构是算法的基础。也就是说,虽然你学好数据结构不必定就能作好题,可是你学很差
数据结构,必定作很差题。算法
数据结构能够分为2大类:线性结构与非线性结构。数组
线性结构是最经常使用的数据结构,而其常见的形式有:数组、队列、链表和栈。数据结构
线性结构的特色就是:数据元素之间存在着一对一的线性关系。好比说:
有一个数组a = [1, 3, 2, 5, 6]
,因而a[3] = 5
,当数组下标为3的时候,就有一个对应的值是5。
同理,a[1] = 3
,也是这样1对1
的关系。测试
而在线性结构中,又存在2种不一样的存储结构:顺序存储结构、链式存储结构。code
顺序存储结构:
顺序存储结构的线性表称为顺序表,它的存储元素是连续的(内存地址连续,好比数组)。队列
链式存储结构:
链式存储结构的线性表称为链表,它的存储元素不必定是连续的,元素节点中存放数据元素以及相邻元素的地址信息,
好比,单链表、双向链表。由于地址不连续,因此能够利用碎片内存。内存
与线性结构相反,非线性结构就不是1对1的关系了。它包括:二维数组、多维数组、广义表、树结构、图结构。
数组相对来讲还算比较简单,可是在应用中,树结构跟图结构算是用的最多的。基础
单从树结构与图结构,就能够延伸出不少算法。链表