数据结构——栈的应用 NOI2.2 括号匹配问题
栈是一种数据结构,相当于一个容器,将一个又一个变量从顶端压进去,需要使用时,又从顶端拿出来,其具体使用方法,下面是详细讲解:
#include<stack>必须使用此头文件
stack<int> a; 定义栈a,不一定只使用int,也可以使用char,甚至是node
好了,栈就建好了~\(≧▽≦)/~
scanf( "%d" , &x );
a.push( x );
将 x 压入栈
int y;
y=a.top();
将 y 赋值为栈a顶端的变量,即压入的x
a.pop();
删除栈顶元素,即x
a.empty()
判断栈是否为空,是就返回1,否则返回0
好了,这就是栈的几种用法,光说不行,来个例题:
描述
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注.
输入
输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100
注意:cin.getline(str,100)最多只能输入99个字符!
输出
对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$","?"和空格组成,"$"和"?"表示与之对应的左括号和右括号不能匹配。
样例输入
((ABCD(x)
)(rttyy())sss)(
样例输出
((ABCD(x)
$$
)(rttyy())sss)(
? ?$
栈的实现,看代码讲解吧:
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
using namespace std;
int n;
stack<int>x;//定义栈x
int main()
{
int l,i;
char a[110]={'\0'},b[110]={'\0'};
while(scanf("%s",a)==1)
{
printf("%s\n",a);
l=strlen(a);
for(i=0;i<l;i++)
{
b[i]=' ';
if(a[i]=='(')
{
x.push(i);//先将未被匹配的左括号坐标压入栈
b[i]='$';
}
if(a[i]==')')
{
if(!x.empty())
{
b[x.top()]=' ';//栈顶的括号已被匹配
x.pop();//删除栈顶元素
}
else
b[i]='?';//左括号都被匹配的话,那它就落单了
}
}
for(i=0;i<l;i++)
printf("%c",b[i]);
printf("\n");
while(!x.empty())//清除栈内所有元素
x.pop();
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
}
首次实现,如有瑕疵,敬请原谅╮(╯▽╰)╭
数据结构——栈的应用 NOI2.2 括号匹配问题的更多相关文章
- SDUT-2134_数据结构实验之栈与队列四:括号匹配
数据结构实验之栈与队列四:括号匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给你一串字符,不超过50个字符,可能 ...
- 栈的应用:表达式括号匹配检测(C)
问题说明: 假设数学表达式中允许包含两种括号:圆括号"()"和方括号"[]",嵌套顺序任意. 正确的嵌套模式:( [ ] ( ) ).[ ( [ ] [ ] ) ...
- 数据结构实验之栈与队列四:括号匹配(SDUT 2134)
#include <bits/stdc++.h> using namespace std; typedef long long ll; char s[100]; char a[100]; ...
- 第二十三篇 玩转数据结构——栈(Stack)
1.. 栈的特点: 栈也是一种线性结构: 相比数组,栈所对应的操作是数组的子集: 栈只能从一端添加元素,也只能从这一端取出元素,这一端通常称之为"栈顶": 向栈中添加元 ...
- 利用顺序栈解决括号匹配问题(c++)-- 数据结构
题目: 7-1 括号匹配 (30 分) 给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行 ...
- C语言数据结构之栈:括号匹配
括号匹配这是个很简单的题目,如果只有小括号,就模拟进栈和出栈的过程就行了: 注:输入时'@'作为结束标志 #include <stdio.h> int main() { freopen(& ...
- java:数据结构(二)栈的应用(括号匹配)
一.什么是括号匹配: 括号匹配就是利用计算机辨别表达式里面的括号是否书写成功 例如: {()((a)) }这就是一个正确 (()() 这就是一个错误的 二.括号匹配的算法: 众所周知,括号分为花括 ...
- YTU 3003: 括号匹配(栈和队列)
3003: 括号匹配(栈和队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...
- 【栈思想、DP】NYOJ-15 括号匹配(二)
括号匹配(二) 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能 ...
随机推荐
- javascript 闭包的理解(一)
过很多谈如何理解闭包的方法,但大多数文章,都是照抄或者解释<Javascript高级程序设计(第三版)>对于闭包的讲解,甚至例程都不约而同的引用高程三181页‘闭包与变量’一节的那个“返回 ...
- 空气质量管理系统ssm(mybatis+spring+springMVC)框架+前后端分离
1.目录结构: 2.需要注意的地方 2.1在WEB-INFO下新建 2.1.1 springMVC-servlet.xml <?xml version="1.0" encod ...
- JS事件之自建函数bind()与兼容性问题解决
JavaScript事件绑定常用方法 对象.事件 = 函数; 它只能同时为一个对象的一个事件绑定一个响应函数 不能绑定多个,如果有多个,后面的会覆盖前面的 addEventListener() 此方法 ...
- java编程思想札记一
1. 访问权限中尤其注意protected,它包含了包访问权限,只要是同一个包里的,就能访问到protected成员. 2. 后期绑定:被调用代码直到执行时才能确定,编译阶段只保证调用方法存在和类 ...
- 跟我一起学QT_QT标准对话框_文件对话框
标准对话框 QT的标准对话框分为以下几种 颜色对话框 文件对话框 字体对话框 输入对话框 消息对话框 进度对话框 错误信息对话框 向导对话框 文件对话框 QT中的文件对话框QFileDialog类提供 ...
- IteratorPattern(迭代器模式)-----Java/.Net
迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示
- Markdown破解及汉化
首先,附上用到的资源链接: 链接:https://pan.baidu.com/s/1ULvvCPcCv_P3KyD9ajXUjQ 提取码:5fkb 第一步 直接解压就可以,解压后运行该程序,会出现下图 ...
- 在C#中使用二叉树实时计算海量用户积分排名的实现
从何说起 前些天和朋友讨论一个问题,他们的应用有几十万会员然后对应有积分,现在想做积分排名的需求,问有没有什么好方案.这个问题也算常见,很多地方都能看到,常规做法一般是数据定时跑批把计算结果到中间表然 ...
- CAP理论的理解
CAP理论作为分布式系统的基础理论,它描述的是一个分布式系统在以下三个特性中: 一致性(Consistency) 可用性(Availability) 分区容错性(Partition tolerance ...
- 「洛谷P3931」 SAC E#1 - 一道难题 Tree
P3931 SAC E#1 - 一道难题 Tree 题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是 ...