栈的表示和操作的实现

(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