前言
栈(stack)是限定仅在表尾插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出的线性表。
栈的插入操作,叫做进栈,也称为压栈、入栈。
栈的删除操作,叫做出栈,也称为弹栈。
栈的顺序存储结构
顺序存储就是用数组来实现的栈,是一种特殊的线性表,可以简称为顺序栈。
栈的结构定义如下:
#define MAXSIZE (100) //栈的最大存储数据量
typedef struct STACK
{
int data[MAXSIZE]; //用于存储数据的数组
int top; //栈顶指针
}SqStack;
进栈操作如下:
(1)检查是否满栈,满栈则退出并返回错误;
(2)栈顶指针top
向上移动一位,将要插入的数据赋给栈顶。
typedef enum
{
FALSE = 0,
TRUE
}bool;
bool Push(SqStack *S, int data)
{
if (S->top == MAXSIZE - 1) //满栈
{
return FALSE;
}
S->top++; //栈顶指针加一
S->data[S->top] = data; //将数据赋给栈顶
return TRUE;
}
出栈操作如下:
(1)检查是否为空栈,若是则退出并返回错误;
(2)将栈顶数据赋给*data
(函数参数的传递是必须要用指针的,C++最好用引用),栈顶指针向下移动一位。
bool Pop(SqStack *S, int *data)
{
if (S->top == -1) //空栈
{
return FALSE;
}
*data = S->data[S->top]; //将栈顶数据赋给data
S->top--; //栈顶指针减一
return TRUE;
}
验证一下:
int main(void)
{
SqStack S