括号匹配问题(C++、堆栈)
原文地址:http://www.cppblog.com/GUO/archive/2010/09/12/126483.html
- /*
- 括号匹配问题,比较经典,利用堆栈来实现(摘自internet)
- 1. 括号匹配的四种可能性:
- ①左右括号配对次序不正确
- ②右括号多于左括号
- ③左括号多于右括号
- ④左右括号匹配正确
- 2. 算法思想:
- 顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈;
- 当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断;
- 若当前栈顶元素与当前扫描的括号不匹配,则左右括号配对次序不正确;
- 若字符串当前为某种类型的右括号而堆栈已经空,则右括号多于左括号;
- 字符串循环扫描结束时,若堆栈非空(即堆栈尚有某种类型的左括号),则说明左括号多于右括号;
- 否则,括号配对正确。
- 3. 程序实现:
- */
- #include <iostream>
- using namespace std;
- #define maxsize 100
- struct sStack
- {
- char sign[maxsize];
- int top;
- };
- int InitsStack(sStack &SS)
- {
- SS.top=-1;
- return 1;
- }
- int IsEmptysStack(sStack &SS)
- {
- if(SS.top==-1)
- return 1;
- return 0;
- }
- int PushsStack(sStack &SS,char c)
- {
- SS.sign[++SS.top]=c;
- return 1;
- }
- int UpsStack(sStack &SS)
- {
- if(IsEmptysStack(SS))
- {
- cout<<"栈空"<<endl;
- return 0;
- }
- SS.top--;
- return 1;
- }
- char TopsStack(sStack &SS)
- {
- if(IsEmptysStack (SS))
- {
- cout <<"栈空"<<endl;
- return 0;
- }
- return SS.sign[SS.top];
- }
- int main()
- {
- string s;
- cout<<"输入表达式:";
- cin>>s;
- int length=s.length();
- int i;
- sStack SS;
- InitsStack(SS);
- for(i=0;i<length;++i)
- {
- if(s[i]=='('||s[i]=='['||s[i]=='{')
- PushsStack(SS,s[i]);
- else if(s[i]==')'&&!IsEmptysStack(SS)&&TopsStack(SS)=='(')
- UpsStack(SS);
- else if(s[i]==')'&&!IsEmptysStack(SS)&&TopsStack(SS)!='(')
- cout<<"括号匹配次序不正确"<<endl;
- else if(s[i]==']'&&!IsEmptysStack(SS)&&TopsStack(SS)=='[')
- UpsStack(SS);
- else if(s[i]==']'&&!IsEmptysStack(SS)&&TopsStack(SS)!='[')
- cout<<"括号匹配次序不正确"<<endl;
- else if(s[i]=='}'&&!IsEmptysStack(SS)&&TopsStack(SS)=='{')
- UpsStack(SS);
- else if(s[i]=='}'&&!IsEmptysStack(SS)&&TopsStack(SS)!='{')
- cout<<"括号匹配次序不正确"<<endl;
- else if((s[i]==')'||s[i]==']'||s[i]=='}')&&IsEmptysStack(SS))
- cout<<"右括号多于左括号"<<endl;
- }
- if(!IsEmptysStack(SS))
- cout<<"左括号多于右括号"<<endl;
- else if(i=(length-1)&&IsEmptysStack(SS))
- cout<<"括号匹配正确"<<endl;
- system("PAUSE");
- return 0;
- }
括号匹配问题(C++、堆栈)的更多相关文章
- 一起talk C栗子吧(第二十回:C语言实例--括号匹配)
各位看官们,大家好.前几回中咱们说了堆栈的原理,而且举了实际的样例进行讲解,这一回咱们说的例 子是:括号匹配. 括号匹配使用了堆栈的原理,大家能够从样例看出来.所以我们把它们放在一起.闲话 休提.言归 ...
- NYOJ-2 括号配对问题 -- 数据结构_堆栈
以前做过的,现在整理一下,主要是堆栈的使用 1.碰到左括号就入栈,碰到右括号就从栈里弹出一个和当前比配,匹配失败就肯定是NO了; 2.如果右括号弹栈的时候栈空,则说明之前没有和右括号匹配的左括号了,这 ...
- 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- HDU 4283 You Are the One ★(进出栈的括号匹配性质:区间DP)
题意 有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D.但是边上有一个小黑屋(一个FILO堆栈),可以一定程度上调整上场程序,求一种安排上场方案使得所有人的不开心指数 ...
- 九度OJ 1153:括号匹配问题 (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5193 解决:2248 题目描述: 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见的算数式子一样)任何一个左括 ...
- 括号匹配性检测C语言实现
#include <stdio.h> #define SIMPLE_KUOHAO "(()1231qeqw)(@#$)" #define COMPLEX_KUOHAO ...
- 【九度OJ】题目1153:括号匹配问题 解题报告
[九度OJ]题目1153:括号匹配问题 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1153 题目描述: 在某个字符串(长度不超过1 ...
- 括号匹配 区间DP (经典)
描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来 ...
- YTU 3003: 括号匹配(栈和队列)
3003: 括号匹配(栈和队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...
随机推荐
- 返回本机的mac物理路径
/// <summary> /// 返回本机的mac物理路径 /// </summary> /// <return ...
- 【转】UltraISO制作U盘启动盘安装Win7/9/10系统攻略
U盘安装好处就是不用使用笨拙的光盘,光盘还容易出现问题,无法读取的问题.U盘体积小,携带方便,随时都可以制作系统启动盘. U盘建议选择8G及以上大小的. 下面一步一步讲解如果制作U盘安装盘: 1.首先 ...
- Search in Rotated Sorted Array (I, II) 解答
Question Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 ...
- Spring集成Hessian
一.概述 Spring 通过org.springframework.remoting.caucho.HessianServiceExporter将POJO中的所有public方法发布为Hessian服 ...
- hdu 1011 Starship Troopers_树状dp
题目链接 题意:给你一棵树(必须从根节点出发),每个节点上都有bug和value,你有m个骑士,每个骑士能消灭20个bug,你必须消灭该节点的全部bug才能拿到该节点的value,问最多能拿到valu ...
- 【Python脚本】Eclipse IDE扩展PyDev插件安装
作为一名Python的初学者,其实不用太在意IDE了,我觉得开始的时候用用自带的 IDLE 也挺好的. 还有 DreamPie 也挺好的.都是一些轻量级的IDE. 因为我正好安装有Eclipse,平时 ...
- c++中经常需要访问对象中的成员的三种方式
可以有3种方法: 通过对象名和成员运算符访问对象中的成员; 通过指向对象的指针访问对象中的成员; 通过对象的引用变量访问对象中的成员. 一.通过对象名和成员运算符访问对象中的成员 例如在程序中可以写出 ...
- hdu 5432 Pyramid Split(二分搜索)
Problem Description Xiao Ming is a citizen who's good at playing,he has lot's of gold cones which ha ...
- 数据分析系统DIY3/3:本地64位WIN7+matlab 2012b訪问VMware CentOS7+MariaDB
数据分析系统DIY中要完毕的三个任务. 一.用VMware装64位CentOS.数据库服务端用CentOS自带的就好. 二.数据採集与预处理用Dev-C++编程解决. 三.用本地Win7 64上的MA ...
- java集合总结【转】
Map.Set.Iterator迭代详解 Map接口定义了四种类型的方法,每个Map都包含这些方法. equals(Object o)比较指定对象与此Map的等价性. hashCode()返回此Map ...