栈的基本概念
**栈:**是一种运算受限的线性表。限定仅在表尾(栈顶)进行插入和删除操作的线性表(先进后出)。
**入栈:**从开口(栈顶)依次进入,不能从中间插入元素。
**出栈:**从开口(栈顶)依次出栈。
栈(伪代码)
typedef struct
{
ElemType* base; //指向栈低的指针变量
ElemType* top; //指向栈顶的指针变量
int stackSize; //栈的当前容量
}Stack;
//创建栈
#define E 100
initStack(Stack *p)
{
p->base = (ElemType*)malloc(sizeof(Elemtype));
if(p.base == NULL)
{
exit(0);
}
p->top = p->base;
p->statSize = E;
}
//入栈
#define E 10
Push(Stack *p, ElemType e)
{
//栈满则扩大栈的空间
if( p->op - p.base >= p->stackSize )
{
p->base = (ElemType *)realloc(p->base, (p->stackSize + E) * sizeof(Elemtype));
if(s->base == NULL)
{
exit(0);
}
p->top = p.base +p->statSize; //更新栈顶
p->stackSize = p->stackSize + E; //更新栈的容量
}
*(p->top) = e;
p->top++;
}
//出栈
Pop(Stack *p, ElemType *e)
{
if( p->top == s->base ) //栈空
{
return;
}
*(s->top) = *((s->top)