经济
栈的定义:后进先出的线性序列,称为“栈”。栈也是一种线性表,只不过是操作受限的线性表,只能在一端进行操作。进出的一端称为栈顶(top),另一端称为栈底(base)。栈可以用顺序存储,也可以用链式存储。
栈的动态分配的定义:
typedef struct SqStack {
int *base; //栈底指针
int *top; //栈顶指针
}SqStack;
构造空栈:
bool InitStack(SqStack &S) //构造一个空栈S
{
S.base = new int[Maxsize];//为顺序栈分配一个最大容量为Maxsize的空间
if (!S.base) //空间分配失败
return false;
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;
}
取值POP:
bool Pop(SqStack &S, int &e) //删除S的栈顶元素,暂存在变量e中
{
if (S.base == S.top) //栈空
return false;
e = *(--S.top); //栈顶指针减1,将栈顶元素赋给e
return true;
}
取值TOP操作:
int GetTop(SqStack S) //返回S的栈顶元素,栈顶指针不变
{
if (S.top != S.base) //栈非空
return *(S.top - 1); //返回栈顶元素的值,栈顶指针不变
else
return -1;
}
STL对应容器stack
常用操作:push(elem),向栈顶添加元素
pop():从栈顶移除第一个元素
top():返回栈顶元素
empty():判断堆栈是否为空
size():返回栈的大小