数据结构括号匹配代码_程序员,你应该知道的数据结构之栈

数据结构中的栈不要与 Java 中的栈混淆,他们俩不是一回事,数据结构中的栈是一种受限制的线性表,栈具有先进后出、后进先出的特点,因为栈只允许访问最后一个数据项,即最后插入的数据项。也许你会有疑问,栈既然有这么多限制,为什么不用数组或者链表而使用栈?在开发中,我们有特定的场景,根据特定的场景去选用数据结构,栈的适用场景非常多,比如浏览器的前进与后退、字符串括号的合法性等,我们使用栈来实现就比较好,因为栈相对数组、链表来说对外提供的接口要少很多,接口少了,出错的概率就减少了,对风险的可控性就提高了。

实现一个栈

从栈的定义中可以看出,栈主要有两个操作,一个是新增一条数据,我们叫做入栈,另一个是获取一条数据,称为出栈,下面两张图是入栈出栈示意图。

bc7964e4ca591b46cb4bfc4103bacf66.png
入栈示意图

9e00d3a702720458fad58c90469ab074.png
出栈示意图

栈的实现有两种方式,一种是基于数组实现的,我们叫作顺序栈,另一种是基于链表实现的,我们叫作链式栈。下面是两种栈的实现代码

基于数组的顺序栈

/**

基于链表的链式栈

/**

栈的实现比较简单,因为栈涉及的操作不多,主要就入栈和出栈两个操作。

栈的应用

检测字符串括号的合法性

我们有时候需要检测字符串括号的合法性,即一个左括号需要匹配一个右括号,这个我们可以使用栈来实现。我们可以从一个合法的括号来理解为什么使用栈?如果括号使用合法,最后一个左括号跟第一个右括号是匹配的,倒数第二个左括号和第二个右括号匹配的,以此类推,这符合我们栈的特性先进后出。

假设我们有三种括号:圆括号 ()、方括号 [] 和花括号{},我们使用栈来检测括号的合法性。我们将左括号全部压栈,当出现右括号时,我们就进行匹配,这时候有如下三种情况:

  • 栈为空,说明没有左括号,括号使用不合法
  • 栈中取出来的左括号跟右括号不匹配,括号使用不合法
  • 栈中取出的左括号跟右括号匹配,括号使用暂时合法

当整个字符串都扫描完成后,检测栈中是否还有值,如果栈为空,则说明括号使用合法,反正,则括号使用不合法。

实现代码

public 

浏览器前进、后退功能

我们使用浏览器都知道,浏览器可以前进、后退功能,浏览器的前进后退也符合栈的特点,我们最先访问的网页肯定要最后才能倒回去。我们一起来看看栈怎么实现这个功能?

我们需要定义两个栈,我们将首次访问的页面压栈到第一个栈中,当点击后退时,从第一个栈中取出数据放入到第二个栈,当点击前进按钮时,从第二个栈取出数据放入第一个栈。当第一个栈没有数据时,说明没有页面可以点击后退了,当第二个栈没有数据时,说明没有页面可以点击前进了。这样我们就通过栈实现了浏览器前进、后退功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,这篇博客是关于一位学生利用整个暑假的时间来学习《数据结构与算法》课程并且持续更新的。而引用是一份关于Java数据结构与算法的学习笔记,涵盖了数据结构与算法的概述、分类以及算法分析的内容。引用给出了数据结构的官方解释和大白话解释,以及数据结构的分类和物理结构的介绍。 所以,关于数据结构与算法的笔记,你可以参考这些资源来了解数据结构的概念、分类和物理结构,以及算法的分析和时间复杂度等内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [数据结构与算法——学习笔记汇总](https://blog.csdn.net/qq_42025798/article/details/118864568)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java数据结构与算法1-概述学习笔记](https://blog.csdn.net/qq_45498432/article/details/124067892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值