写在前面的话:本专栏的主要内容:数据结构与算法。

1.对于​​​​​​​初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据结构,也是自己构建的,未使用系统的库文件,因此,建议这类小伙伴们从本专栏的总揽​​​​​​​按顺序进行学习;

​​​​​​​2.对于想查询有关资料的小伙伴们,可以选择性地浏览。希望小伙伴们都能有所收获~

​  ​​​​​​】

本章我们来看看栈的第二个应用:

问提描述:如何判断一个表达式中的 (), [], {} 是否匹配?

比如,表达式“ 3*(8+3*2) ”是匹配的,表达式“ (3*4+33 ”是不匹配的。

问题解决(ParenMatch.h):


/** 作者:易果啥笔* 时间:2021.8.20* 内容:栈的典型应用二:判断括号(),[],{}是否匹配**/#ifndef STACK_PARENMATCH_H
#define STACK_PARENMATCH_H
#include "Stack.h"//length()函数用于求数组中表达式的字符数
int length(const char exp[]){static int count = 0;for(int i = 0 ; exp[i]!='\0'; i++){count++;}return count;
}//trans()函数将bool值转换为人性化语言
void trans(bool _bool) {if(_bool)cout<<"匹配"<<endl;else cout<<"不匹配"<<endl;
}//paren()函数用于判断表达式中括号是否匹配
bool paren(const char exp[],int lo,int hi) {Stack<char> S;for(int i = lo ; i < hi ; i++){switch (exp[i]) {case '(' :case '[' :case '{' : S.push(exp[i]); break;case ')' :if( ( S.Empty() ) || ( '(' != S.pop() )) return false; break;case ']' :if( ( S.Empty() ) || ( '[' != S.pop() )) return false; break;case '}' :if( ( S.Empty() ) || ( '{' != S.pop() )) return false; break;default: break;}}return S.Empty();
}#endif //STACK_PARENMATCH_H

匹配算法的核心思想是,一旦遇到左括号 (, [, {, 便将其压入栈中;如果遇到右括号 ), ], }, 便验证此时它前面的括号(也就是栈顶元素)是否与之匹配,如果不匹配,直接返回false;如果匹配,继续往下扫描,直至栈为空。

我们来验证此算法的正确性:


/** 作者:易果啥笔* 时间:2021.8.20* 内容:栈的应用**/#include <iostream>
#include "Stack.h"
#include "ParenMatch.h"
using namespace std;//遍历函数print
template <typename T> void print(T& e){ cout<<e; };int main() {//应用二:判断一个表达式中括号(),[],{}是否匹配char expression1[40] = "(1+23*4-56*7))";cout<<"'(1+23*4-56*7))'中的括号是否匹配?:";trans(paren(expression1,0,length(expression1)));return 0;
}

欲了解栈的其他应用,点击传送门跳转:

1. 栈的应用(一)

3. 栈的应用(三)​​​​​​​

数据结构与算法之-----栈的应用(二)相关推荐

  1. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  2. 数据结构与算法之栈入门题目

    数据结构与算法之栈题目 目录 用数组实现大小固定的队列和栈 实现一个特殊的栈,在实现栈的基础功能上,再实现返回栈中最小元素的操作 如果仅用栈结构实现队列结构和如何仅用队列结构实现栈结构 1. 用数组实 ...

  3. CAUC数据结构与算法期末复习归纳(二)

    CAUC数据结构与算法期末复习归纳(二) 二叉树 二叉树的周游 二叉树的抽象数据类型 深度优先周游二叉树或其子树 广度优先周游二叉树 二叉树的存储结构 二叉树的链式存储结构 二叉搜索树 二叉搜索树的性 ...

  4. 数据结构与算法--利用栈实现队列

    利用栈实现队列 上一节中说明了栈的特点 后进先出,我们用数组的方式实现了栈的基本操作api,因此我们对栈的操作是不考虑排序的,每个api的操作基本都是O(1)的世界,因为不考虑顺序,所以找最大,最小值 ...

  5. 数据结构与算法--简单栈实现及其应用

    栈 栈(Stack)是一种限制插入和删除只能在一个位置上进行的表,改位置是表的末端,叫做栈顶top.栈的基本操作有push (进栈)pop(出栈) 栈又叫做LIFO(后进先出)表,下图展示普通push ...

  6. 新星计划Day7【数据结构与算法】 栈Part1

    新星计划Day7[数据结构与算法] 栈Part1

  7. 数据结构与算法(2)——栈和队列

    前言:题图无关,只是好看,接下来就来复习一下栈和队列的相关知识 前序文章: 数据结构与算法(1)--数组与链表(https://www.jianshu.com/p/7b93b3570875) 栈 什么 ...

  8. 【数据结构与算法】栈与队列

    栈 一.什么是栈? 1.后进者先出,先进者后出,这就是典型的"栈"结构. 2.从栈的操作特性来看,是一种"操作受限"的线性表,只允许在端插入和删除数据. 二.为 ...

  9. 数据结构与算法之-----栈的应用(三)

    [ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于​​​​​​​初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据结构,也是自己 ...

最新文章

  1. Linux内核进程调度的时机和进程切换
  2. shell中遍历目录
  3. UITableViewCell中设置动态大小的圆形imageview
  4. python 文件按行读写
  5. 获取oracle 里的表名与字段
  6. mysql 堵塞_Mysql解决USE DB堵塞详解
  7. 中职计算机网络技术教学大纲,计算机网络技术课程教学大纲
  8. linux网络编程 mingw,Windows网络编程
  9. ACM入门之【矩阵快速幂】
  10. 计算机程序停止工作怎么办,如何将“某某程序已正常停止工作,请关闭程序”这个提示自动关闭...
  11. C++,获取当前工作路径
  12. H5播放flv视频流
  13. 【交互设计】手机上的跳转操作
  14. 固态硬盘ssd的寿命如何计算,固态硬盘质量怎么检测?
  15. 树模型与python实现
  16. Android Gradle进阶配置指南 1
  17. 物联网发展历程,一步步从概念走向了成熟
  18. python连接mysql1366_sqlalchemy 使用pymysql连接mysql 1366错误
  19. 【java使用ffmpeg进行视频压缩】
  20. Fiddler拦截指定站点并修改客户端request请求

热门文章

  1. python 如何加密自己的脚本
  2. puppet之判断和class
  3. 论ARMv7 Thumb-2指令集的性能(含Thumb指令集介绍)【转载】
  4. 深入浅出MySQL出版了
  5. web前端开发初学者十问集锦(5)
  6. 150904 高速公路 ccf
  7. 转载-IDEA项目左边栏只能看到文件看不到项目结构
  8. django上课笔记6-MVC,MTV架构-中间件-初识Form组件
  9. Swift中类与结构的初始化
  10. ubantu系统之快捷键使用