Status InitStack(SqStack *S)
{//构造一个空栈
if(!(S->base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType))))
exit(OVERFLOW);
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
}
Status DestroyStack(SqStack S)
{//销毁栈S
free(S.base);
S.base = NULL;
S.top = NULL;
S.stacksize = 0;
return OK;
}
Status ClearStack(SqStack S)
{//把栈S置空
S.top = S.base;
return OK;
}
Status StackEmpty(SqStack S)
{//若栈S为空,则返回TRUE,否则返回FALSE
if(S.top == S.base)
return TRUE;
else
return FALSE;
}
int StackLength(SqStack S)
{//返回S的元素个数,也就是栈的长度
return S.top - S.base;
}
Status GetTop(SqStack S,SElemType *e)
{//用e返回栈顶元素
if(S.top > S.base)
{
*e = *(S.top -1);
return OK;
}
else
return ERROR;
}
Status Push(SqStack *S,SElemType e)
{//插入元素e为栈顶元素
if(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;
}
Status Pop(SqStack *S,SElemType *e)
{//删除栈顶元素,用e返回其值
if(S->top == S->base)
return ERROR;
*e = *--S->top;
return OK;
}
Status StackTraverse(SqStack S,Status(*visit)(SElemType))
{// 输出栈顶元素
while(S.top > S.base)
visit(*S.base++);
printf("\n");
return OK;
}
|