看到数组,马上想到!
空间连续,类型相同。
顾名思义,数组的特点就是空间连续,并且你类型不同也不能让你成为一个数组啊对吧。
数组与链表的区别:
- 链表是链式存储,数组是顺序存储。
- 链表通过指针连接元素与元素,而数组则是把所有元素按顺序进行存储。
- 链表插入删除简单,容易实现长度扩充,但是查询元素比较困难;数组查询快,但是删除增加会比较麻烦。
这里着重说一下数组增删改查的效率问题:
- 暂且认为,一切数组和链表的增删改查效率均为O(n)。
- 无序数组的添加:O(1)。
- 有序数组的查找:O(logn),二分。
- 无序链表的添加:O(1)。
- 最后认为,剩余的情况,都是O(n)。
为什么数组删除还是O(n)呢?
要这样想,你不一定是一定删除最后一个吧?如果不是,就要考虑到其余元素向前移位的情况,那么就是O(n)了。
同理增加,你申请的空间已经固定了,那么你要增加的话,就得来一个更大的空间,来替换,所以还是复杂的。
数组按照索引查找,是O(1),但是按照内容,就变成了O(n)。所以说,根据数组下标,可以随机访问当前数组内的内容。
结论就是:数组针对下标索引搜索,效率就是O(1),如果是根据内容搜索,就是O(n)。
数组是线性结构,但也是重要的顺序结构。