栈是限定仅在表的一端进行插入或删除的纯属表,通常称允许插入,删除的一端为栈顶(Top),相应在的,则称另一端为栈底(Bottom)。不含元素的栈则称为空栈。
所设栈S={a1,a2,a3,...,an},则称a1为栈底元素,an为栈顶元素。根据栈的定义可知,栈顶元素总是最后入栈并且最先出栈的;栈底元素总是最先入栈并且最后出栈的。即栈是按后进先出的原则进行的。因此,栈又称为后进先出(LIFO)的线性表。
而顺序栈,即栈的顺序存储结构。它是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序表中的位置。类似于顺序表,用一维数据描述顺序中的数据元素的存储区域,而栈顶的位置则是随着插入和删除而变化的,通常将用一个整数表示,将数组下标为0的一端设置为栈底。
顺序栈的类型描述:
#define MAXSIZE 100 //栈的最大空间
//顺序栈类型描述
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
int top;
}SqStack;
在顺序栈中,若将数组下标为0的一端设为栈底,则当top的值为-1时,则表示栈空,每次向栈中压入一个元素时,首先便top的值加1,然后再把数据元素在于该位置。每次从栈中弹出一个元素时,首先取出栈顶元素,然后使top的值减1,指示新的栈顶元素。