1:栈定义
#define Maxsize 100 //预先分配空间,这个数值根据实际需要预估确定;
typedef struct SqStack {
int *pBase; //栈底指针
int *pTop; //栈顶指针
}SqStack;
2:构造一个空栈S
bool InitStack(SqStack &S) //构造一个空栈S
{
S.pBase = new int[Maxsize];//为顺序栈分配一个最大容量为Maxsize的空间
if (nullptr == S.pBase) //空间分配失败
{
return false;
}
S.pTop = S.pBase; //pTop初始为pBase,空栈
return true;
}
3:插入元素nData为新的栈顶元素
bool Push(SqStack &S, int nData) // 插入元素nData为新的栈顶元素
{
if (S.pTop - S.pBase == Maxsize) //栈满
{
return false;
}
*(S.pTop++) = nData; //元素e压入栈顶,然后栈顶指针加1,等价于*S.pTop=nData; S.pTop++;
return true;
}
4:删除S的栈顶元素,暂存在变量nData中
bool Pop(SqStack &S, int &nData) //删除S的栈顶元素,暂存在变量nData中
{
if (S.pBase == S.pTop) //栈空
{
return false;
}
nData = *(--S.pTop); //栈顶指针减1,将栈顶元素赋给e
return true;
}
5:返回S的栈顶元素,栈顶指针不变
int GetTop(SqStack S) //返回S的栈顶元素,栈顶指针不变
{
if (S.pTop == S.pBase) //栈空
{
return -1;
}
return *(S.pTop - 1); //返回栈顶元素的值,栈顶指针不变
}