一、线性表的定义和特点
线性表是具有相同特性的数据元素的一个有限序列:
L
=
(
a
1
,
a
2
,
.
.
.
,
a
i
−
1
,
a
i
,
a
i
+
1
,
.
.
.
,
a
n
)
L = (a_1, a_2, ..., a_{i-1}, a_i, a_{i+1}, ..., a_n)
L=(a1,a2,...,ai−1,ai,ai+1,...,an)
要注意的问题是:
- 线性表是一个由数据元素组成的序列。
- 线性表中元素的数据类型是相同的,这意味着每个元素在内存中所占用的空间是相同的。
- 线性表中的元素是有限的。
在一个线性表中,a1
是起始节点,an
是终端节点;中间的一个元素ai
的前一个元素ai-1
被称为是元素ai
的直接前驱,后一个元素ai+1
被称为是元素ai
的直接后继。
线性表中元素的下标,是元素的序号,表示元素在线性表中所处的位置;线性表中最后一个元素的序号n
称为线性表的长度,即线性表中元素的总个数;如果n = 0
,则表示线性表中没有元素,称此线性表是一个空表。
从上面的定义可以看出,一个长度至少为2的线性表具有如下的逻辑特征:
- 它有且仅有一个开始节点
a1
,它没有直接前驱,只有一个直接后继a2
。 - 它有且仅有一个终端节点
an
,它没有直接后继,只有一个直接前驱an-1
。 - 任何内部节点
ai
都有且仅有一个直接前驱ai-1
和一个直接后继ai+1
(2≤i≤n-1
)。
二、线性表的类型定义
ADT List {
数据对象:D = 线性表中元素的集合。
数据关系:R = { <ai-1, ai> | ai-1, ai ∈ D, i = 2, 3, ..., n }
基本操作:
ListInit(L); // 初始化一个线性表。
ListClear(L); // 清空一个线性表。
ListEmpty(L); // 判断线性表是否是一张空表。
ListLength(L); // 获取线性表的长度。
ListInsert(L, i, e) // 在线性表的指定位置插入一个元素。
ListDelete(L, i, e) // 从线性表的指定位置删除一个元素。
ListGetElem(L, i, e) // 获取线性表中指定位置的值。
ListSetElem(L, i, e) // 修改线性表中指定位置的值。
ListLocateElem(L, e, compare) // 在线性表中定位某个元素的下标。
PriorElem(L, cur, &pre) // 获取线性表中某个元素的直接前驱。
NextElem(L, cur, &nxt) // 获取线性表中某个元素的直接后继。
ListDestroy(L); // 销毁一个线性表。
}