Status InitStack(SqStack &S);//构造一个空栈S
Status DestroyStack(SqStack &S);//销毁栈S,S将不存在
Status ClearStack(SqStack &S);//把S置为空栈
Status StackEmpty(SqStackS);//若栈S为空栈,则返回TRUE,否则返回FALSE
Int StackLength(SqStack S);//返回栈的元素个数,即栈的长度
Status GetTop(SqStack S,SElemType &e);//若栈不空,则用e的值返回S的栈顶元素,并返回OK,否则返回ERROR
Status Push(SqStack&S,SElemType e);//插入元素e为新的栈顶元素
Status Pop(SqStack&S,SElemType &e);//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
Status StackTraverse(SqStackS,Status(*visit)());//从栈底到栈顶依次对栈中每个元素调用函数visit()。一旦visit()失败,则操作失败。
//---------基本操作的算法描述(部分)-----------
Status InitStack(SqStack &S){//构造一个空栈S
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base)exit(OVERFLOW);//存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;return OK;}InitStack
Status GetTop(SqStack s,SElemType &e){//若栈不空,则用e的值返回S的栈顶元素,并返回OK,否则返回ERRORif(S.top==S.base)return ERROR;
e=*(S.top-1);return OK;}//GetTop
Status Push(SqStack S,SElemType &e){//若栈不空,则用e的值返回S的栈顶元素,并返回OK,否则返回ERRORif(S.top-S.base>=S.stacksize){//栈满,追加存储空间
S.base=(SElemType *)realloc(S.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)exit(OVERFLOW);//存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;}*S.top++=e;return OK;}//push
Status Pop(SqStack &S,SElemType&e){//若栈不空,则删除S的栈顶元素,则e返回其值,并返回OK;否则返回ERRORif(S.top==S.base)return ERROR;
e=*--S.top;return OK;}//Pop