一、线性表的定义
线性表是具有相同数据类型 的 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开始。
- 理解"引用 &"在参数传递中的作用。