一、栈的定义
栈又称后进先出线性表,简称LFIO,顾名思义,是只能在表尾进行插入和删除的线性表。
我们假设有一个圆柱形的瓶子,往里面放石头,最先放进瓶子的石头会被压在最底下,必须要等上面的石头取走之后,才能取出下面的石头。栈就可以理解为这样一个模型,栈顶就是瓶子口,栈底就是瓶子底。
下面我们看下栈的相关概念:
栈顶: 允许进行插入和删除的一端
栈底: 不允许进行插入和删除的一端
空栈: 不含任何数据元素的栈
进栈: 又称压栈,在栈中添加一个元素
出栈: 又称弹栈,从栈中删除一个元素
二、顺序栈
栈的顺序存储结构,简称为顺序栈,和线性表很类似,是用一维数组来存储栈。
1.定义
#define STACKSIZE 100
typedef int DataType;
typedef struct
{
DataType data[STACKSIZE]; //数组
int top; //栈顶指针
}SeqStack;
2.栈的初始化操作
void initstakk(SeqStack* s)
{
s->top = -1;
}
初始化时,使栈顶指针为-1,每添加一个元素,栈顶指针top加1,假如添加了1、2、3三个元素,top就是从-1变为2。
3.删除栈中所有元素
void clearstack(SeqStack* s) //删除栈中所有元素
{
s->top = -1;
}
删除时,直接使栈顶指针等于-1,前面添加的元素就被删除了。
4.判断栈是否为空
bool stackempty(SeqStack* s)
{
return s->top == -1; //栈定指针等于-1时,栈为空,返回true,非空返回false
}
5.判断栈是否为满
bool stackfull(SeqStack* s)
{
return s->top == STACKSIZE