14.栈的操作

栈的基本操作

img
img

栈的存储方式

由于栈本身就是线性表,于是栈也有顺序栈链栈两种实现方式

栈的顺序存储——顺序栈

栈的链式存储——链栈

栈的顺序表示

存储方式:同一般的线性表的顺序存储结构完全相同,利用(数组)一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,栈底一般在低地址端

  • 附设top指针,指示栈顶元素在顺序栈的位置
  • 另设base指针,指示栈底元素在顺序栈的位置

img

但是为了方便操作通常top指针指向栈顶元素之上的下标地址指向线性表中的an+1

另外用stacksize表示栈可使用的最大容量(栈最多可以存放的元素个数)C语言中下标不能越界否则就有语法错误

img

栈满了如果再插入元素就溢出了(上溢)

栈满如果还想插入元素的处理方法:

将原栈内容移入新栈比较费时尤其是数据量大的时候[不到万不得已不会这样操作]

img

img

栈里没有元素仍要出栈(下溢)

  • 使用数组作为顺序栈的存储方式的特点:

简单、方便、易产生溢出(数组大小固定)

  • 上溢(overflow):栈已满又要压入元素

  • 下溢(underflow):栈已空,还要弹出元素

注:上溢是一种错误,使问题是处理无法进行,而下溢一般认为是一种结束条件,即问题处理结束

顺序栈的表示

img

img

img

  • 线性表动态分配【对比】
    这是栈是限定了插入和删除的位置附设top

img

top和base可以定义为整型存储数组的下标/定义为指针(指针相减的前提是两指针指向同一数组)

顺序栈的初始化(开辟指定大小的空栈)[maxsize太大可能分配不成功报错加上这样一个判断就可以了]

img

img

【算法补充】:判断顺序栈是否为空

img

【算法补充】:求顺序栈的长度

img

img

顺序栈的入栈

img

img

前++先用后加

【算法3.3】顺序栈的出栈

img

前++先用后加

【算法3.3】顺序栈的出栈

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值