一、栈的抽象数据类型的定义
二、栈的表示和实现
由于栈本身就是线性表,于是栈也有顺序存储和链式存储两种实现方式
- 栈的顺序存储—顺序栈
- 栈的链式存储—链式栈
存储方式:同一般线性表的顺序存储结构完全相同,利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,栈底一般在低地址端。
- 附设top指针:指示栈顶元素在顺序栈中的位置
- 另设base指针、指示栈底元素在顺序栈中的位置
- 另外,用stacksize表示栈可使用最大的容量
空栈:base==top是栈空标志
栈满:top-base==stacksize
栈满时的处理方法:
- 报错,返回操作系统
- 分配更大的空间,作为栈的存储空间,将原栈的内容移入新栈
使用数组作为顺序存储方式的特点:简单、方便、但易产生溢出(数组大小固定)
- 上溢(overflow):栈已经满,又要压入元素
- 下溢(underflow):栈已空,还要弹出元素
🧨上溢是一种错误,使问题的处理无法解决,而下溢一般认为是一种结束条件,即问题处理结束
三、顺序栈的表示和实现
四、顺序栈的初始化
五、判断顺序栈是否为空
六、求顺序栈的长度
七、清空顺序栈
八、销毁顺序栈
九、顺序栈的入栈
- 判断是否栈满,若满则出错(上溢)
- 元素 e压入栈顶
- 栈顶指针加1
代码实现:
十、顺序栈的出栈
- 判断是否栈空,若空则出错(下溢)
- 获取栈顶元素e
- 栈顶指针减1
代码实现: