线性表
数学模型为线性结构,其中的数据元素存在一对一的关系:
存在唯一的被称为“第一个”的数据元素;
存在唯一的被称为“最后一个”的数据元素;
除第一个之外,集合中的每个数据元素有唯一的直接前驱;
除最后一个之外,集合中的每个数据元素有唯一的直接后继。
线性表、栈、队列等是线性结构
线性表的定义:
线性表:是n(n≥0)个数据元素的有限序列,记作 List=(a1,a2,......,an), n为表长,n=0时为空表; n>0 时为非空表,满足以下条件:
1 ai (1≤i≤n-1)有唯一的直接后继ai+1 ai (2≤i≤n)有唯一的直接前驱ai-1
2 有唯一的被称为“第一个”的数据元素a1,和唯一 被称为“最后一个”的数据元素an
3 a1到an的性质完全相同,属同一数据对象
数据元素在线性表中的位置取决于它自身的序号
线性表抽象数据类型定义
ADT List{ // List是为线性表抽象数据类型起的名字
数据对象: D={ai: ai 属于ElemSet;1<=i <=n;n>=0}
数据关系: R={<ai, ai+1>: ai, ai+1 属于 D, 1<=i <=n-1}
基本操作:
InitList(&L)
初始条件:表L不存在 操作结果:构造一个空的线性表
DestroyList(&L)
初始条件:线性表L存在
操作结果:销毁线性表L ClearList(&L)
初始条件:线性表L存在 操作结果:将线性表L置为空表
ListEmpty(L)
初始条件:线性表L存在。 操作结果:若L为空,则返回TRUE;否则
返回FALSE。 GetElem(L,i, &e)
初始条件:表L存在且1 <=i <=List Length(L)
操作结果:返回线性表L中的第i个元素的值 List Length (L)
初始条件:表L存在 操作结果:返回线性表中的所含元素的个数 ......
}ADT List
若实现了线性表的抽象数据类型定义,那么可 以定义该类型的变量,并调用其包含的基本操作,例如:
List L;
GetElem(L,5, &e); printf(“%f”,e);
实现了线性表的抽象数据类型定义(1)解决存储(2)实现操作
线性表的顺序表示和实现:
线性表顺序存储结构是用一组地址连续的存储单元依次存储线性表的数据元素
以顺序存储结构存放的线性表称为顺序表
方法一静态数组实现: