#记录 -----stack:
顺序栈的实现:
seqstack.cpp
Status InintStack(SeqStack* ps)
{
assert(ps != NULL);
ps->base = (SELemType*)malloc(sizeof(SELemType) * STACK_INIT_SIZE);
if (NULL == ps->base)
{
return OVERFLOW;
}
ps->top = ps->base;
ps->stacksize = STACK_INIT_SIZE;
return OK;
}
void DestroyStack(SeqStack* ps)
{
assert(ps != NULL);
free(ps->base);
ps->base = NULL;
ps->top = NULL;
ps->stacksize = 0;
}
void ClearStack(SeqStack* ps)
{
assert(ps != 0);
ps->top = ps->base;
}
bool StackFull(const SeqStack* ps)
{
assert(ps != NULL);
return StackLength(ps) == ps->stacksize;
}
bool StackEmpty(const SeqStack* ps)
{
assert(ps != NULL);
return StackLength(ps) == 0;//top=base
}
Status Push(SeqStack* ps, SELemType val)
{
assert(ps != NULL);
if (StackLength(ps))
{
return ERROR;
}
*ps->top = val;//top所指的位置
ps->top += 1;
return OK;
}
Status GetTop(const SeqStack* ps, SELemType *pval)
{
assert(ps != NULL);
if (StackEmpty(ps))
{
return ERROR;
}
if (pval == NULL) return NULLPTR;
*pval = *(ps->top - 1);
return OK;
}
Status Pop(SeqStack* ps, SELemType* pval)
{
assert(ps != NULL);
if (pval == NULL) return NULLPTR;
if (StackEmpty(ps))
{
return ERROR;
}
ps->top -= 1;
*pval = *ps->top;
ps->top-=1;
return OK;
}
int StackLength(const SeqStack* ps)
{
assert(ps != NULL);
return ps->top - ps->base;
}