栈:栈是只能在一端进行插入和删除操作的线性表(先进后出)
定义顺序栈
typedef struct Stack
{
ELEM_TYPE data[MAXSIZE];
int top;
}Stack;
栈的初始化
栈的第一个节点置为0,表示此栈为空
void Init(Stack* pst)
{
pst->top = 0;
}
判断栈满
bool IsFull(Stack* pst)
{
return pst->top == MAXSIZE;
}
入栈
bool Push(Stack* pst,ELEM_TYPE val)
{
bool rt = false;
if (!IsFull(pst))
{
pst->data[pst->top++] = val;
rt = true;
}
return rt;
}
判断栈是否为空
bool IsEmpty(Stack* pst)
{
return pst->top == 0;
}
出栈
bool Pop(Stack* pst)
{
bool rt = false;
if (!IsEmpty(pst))
{
pst->top--;
rt = true;
}
return rt;
}
取出栈顶元素
ELEM_TYPE Top(Stack* pst)
{
if (IsEmpty(pst))
{
throw exception("stack is empty!");
}
return pst->data[pst->top - 1];
}