数据结构—栈

一、栈的定义

栈是一种受限的线性表,限定其仅在表尾进行插入或删除操作。称表尾为栈顶,表头成为栈底。空表称为空栈。栈以LIFO后进先出方式对其数据进行管理。

二、栈的顺序表实现

栈的顺序表实现与线性表的顺序实现类似。base 和 top 指针分别指向在堆中分配数组表示栈的栈顶和栈底,stacksize 表示栈空间的大小。当初始化栈时 InitStack,从堆中分配 STACK_INIT_SIZE 大小的空间。当执行压栈操作时查看空间容量 stacksize 够不够,如果不够将堆空间从新分配增加 STACKINCREMENT 存入数据。

三、栈和链表的实现

栈的链式实现可采用与改进的线性表一样有两个指针。分别指向栈底头节点base和栈顶top节点。保留栈内元素个数变量length。使用常规链接方法建立的链表,如下图左,在压栈操作时是O(1)速度,但是弹栈操作要找到top的前驱节点,所以速度是O(n),为了加快弹栈速度可以采用,下图右边所示存储方案,可以把链表反向链接,这样就可以提高弹栈的速度了,并且其他性能不变。

四、栈应用实例

五、栈与函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iGma_e

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值