栈,是一种只能在表尾进行插入或删除操作的线性表。按照先进后出的原则储存数据。先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
栈的相关概念:
- 栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。
- 压栈:栈的插入操作,叫做进栈,也称压栈、入栈。
- 弹栈:栈的删除操作,也叫做出栈
栈的相关操作:
- 弹栈,通常命名为pop
- 压栈,通常命名为push
- 求栈的大小
- 判断栈是否为空
- 获取栈顶元素的值
压栈,通常命名为push
在网上找的图:
代码如下:
void Push(sqStack *s, ElemType e)
{
if(s->top - s->base >=STACK_INIT_SIZE)
{
s->base = (ElemType *)realloc(s->base,(s->stackSize + STACKINCREMENT )* sizeof(ElemType));
if(!s->base)
{
exit(0);
}
}
*(s->top)=e;
s->top++;
}
弹栈,通常命名为pop
代码如下:
void Pop(sqStack *s,ElemType *e)
{
if(s->top==s->base)
{
return;
}
*e =*--(s->top);
}
栈的长度:
int StackLen(sqStack s)
{
return (s.top - s.base);
}
剩下的操作比较简单,把判断栈是否为空的代码放在pop和push的中间,