栈
栈(stack)栈是一个特殊的线性表,是限定仅在一段(通常是表尾)进行插入和删除操作的线性表。具有后进先出(Last In First Out)的结构,简称LIFO结构。
表尾称为栈顶(Top),表头称为栈底(Base)
栈的顺序存储表示
typedef struct {
SElemType* base; //在栈构造之前和销毁之后,base的值为NULL
SElemType* top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
入栈出栈操作示意图:
基本操作的函数原型说明
//----基本操作的函数原型说明----
Status InitStack(SqStack& S);
//构造一个空栈S
Status StackEmpty(SqStack S);
//若栈为空,返回TRUE,否则返回FALSE
int StackLength(SqStack S);
//求栈长
Status ClearStack(SqStack S);
//清空顺序栈
Status DestroyStack(SqStack& S);
//销毁栈S,S不再存在
Status Push(SqStack& S, SElemType e);
//顺序栈的入栈
Status Pop(SqStack& S, SElemType& e);
//顺序栈的出栈
Status GetTop(SqStack S, SElemType& e);
//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
void PrintStack(SqStack& S);
//打印栈
基本操作的实现
//----基本操作的算法描述(部分)----
Status InitStack(SqStack& S)//顺序栈的初始化
{
S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!S.base)
exit(OVERFLOW); //分配存储失败
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}//InitStack
Status StackEmpty(SqStack S)//判断栈空
{
if (S.top == S.base)
return TRUE;
else
return FALSE;