栈(Stack)
- 后进先出(LIFO)
- 栈顶操作
- 是一个特殊的线性表,是限定仅在一端(通常是表尾)进行插入和删除操作的线性表
- 表尾(an)称为栈顶Top,表头(a1)称为栈底Base
顺序栈的表示
//顺序栈的表示
#define MAXSIZE 100
typedef struct{
SElemType *base; //栈底指针
SElemType *top; //栈顶指针
int stacksize; //栈可用最大容量
}SqStack;
算法3.1 顺序栈的初始化
//算法3.1 顺序栈的初始化
Status InitStack(SqStack &S){ //构造一个空栈
S.base = new SElemType[MAXSIZE];
//或 S.base = (SElemType*)malloc(MAXSIZE*size(SElemType));
if(!S.base) exit(OVERFLOW); //存储分配失败
S.top = S.base; //栈空的标志,栈顶指针等于栈底指针
S.stacksize = MAXSIZE;
return OK;
}
补充代码
顺序栈判断栈是否为空
//顺序栈判断栈是否为空
Status stackEmpty(SqStack S){
//若栈为空,返回TRUE; 否则返回FALSE
if(S.top == S.base)
return TRUE;
else
return FALSE;
}
求顺序栈长度
//求顺序栈长度
int stackLength(SqStack S){
return S.top - S.base;
}
清空顺序栈
//清空顺序栈
Status ClearStack(SqStack S){
if(S.base) S.top = S.base;
return OK;
}
销毁顺序栈
//销毁顺序栈
Status DestroyStack(SqStack &S){
if(S.base){
delete S.base;
S.stacksize = 0;
S.base = S.top = NULL;
}
return OK;
}
算法3.2 顺序栈的入栈
- 判断是否栈满,若满则出错(上溢)
- 元素e压入栈顶
- 栈顶指针加1
//算法3.2 顺序栈的入栈
Status Push(SqStack &S, SElemType e){
if(S.top - S.base == S.stacksize) //栈满
re