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( )失败,则操作失败。 |
在你学完了线性表之后,不难写出这些函数的定义,不妨试试,看看和下页中给出的是否一致。 |