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。
 
  思考题如果你已经学习了C++语言,那么你认为这里讨论的顺序表类型和C++语言中的 "类" 有何联系?