栈的表示和操作的实现
(stack)
初始化,构造一个空栈
销毁栈
判断是否为空
求栈的长度
获取栈顶元素
栈置空操作
入栈操作
出栈操作
栈本身是受限的线性表
栈的顺序存储 —— 顺序栈
栈的链式存储 —— 链栈
base == top 是栈空的标志
栈满:top - base == stacksize
top - base > stacksize 溢出
栈满的时候,报错或者分配更大的空间
出栈一个,top就往下移一格
顺序栈,简单方便,但是容易溢出
上溢:栈已经满,又要压入元素(认为是一种错误)
下溢:栈已经空,还要弹出元素(一般认为是结束条件,即问题处理结束)
顺序栈的表示(初始化)
S.base = new SElemType[MAXSZIE];
if (!S.base) exit (OVERFLOW)
S.stop = S.base;
S.stacksize = MAXSIZE;
算法补充:顺序栈判断栈是否为空
if(S.top == S.base) return true; else return false;
算法补充:求顺序栈的长度
return S.stop - S.base;
算法补充:清空顺序栈
if (S.base) S.top = S.base; return OK;
算法补充:销毁顺序栈
if(S.base) { delete S.base; S.stacksize = 0; S.base = S.stop = NULL; } return OK;
顺序栈的入栈
判断是否栈满,若满则出错(上溢)
元素e压入栈顶
栈顶指针加1
if (S.top - S.base == S.stacksize) return false; *S.top++=e; return Ok;
指针操作:
*s.top++=e; 等价于
*S.top = e;
S.top++;
续看第五周_09