1、存取(读/写)方式
顺序表可以顺序存取,也可以随机存取,在第i个位置上执行存取操作,顺序表仅需一次访问.
链表只能从表头开始依次顺序存取,链表在第i个位置执行存取则需从表头开始依次访问i次.
2、逻辑结构与物理结构
顺序表和链表都属于线性表,都是线性结构。
顺序存储逻辑上相邻的元素,对应的物理存储位置也相邻,链式存储逻辑上相邻的元素物理存储位置不一定相邻,对应的逻辑关系是通过指针链接来表示的。
3、创销、增删改查
基本操作—创建
- 顺序表:需要预分配大片连续空间。 若分配空间过小,则之后不 方便拓展容量;若分配空间 过大,则浪费内存资源。
静态分配:静态数组,容量不可改变。
动态分配:动态数组(malloc、free),容量可以改变,但是需要移动大量元素,时间代价高。 - 链表:只需分配一个头结点(也可 以不要头结点,只声明一个 头指针),之后方便拓展
基本操作 - 销毁
- 顺序表:修改 Length = 0
- 链表:依次删除各个结点 (free)。
基本操作 - 增/删
- 顺序表:插入 / 删除元素要将后续元素后移 / 前移
时间复杂度O(n),时间开销主要来自于移动元素
若数据元素很大,则移动的时间代价很高 - 链表:插入 / 删除元素只需要修改指针即可
时间复杂度O(n),时间开销主要来自查找目标元素
查找元素的时间代价更低
基本操作 - 查找
- 顺序表
按位查找:时间复杂度O(1)
按值查找:时间复杂度O(n),若表内元素有序,可在 O(log2n) 时间内找到(二分法) - 链表
按位查找:时间复杂度O(n)
按值查找:时间复杂度O(n)
开放性问题答题思路
Q:请描述顺序表和链表的 bla bla bla… 实现线性表时,用顺序表还是链表好?
A:顺序表和链表的逻辑结构都是线性结构,都属于线性表。 但是二者的存储结构不同,顺序表采用顺序存储…(特点,带来的优点缺点);链表采用链式存储…(特 点、导致的优缺点)。 由于采用不同的存储方式实现,因此基本操作的实现效率也不同。当初始化时…;当插入一个数据元 素时…;当删除一个数据元素时…;当查找一个数据元素时...