栈的小述
栈是一种重要的线性结构,栈其实就是线性表的一种具体形式。栈是一种后进先出的数据结构。
栈的特性如下:
1)栈是一个后进先出的线性表,它要求只在表尾进行删除和插入的操作。
2)栈顶是这种特殊形式线性表的表尾,栈底是线性表的表头。
3)栈的插入操作(push)称之为进栈、压栈或者入栈。栈的删除操作(pob)称之为出栈或者弹栈。
4)入栈操作要在栈顶进行。每次向栈中压入一个数据,top指针就要加1,直到栈满为止。出栈操作就是从栈顶中取出数据(此时,先把top指针减1,然后取出数据),每当从栈中弹出一个数据,栈的当前容量减1。
5)栈顶的地址是大于栈底。
栈和线性表一样,也同时具有顺序存储结构和链式存储结构。下面给出栈的顺序存储结构:
typedef struct
{
ElemType *base;//栈底指针
ElemType *top;//栈顶指针
int stacksize;//栈当前可使用的最大容量
}sqstack;
下面分别给出栈的入栈和出栈的代码
Push(sqstack *s,Elemtype e)
{
if(s->top - s->base >= s->stacksize)
{
s->base = (ElemType*)realloc(s->base,(s->stacksize + INTEV)*izeof(ElemType));
if(!(s->base)) exit(0);
s->top = s->base + s->stacksize;
s->stacksize = s->stacksize + INTEV ;
}
*(s->top) = e;
(s->top)++;
}
Pob(sqstack *s,Elemtype *e)
{
if(s->top == s->base)return ;
*e = *--(s->top);
}