栈(stack)(又称为堆栈)
定义:栈是限定仅在表尾进行插入和删除操作的线性表。
栈是一种运算受限制的线性表,表现在:仅限在表尾进行插入和删除操作的线性表。一般将允许插入和删除的一端称之为栈顶(top),另一端称之为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进后出(Last In First Out)的线性表,简称LIFO的线性表。
有关于栈:
首先:“栈”者,存储货物或提供旅客居住的房屋,引申至计算机领域即为:数据暂时存储的地方,所以才有进栈,出栈的说法。
再者:定义中所说“在表尾进行插入和删除操作”中的“表尾”指的是栈顶,而非栈底。
有关于栈的一些基本操作:
进栈操作(push):
int Push_SqStack(SqStack *s,int x)//入栈
{
if(s->top==MAXSIZE-1)
return 0;//栈满不能入栈
else
{
s->top++;//栈顶指针加一
s->data[s->top]=x;//将新插入的值赋给栈顶
return 1;
}
}
出栈操作(pop):
int Pop_SqStack(SqStack*s,int *x)//出栈
{
if(Empty_SqStack(s))
return 0;//栈空不能出栈
else
{
*x=s->data[s->top];//将要删除的栈顶元素赋值给x
s->top--;//栈顶指针减一
return 1;
}//栈顶元素存入*x,返回
}
判栈空:
int StackEmpty(SqStack *s)//判栈空
{
if(s->top==-1)
return 1;
else
return 0;
}
初始化:
SqStack *Init_SqStack()
{
SqStack *s;
s=(SqStack*)malloc(sizeof(SqStack));
if(!s)
{
printf("空间不足\n");
return NULL;
}
else
{
s->top=-1;
return s;
}
}