数据结构与算法笔记(四)栈

本文介绍了栈这一特殊线性表的数据结构,重点讨论了栈的基本操作、顺序栈和链栈。栈的典型应用如浏览器的前进/后退功能,以及在括号匹配问题中的解决方案。顺序栈通过数组实现,链栈则使用链表,两者在插入和删除操作上的时间复杂度均为O(1)。
摘要由CSDN通过智能技术生成

栈是一种特殊的线性表,栈的数据节点必须后进先出。

浏览器的页面前进和后退功能就是一个典型的后进先出的场景,适合使用栈数据结构。

表尾用于输入数据,通常叫做栈顶top,表头是栈底bottom。栈顶和栈底用来表示这个站的两个指针。栈分为顺序栈和链栈。

栈的基本操作

初始时,站内没有数据,即空栈。此时栈底就是栈顶。当存入数据时,最先放入的数据进入栈底,加入的数据会被放到栈顶的位置。要删除数据也是从栈顶开始向栈底删除。对于栈的新增操作称为push或压栈,对于栈的删除操作称为pop或出栈。

顺序栈

栈的顺序储存可以借助数组来实现。一般会把数组的首元素存在栈底,最后一个元素放在栈顶。然后定义一个top指针来指示栈顶元素在数组中的位置。假设栈中只有一个数据元素,则top=0。一般以top是否为-1来判定是否为空栈。当定义了栈的最大容量为StackSize时,则栈顶top必须小于StackSize。

当需要新增数据元素,即入栈,需要把新插入元素放在栈顶,并将栈顶指针增加1

删除数据元素,即出栈,只需要top-1

查找操作也需要遍历整个栈来完成基于某些条件的数值查找。

链栈

就是用链表的方式对栈的表示。通常把栈顶放在单链表的头部。由于链栈的后进先出,原来的头指针就无用了。因此,对于链栈时不需要头指针的,但他需要增加指向栈顶的top指针。

对于链栈,需要额外处理的是栈的top指针。要插入新的数据,需要让新的节点指向原栈顶,即top指针指向的对象,再让top指针指向新的节点。

在链式栈中进行删除操作时,只能在栈顶进行操作。因此,将栈顶的top指针指向栈顶元素的next指针删除即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值