2.2.1 顺序表 用C语言描述的顺序表类型如下所示: // 存储结构 const int MAXLISTSIZE=80; // 预设的存储空间最大容量 typedef struct { ElemType *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 允许的最大存储容量(以sizeof(ElemType)为单位) } SqList; // 俗称 顺序表 |
由于线性表的长度是可变的,因此对顺序表的定义除了需要一个存储元素的一维数组空间以外,还需要两个数据成员:其中一个指示顺序表中已有的元素个数,另一个指示该顺序表允许存放的数据元素个数的最大值,如下图所示。ElemType 为元素类型。 |
|||||||||
//
基本操作接口(函数声明) void InitList ( SqList &L, int maxsize ); // 构造一个最大存储容量为 maxsize 的空的顺序表 L。 |
maxsize 由用户设定,其默认值为系统设定值MAXLISTSIZE 。 |
|||||||||
void DestroyList
( SqList &L
) // 销毁顺序表 L。 bool ListEmpty ( SqList L ) // 若顺序表 L 为空表,则返回TRUE,否则返回 FALSE。 int ListLength ( SqList L ) // 返回顺序表 L 中元素个数。 int PriorElem ( SqList L, ElemType cur_e ) // 若 cur_e 是顺序表 L 的元素,则返回其前驱的位序 // (设第一个元素的前驱的位序为0),否则返回 -1。 int NextElem ( SqList L, ElemType cur_e ) // 若 cur_e 是顺序表 L 的元素,则返回其后继的位序 // (设最后一个元素的后继的位序为L的表长+1),否则返回 -1。 bool GetElem ( SqList L, int pos, ElemType &e ) // 若1≤pos≤LengthList(L),则用 e 带回顺序表 L 中第 pos 个元素 // 的值且返回函数值为TRUE,否则返回函数值为FALSE。 int LocateElem ( SqList L, ElemType e, bool (*compare)(ElemType, ElemType ) ) // 返回顺序表L中第1个与 e 满足关系 compare( ) 的数据元素的位序。 // 若这样的元素不存在,则返回值为0。compare( )为数据元素的判定函数。 void ListTraverse ( SqList L, void (*visit)(ElemType )) // 依次对顺序表 L 的每个元素调用函数 visit( )。 // 一旦 visit( ) 失败,则操作失败。 void ClearList( SqList &L ) // 将顺序表 L 重置为空表。 bool PutElem ( SqList L, int pos, ElemType &e ) // 若1≤pos≤LengthList(L),则对顺序表 L 中第 pos 个元素 // 赋值同 e 的值且返回函数值为 TRUE,否则返回函数值为 FALSE。 bool ListInsert ( SqList &L, int pos, ElemType e ) // 若存储空间未满且1≤pos≤LengthList(L)+1,则在顺序表 L 的 // 第 pos 个元素之前插入新的元素 e,L的长度增1,且返回函数值为TRUE, // 否则不改变顺序表且返回函数值为 FALSE。 bool ListDelete ( SqList &L, int pos, ElemType &e) // 若1≤pos≤LengthList(L),则删除顺序表 L 的第 pos 个元素 e, // L的长度增1,且返回函数值为TRUE,否则不改变顺序表且返回函数值为FALSE。 |
|