Round 1:逻辑结构
都属于线性表,都是线性结构
Round 2:存储结构
都属于线性表,都是线性结构
顺序表(顺序存储) | 链表(链式存储) |
---|---|
优点:支持随机存取、存储密度高 | 优点:离散的小空间分配方便,改变容量方便 |
缺点:大片连续空间分配不方便,改变容量不方便 | 缺点:不可随机存取,存储密度低 |
Round 3:基本操作
静态分配:静态数组(系统自动回收空间)
动态分配:动态数组(malloc、free(需要手动free))
typedef struct{
ElemType data;
int MaxSize;
int length;
}SeqList;
L.data = (ElemType *)malloc(sizeof(ElemType)*InitSize);
free(L.data);
注意:malloc和free必须成对出现(malloc处于堆区)
顺序表:
插入/删除元素要将后续元素都后移/前移
时间复杂度O(n),时间开销主要来自移动元素,若数据元素很大,则移动的时间代价很高
按位查找:O(1)
按值查找:O(n),若表内元素有序,可在O(log2n)时间内找到
链表:
插入/删除元素只需修改指针即可
时间复杂度O(n),时间开销主要来自查找目标元素,查找元素的时间代价更低
按位查找:O(n)
按值查找:O(n)
用顺序表还是链表?
顺序表 | 链表 | |
---|---|---|
弹性(可扩容) | × | √ |
增、删 | × | √ |
表长难以预估、经常要增加/删除元素 -------用链表
表长可预估、查询(搜索)操作较多 -------用顺序表