线性表

1. 线性表概念(线性数据存储结构)

  相同类型的有限序列

  数据存储的本质是内存上的一个空间。

2. 线性表的分类
  1. 顺序存储结构

    当数据存储时,不用记录数据的位置。直接找来内存中一整块空间,来依照顺序存储连续的一组数据,保证数据物理上的线性。

    数组,ArrayList(底层是动态数组)

  2. 链式存储结构

    当数据存储时,不用分配整块的空间,各个数据分配在不同的内存地址,只是存数据的同时,指向下一次存储的数据的位置(前驱和后继),保证数据逻辑上的线性。

    linkedList

3. 顺序表和链表的区别

  参考:https://blog.csdn.net/qq_15037231/article/details/51816757  

  1.顺序表

    访问指定元素时无需从头遍历,通过计算便可获得对应地址,其时间复杂度为O(1)。

  扩充策略:

  • 每次扩充增加固定数目的存储位置,如每次扩充增加10个元素位置,这种策略可称为线性增长。

    特点:节省空间,但是扩充操作频繁,操作次数多。

  • 每次扩充容量加倍,如每次扩充增加一倍存储空间。

    特点:减少了扩充操作的执行次数,但可能会浪费空间资源。以空间换时间,推荐的方式。2.

  面试题:

    ArrayList和LinkedList的区别(也是顺序表和链表的区别):

    (1)ArrayList是基于动态数组实现的,LinkedList是基于双向链表实现的。

    (2)ArrayList支持随机访问(通过下标),LinkedList不支持。

    (3)ArrayList的查询和尾部插入元素效率较高,中间插入和删除元素效率较低,因为有大量的数组复制操作。
      LinkedList的插入和删除效率较高,只需要把节点指针改变一下就行,但是查询效率较低,即使有双向链表的特性可以从两个方向查找,但还是需要使用蛮力法的方式进行遍历,所以效率较低。

    (4)ArrayList会造成一定的空间浪费,因为随时需要探测数组容量然后扩容;LinkedList通过节点方式进行存放数据,不存在空间浪费。

原文地址:https://www.cnblogs.com/luruihua/p/11896943.html