(CSDN数据结构基础系列课程截图)
数组
数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。
优点:
1、按照索引查询元素速度快
2、按照索引遍历数组方便
缺点:
1、构建时必须分配一段连续的空间,且数组的大小固定后就无法扩容了
2、查询数组是否存在需要遍历整个数组,添加,删除的操作同样,均需耗费O(n)的时间
3、数组只能存储一种类型的数据
适用场景:
频繁查询,对存储空间要求不大,很少增加和删除的情况。
链表
链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。
分类:
单链表:链表中的每一个元素实际上是一个单独的对象,而所有的对象都通过每个元素中的引用字段链接在一起。
双链表:与单链表不同,双链表的每个结点中都含有两个引用字段。
优点:
1、灵活地分配内存空间
2、能在O(1)时间内删除或者添加元素
缺点:
查询元素需要O(n)时间
(不能向数组那样 通过下标迅速读取元素
每次都要从头开始查询)
适用场景:
如果数据元素不确定 经常进行数据的添加和删除 比较适合链表
栈
操作受限制的线性表/数组,只能从尾部插入/删除,后进先出
算法基本思想:
可以用一个单链表来实现
只关心上一次操作
处理完上一次操作后,能在O(1)时间内查找到更前一次操作
队列
![](https://i-blog.csdnimg.cn/blog_migrate/43cc73591ca634355f226646d0cd3895.png)