后进先出(Last In First Out,LIFO)的线性序列,称为“栈”。栈也是一种线性表,只不过它是操作受限的线性表,只能在一端进出操作。进出的一端称为栈顶(top),另一端称为栈底(base)。栈可以用顺序存储,也可以用链式存储,分别称为顺序栈和链栈。
顺序栈
需要两个指针,base指向栈底,top指向栈顶。
动态分配
静态分配
初始化
S.base = new int[MaxSize];
if (!s.base)
return 0;
s.top = s.base; //栈空的条件
入栈
#include<iostream>
using namespace std;
#define Maxsize 100 //预先分配空间,这个数值根据实际需要预估确定;
typedef struct SqStack{
int *base; //栈底指针
int *top;//栈顶指针
}SqStack;
bool InitStack(SqStack &S) //构造一个空栈S
{
S.base = new int[Maxsize]; //为顺序栈分配一个最大容量为Maxsize的空间
if (!S.base) // 空间分配失败
return false; // 0:false ;1:true
S.top = S.base; // top初始值为base,空栈
return true;
}
bool push(SqStack &S, int e) // 插入元素e为新的栈顶元素
{
if (S.top-S.base == Maxsize) //栈满
return false;
*(S.top++)= e; //元素e压入栈顶,然后栈顶指针加1,等价于*S.top=e; S.top++;
return true;
}
bool Pop(SqStack &S, int &e)//删除S的栈顶元素,暂存在变量e中