顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。通常习惯的做法是:以top = 0表示空栈,鉴于C语言中数组的下标约定从0开始,则当以C语言作描述语言时,如此设定会带来很大不便,因此另设指针base指示栈底元素在顺序栈中的位置。当top和base的值相等时,表示空栈。顺序栈的定义如下:
//-----顺序栈的存储结构------
#define MAXSIZE 100 //顺序栈存储空间的初始分配量
typedef struct
{
int *base; //栈底指针
int *top; //栈底指针
int stacksize; //栈可用最大容量
}SqStack;
顺序栈的初始化
[算法步骤 ]
1.为顺序栈动态分配一个最大容量为MAXSIZE的数组空间,使base指向这段空间的基地址,即栈底。
2.栈顶指针top初始为base,表示栈为空
3.stacksize置为栈的最大容量MAXSIZE
//初始化
bool InitStack(SqStack &S)//构造一个空栈S
{
S.base = new int[MAXSIZE]; //为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
if(!S.base)
exit(1);//存储分配失败
S.top=S.base;//top初始为base,空栈
S.stacksize=MAXSIZE; //stacksize置为栈的最大容量MAXSIZE
return true;
}
顺序栈的入栈
[算法步骤]
1.判断栈是否满,若满则返回ERROR
2.将新元素压人栈顶,栈顶指针加1。
//入栈
bool Push(SqStack &S,int e)//插人元素e为新的栈顶元素
{
if(S.top-S.base==S.stacksize)
return false;//栈满
*S.top++=e;//将元素e压入栈顶,栈顶指针加1
return true;
}
顺序栈的出栈
[算法步骤]
1.判断栈是否空,若空则返回ERROR
2.栈顶指针减1,栈顶元素出栈。
//出栈
bool Pop(SqStack &S, int &e)//删除S的栈顶元素,用e返回其值
{
if(S.top==S.base)
return false;//栈空
e=*--S.top;//栈顶指针减1,将栈顶元素赋给e
return true;
}
取顺序栈的栈顶元素
//取栈顶元素
int GetTop(SqStack S)//返回s的栈顶元素,不修改栈顶指针
{
if(S.top!=S.base)//栈非空
return *(S.top-1);//返回栈顶元素的值,栈顶指针不变
}