学好数据结构,就等于成功了一半。
程序是对现实的模拟,现实是由时间和空间组成的,高效的人都是用最少的时间、最少的空间来做最伟大的事,程序亦是如此。我们要选择最合理的算法和最合理的数据结构,来写最好的代码,这也正是时间复杂度和空间复杂度的要求。
所以,学好数据结构,选择合理的数据结构,降低时空复杂度,就等于成功了一半。
我们可以将数据结构分为两大部分:线性数据结构和非线性数据结构。
-
线性数据结构
:数据元素之间的关系是一对一的。
-
非线性数据结构
:数据元素之间的关系不是一对一的。
线性数据结构
数据元素之间的关系是一对一的。可以简单地记忆为:一根绳子不分叉!
这是嘛意思呢?
可以这么理解:我有一根绳子,上面打了好多结,我随便找到一个结点,不管往哪一端捋,都只能找到一个点,除非到头了导致没结点了。说白了就是:这根绳子没有分叉。
比如我们生活中的排队,就是这个模型。你前后最多都只有一个人,也就是:一对一的。
这个模型有很多衍生物,我们来逐个看下。
1. 顺序表
顺序表是紧密相邻的线性数据结构。便于查找元素,不便于插入和删除元素。
也就是说:顺序表的所有元素都是一个挨一个的。
比如