- 初始化栈initStack(&s)
建立一个新的空栈s,实际上是将栈顶指针指向-1即可
void InitStack(SqStack *&s)
{
//分配栈的存储空间
s=(SqStack *)malloc(sizeof(SqStack));
//标记为栈空
s->top=-1;
}
2.销毁栈ClearStack(&s)
释放栈s占用的存储空间
void DestroyStack(SqStack *&s)
{ //释放栈的空间
free(s);
}
3.判断栈是否为空StackEmpty(s)
在判断栈是否为空时,我们只需关注栈S为空的条件s->top==-1。
bool StackEmpty(SqStack *s)
{
return(s->top==-1);
}
4.进栈Push(&s,e)
在进行进栈操作时,应该先判断栈是否满了,栈满的条件为top下标等于MaxSize-1,如果栈不满则可以进栈,也就是说进栈时,栈必须要有足够的空间。
元素a进栈操作如下图所示,第一步先将top下标加1,然后元素a进栈,元素b,c,d依次进栈。
bool Push(SqStack *&s,ElemType e)
{
//栈是否满了
if (s->top==MaxSize-1)
return false;
//进栈操作,先将top+1,然后元素e进栈
s->top++;
s->data[s->top]=e;
return true;
}
5.出栈Pop(&s,&e)
对于出栈操作同理,先判断栈是否为空(栈空条件为top下标等于-1),栈为空的话就没必要出栈了,如果栈不为空则可以进行出栈。
元素d出栈操作如下图所示,第一步先元素d出栈,然后将top下标减1。
bool Pop(SqStack *&s,ElemType &e)
{
if (s->top==-1)
return false;
e=s->data[s->top];
s->top--;
return true;
}
6.取栈顶元素GetTop(s,e)
对于去栈顶元素也是出栈操作,也需要判断栈是否为空
bool GetTop(SqStack *s,ElemType &e)
{
if (s->top==-1)
return false;
e=s->data[s->top];
return true;
}