3.1.2 栈的存储表示和操作的实现

一、顺序栈类型的定义

// 结构定义:

 typedef struct {
  ElemType *base; // 存储空间基址
  int top;     // 栈顶指针
  int stacksize;  // 允许的最大存储空间以元素为单位
 } Stack;
 
 
  和线性表类似,栈也有两种存储表示,其顺序存储结构简称为顺序栈。
  和顺序表类似,对顺序栈也需要事先为它分配一个可以容纳最多元素的存储空间,base 为这个存储空间的基地址,也即一维数组的地址。
  从名称来讲,"栈顶指针"意为指示栈顶元素在栈中的位置,但它的值实际是栈中元素的个数,和顺序表中的 length 值的意义相同。
  为了应用方便,这个"最大空间的容量"应由使用这个顺序栈的程序员决定,它的默认值和顺序表的默认值相同。
 
 
  // 基本操作接口(函数声明):
 void InitStack (Stack &S,int maxsize);
 // 构造一个最大存储容量为 maxsize 的空栈S。

 void DestroyStack (Stack &S);
 // 销毁栈S,S 不再存在。

 void ClearStack (Stack &S);
 // 将 S 置为空栈。

 bool StackEmpty (Stack S);
 // 若栈 S 为空栈,则返回 TRUE,否则返回 FALSE。

 int StackLength (Stack S);
 // 返回S的元素个数,即栈的长度。

 bool GetTop (Stack S, ElemType &e);
 // 若栈不空,则用 e 返回S的栈顶元素,并返回TRUE;否则返回 FALSE。

 bool Push (Stack &S, ElemType e);
 // 若栈的存储空间不满,则插入元素 e 为新的栈顶元素,并返回 TRUE;
 // 否则返回FALSE。


 bool Pop (Stack &S, ElemType &e);
 // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回TRUE;否则返回FALSE。
 
     
   void StackTraverse(Stack S, void (*visit(ElemType ))
 // 依次对S的每个元素调用函数 visit( ),一旦 visit( )失败,则操作失败。
    在你学完了线性表之后,不难写出这些函数的定义,不妨试试,看看和下页中给出的是否一致。