YTU 3003: 括号匹配(栈和队列)
3003: 括号匹配(栈和队列)
时间限制: 1 Sec 内存限制: 128 MB
提交: 2 解决: 2
[提交][状态][讨论版]
题目描述
假设一个表达式中只允许包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用如:(…[…{…
…[…]…}…[…]…(…)…]…)。设计一个算法,判断表达式中的括号是否正确配对。输出结果为Yes或者No。
顺序栈的定义为
输入
{[][]()([])}[]()
输出
Yes
样例输入
{[()[]][}]
样例输出
No
提示
1、注意括号匹配问题
2、只需提交你所编写的算法
迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……
#include <stdio.h>
#define Max 105
typedef struct
{
char date[Max];
int top;
} Spstack;
void InitStack(Spstack *&s)
{
s= new Spstack;
s->top=-1;
}
bool StackEmpty(Spstack *s)
{
return(s->top==-1);
}
bool Push(Spstack *&s,char e)
{
if(s->top==Max-1)return false;
s->top++;
s->date[s->top]=e;
return true;
}
bool GetTop(Spstack *s,char &e)
{
if(s->top==-1)return false;
e=s->date[s->top];
return true;
}
bool Pop(Spstack *&s,char &e)
{
if(s->top==-1)return false;
e=s->date[s->top];
s->top--;
return true;
}
void DestroyStack(Spstack * &s)
{
delete(s);
}int solve(char *a,Spstack *st)
{
int i=0,match=1;
char e;
while(a[i]!='\0'&&match)
{
if(a[i]=='('||a[i]=='{'||a[i]=='[')Push(st,a[i]);
else if(a[i]==')'||a[i]=='}'||a[i]==']')
{
if(a[i]==')'&&GetTop(st,e)==true)
{
if(e!='(') match=false;
else Pop(st,e);
}
else if(a[i]=='}'&&GetTop(st,e)==true)
{
if(e!='{') match=false;
else Pop(st,e);
}
else if(a[i]==']'&&GetTop(st,e)==true)
{
if(e!='[') match=false;
else Pop(st,e);
}
else match=false;
}
i++;
}
if(!StackEmpty(st))match=false;
return match;
}
int main()
{
char a[100];
bool match;
Spstack *st;
InitStack(st);
gets(a);
match=solve(a,st);
DestroyStack(st);
if(match)printf("Yes\n");
else printf("No\n");
return 0;
}
YTU 3003: 括号匹配(栈和队列)的更多相关文章
- UVA-673 括号匹配--栈
如果是一个合法的序列,每对配对的括号的两个字符('(' 和 ')' 或者 '[' 和 ']')一定是相邻的,每次判断下该字符是否有配对即可. 如果配对,将左括号出栈即可.特别注意:空格也是合法的. A ...
- 利用栈实现括号匹配(python语言)
原理: 右括号总是与最近的左括号匹配 --- 栈的后进先出 从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号 当最终右括 ...
- ACM_括号匹配
括号匹配(栈) Time Limit: 2000/1000ms (Java/Others) Problem Description: 给一组包含[]()两种括号的序列,检查是否是合法的. 如:()[] ...
- C数据结构-栈和队列,括号匹配举例---ShinePans
1.栈和队列是两种特殊的线性表 运算操作被限定仅仅能在表的一端或两端插入,删除元素,故也称它们为限定的线性表结构 2.栈的基本运算 1).Stackinit(&s) 构 ...
- SDUT-2134_数据结构实验之栈与队列四:括号匹配
数据结构实验之栈与队列四:括号匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给你一串字符,不超过50个字符,可能 ...
- C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)
括号匹配测试代码笔记如下: #include<stdio.h> #include<string.h> #include <stdlib.h> #define SIZ ...
- 面试之leetcode20堆栈-字符串括号匹配,队列实现栈
1 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认 ...
- STL-stack和顺序栈实现括号匹配
2018-11-11-14:28:31 1.顺序栈 下面是我用数组实现的顺序栈,包含的函数有出入栈,查看栈顶元素,栈的大小,栈是否空等函数,当栈空间不够用时,对应的数组会自动增长. /******** ...
- HDU 4283 You Are the One ★(进出栈的括号匹配性质:区间DP)
题意 有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D.但是边上有一个小黑屋(一个FILO堆栈),可以一定程度上调整上场程序,求一种安排上场方案使得所有人的不开心指数 ...
随机推荐
- Android中三种onClick事件的实现与对比
方式一:在activity的onCreate()方法中,嵌入如下代码: Button button = (Button)findViewById(R.id.button1); button.setOn ...
- 基于axis2框架的两种发布webservice的方法
这次在中韩的产品定义平台的开发,有幸接触到了通过自己写webservice给其他系统调用的项目. 具体开发背景:这个平台做了几个查询接口都是,都是用servlet方式处理请求,而这边系统之间是通过we ...
- scala学习笔记(1)
下载和安装Scala 前往http://www.scala-lang.org/downloads下载Scala在各个平台的安装包,安装后即可在运行scala编译器和交互式命令行环境(interacti ...
- SqlServer:传递超长字符串参数时,参数被自动换行。
declare @ids nvarchar(max); set @ids=N'5936593066,5936556893,59366 00375,5936594808,59 36624757,5936 ...
- ads 的一些错误
遇到动不动就有*.o文件找不到的情况,而且通常都是开始的时候可以正常LINK,而经过若干次重新LINK后却找不到(即使只是在代码中加一个无关紧要得空格),新建个工程,将目前的.C和.H文件原封不动加进 ...
- csuoj 1120: 病毒
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1120 1120: 病毒 Time Limit: 3 Sec Memory Limit: 128 ...
- Java基础(58):Eclipse中的快捷键大全(转)
Eclipse快捷键大全(转载) Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行 ...
- WebDriver 随笔
在webDriver中通过 driver.findElement进行定位元素时,往往是从页面的上到下依次寻找,根据该等位方式寻找到第一个元素. driver.findElement(By.id())有 ...
- Array.prototype.each
Array.prototype.each = function(closure){ //递归合并 return this.length ? [closure(this.slice(0,1))].con ...
- 。。。HibernateTemplate与Session。。。
今天在学习Spring框架的时候,突然发现了这个类----HibernateTemplate,这个类与Session一开始认为是差不多的,这个HibernateTemplate类对象拥有Session ...