栈(Stack)是一个特殊的线性表,是限定仅在一端(通常为表尾)进行插入和删除操作的线性表。
表尾(即an端)称为栈顶(Top),表头(即a1端)称为栈底Base;
插入元素到栈顶(表尾)的操作,称为入栈 PUST(X)
从栈顶(即表尾)删除最后一个元素的操作,出栈。POP(y).
顺序栈的表示和实现。
#define MAXSIZE 100
typedef struct{
SElemType *Base;//栈底指针
SElemType *Top;//栈顶指针。
int stacksize;//栈的最大容量。
}SqStack;
1:顺序栈的初始化。
Stack InitStack(SqStack &S)//构造一个空栈。
{
S.base=(SElemType*)malloc(MAXSIZE*sizeof(SElemType));
//或者 S.base=new SElemType[MAXSIZE];
if(!S.base) exit(OVERFLOW);//存储分配失败。
S.top=S.top;//栈顶指针等于栈底指针。
S.stacksize=MAXSIEZ;
return OK;
}
2:顺序栈的判空;
Staus StackEmpty(SqStackk S){
//若栈为空,则返回TRUE,否则返回False;
if(S.top==S.base){
return True;
}else{
return FALSE;
}
}
3:求栈的长度:
int StackLength(SqStack S){
return S.top-S.base;
}
4:清空顺序栈:
Status ClearStack(SqStack S){
if(S.base) S.top=S.base;
return OK;
}
``
5:`销毁顺序栈:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190802230714660.png)
Status DestroyStack(SqStack &S){
if(S.base){
delete S.base;
S.stacksize=0;
S.base=S.top=NULL;
}
return Ok;
}
6:顺序栈的入栈:
步骤:
代码实现:
Status Push(SqStack &S,SElemType e){
if(S.top-S.base==S.stacksize)//栈满。
return ERROR;
*S.top++=e;//等于 *S.top=e; S.top++;
return OK;
}
7:顺序栈的出栈:(top指针指向最后一个元素的后一个位置)。
代码实现:
Status Pop(SqStack &S,SELemtype &e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回ok
//否则返回ERROR;
if(S.top==S.base){//等价与if(StackEmpty(S)).
return ERROR;
}else{
e=*--S.top;//等价于 --S.top
//e=*S.top;
}
return OK''
}