线性表(一)
线性表(linear list),也称有序表(ordered list),是线性结构的典型代表。数据元素之间仅具有单一的前驱和后继关系。
一、线性表的逻辑结构
1.线性表的定义
线性表简称表,是n(n≥0)个具有相同类型的数据元素的有限序列,线性表中数据元素的个数称为线性表的长度。长度等于零时称为空表,一个非空表通常记为:
L = (a1,a2,···,an)
ai-1 称为ai的前驱,ai 称为ai-1的后继。
2.线性表的抽象数据结构定义
ADT LinearList
{
Data
有限个元素的集合
Operation
InitList():线性表不存在,初始化,生成一个空表
Empty():若表为空,返回true,否则返回false
Length():返回线性表的大小(表的元素个数)
Get(index):返回线性表中索引为index的元素
IndexOf(x):返回线性表中第一次出现的元素x的索引。若x不存在,则返回-1
Insert(index,x):把x插入线性表中索引为index的位置上,索引大于等于index的元素其索引加1
Erase(index):删除索引为index的元素,索引大于index的元素其索引减1
DestroyList():销毁线性表,释放所有内存
PrintList():遍历输出线性表中的所有元素
}
endADT
二、线性表的存储结构及实现
1.线性表——数组描述
线性表的顺序存储结构称为顺序表(sequential list)。顺序表是用一段地址连续的存储单元依次存储线性表的数据元素。由于线性表中的每个数据元素的类型相同,通常用一维数组来实现顺序表。
顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。
使用顺序表存储数据之前,除了要申请足够大小的物理空间之外,为了方便后期使用表中的数据,顺序表还需要实时记录以下 2 项数据:
- 顺序表申请的存储容量;
- 顺序表的长度,也就是表中存储数据元素的个数;
因为在线性表中可以进行插入操作,顺序表申请的存储容量要大于顺序表的长度。
自定义顺序表
typedef struct Table