线性表类型的定义
线性表是由同类数据元素构成的有序序列的线性结构
表中元素个数(n>=0)称为线性表的长度,n=0时称为空表。
在复杂线性表中,一个数据元素可以由若干个数据项(item)组成。这种情况下,常把数据元素称为记录(record),含有大量记录的线性表称为文件(file)。
线性表中的数据元素可以是各种各样的,但是同一线性表中元素必定具有相同的特性,即统一数据对象相邻元素之间存在着序偶关系。
抽象数据类型线性表的定义:
ADT List{
数据对象:D={
ai|ai∈ElemSet,i=1,2,...,n,n>=0}
数据关系:R1={
<ai-1,ai>|ai-1,ai∈D,i=2,...,n}
基本操作:
InitList(List &L) 构造空的线性表
DestoryList(List &L) 销毁线性表
ClearList(List &L) 将线性表重置为空表
ListEmpty(List L) 判断线性表是否为空
ListLength(List L) 输出线性表的长度
GetElem(List L,int i,ElementType &e) 用e返回表中的第i个元素值
ListInsert(List &L,int i,ElementType e) 在位序i前面插入新元素e,表长加一
ListDelete(List &L,int i,ElementType e) 删除第i个数据元素,并用e返回其值,L的长度减
ListTraverse(List L,visit()) 依次对L中的每个元素调用函数visit()
}
线性表的顺序表示和实现
线性表的顺序存储:
线性表的顺序存储结构示意图
存储地址 | b | b+l | … | b+(i-1)*l | … | b+(n-1)l | b+nl | … | b+(maxlen-1) |
---|---|---|---|---|---|---|---|---|---|
内存状态 | a1 | a2 | … | ai | … | an | |||
下标 | 1 | 2 | … | i | … | n | 空闲 | 空闲 | 空闲 |
以下为伪代码描述:
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct{
ElementType *elem; //存储空间基址
int length; //当前长度
int listsize //当前分配的存储容量
}SqList;
//构造一个空的线性表
Status InitList_Sq(List &L){
L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //动态分配内存
if(!L.elem) exit(OVERFLOW); //存储分配失败
L.length = 0; //空表长度为0
L.listsize = LIST_INIT_SIZE; <