一、线性表的定义
线性表是具有相同数据类型 的 n(n ≥ 0)个数据元素的有限序列。
- 当 n = 0 时,称为空表。
- 一般表示为:
L=(a1,a2,...,ai,ai+1,...,an)
重要概念:
a₁是表头元素 ,aₙ是表尾元素。- 位序从1开始(注意:与数组下标从0开始不同)。
- 每个元素(除第一个)有且仅有一个直接前驱 ;每个元素(除最后一个)有且仅有一个直接后继。
二、线性表的三要素
- 逻辑结构:元素之间是一对一的线性关系。
- 数据的运算:增删改查等基本操作。
- 存储结构:顺序存储(数组)或链式存储(链表),影响运算的实现方式。
三、线性表的基本操作
1. 初始化与销毁
InitList(&L):初始化空表,分配内存。DestroyList(&L):销毁表,释放内存。
2. 增删操作
ListInsert(&L, i, e):在位置i插入元素e。ListDelete(&L, i, &e):删除位置i的元素,并通过e返回。
3. 查找操作
LocateElem(L, e):按值查找,返回位置。GetElem(L, i):按位查找,返回元素值。
4. 其他常用操作
Length(L):返回表长。PrintList(L):输出所有元素。Empty(L):判断是否为空表。
四、注意事项
关于"引用传递 &"
-
若函数需修改参数并"带回来"(如初始化、插入、删除),则需使用引用
&。 -
示例:
void InitList(List &L); // 初始化需修改L void ListDelete(List &L, int i, ElemType &e); // 删除后通过e返回值
操作封装的意义:
- 提高代码复用性、可读性、降低出错风险。
- 便于团队协作。
五、常见问题示例
❓问:所有整数按递增次序排列是线性表吗?
✅答:不是,因为整数集是无限的,而线性表必须是有限序列。
六、复习提示
- 理解线性表的逻辑结构 与存储结构的区别。
- 掌握基本操作的函数声明 与使用场景。
- 注意位序从1开始 ,数组下标从0开始。
- 理解"引用 &"在参数传递中的作用。