文章目录
线性表(list)
定义:
由零个或多个数据元素组成的有限序列
注意点⭐:
- 它是一个序列,有先后关系
- 若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他元素有且只有一个前驱和后继
- 线性表是有限的
基本操作:
- InitList( *L ):初始化线性表
- ListEmpty( L ):判断线性表是否为空
- ClearList( *L ):清空线性表
- GetElem( L , i , *e ):获取线性表第i个位置的元素并赋值给e
- locateElem( L , e ):判断线性表中是否有值为e的元素
- ListInsert( *L , i , e ):在线性表中第i个位置插入值为e的元素
- ListDelete( *L , i , *e ):删除线性表的第i个元素并赋值给e
- ListLength(L):获取线性表的当前长度
线性表的顺序存储方式
结构定义:
#define MAXSIZE 50 //自定义值
typedef int ElemType;
typedef struct {
ElemType data[MAXSIZE];
int length; //线性表的当前长度
}SqList;
线性表的单链表存储方式
结构定义:
typedef int ElemType;
typedef struct Node {
ElemType data; //数据域
struct Node * Next; //指针域
}Node;
typedef struct Node* LinkList;
顺序存储和链式存储的优缺点
1. 顺序存储
优点
- 无须为表示表中元素之间的逻辑关系而增添额外的存储空间
- 可以快速地访问表中任意位置的元素
缺点
- 插入和删除元素时需要移动大量元素
- 容易造成存储空间的“碎片”
- 当线性表长度变化较大时,难以确定存储空间的容量
2. 链式存储
优点
- 插入或删除元素时很方便
- 不需要分配存储空间,只要有空间可以随意增加元素
缺点
- 存储密度小,存储空间利用率低
3.优缺点对比
分配方式
- 顺序存储采用的是一段连续的存储单元,依次存储线性表中的元素
- 链式存储采用一组任意的存储单元来存储线性表中的元素
时间性能
- 查找:顺序存储O(1),链式存储O(n)
- 插入或删除:顺序存储O(n),链式存储O(1)
空间性能
- 顺序存储结构需要预分配存储空间,容易造成空间浪费或者溢出等问题
- 链式存储不需要预分配存储空间,只要有就能够分配,元素的个数也不受限制
结论
- 若需要频繁查找元素,应该优先考虑顺序存储
- 若需要频繁插入和删除元素,则应该优先考虑链式存储