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堆栈),可以一定程度上调整上场程序,求一种安排上场方案使得所有人的不开心指数 ...
随机推荐
- MVC Router学习
Route顾名思义就是路由的意思了. 我们先打开Global.asax查看代码 可以看到 routes.MapRoute( "Default", // 路由名称 & ...
- Python:使用psycopg2模块操作PostgreSQL
安装psycopg2模块: 怎么验证是否已经安装过psycopy2? 编写上面代码,运行看是否抛出缺少psycopg2模块. 安装方法1: 1)使用psycopg2-2.4.2.win-amd64-p ...
- objective-c底层: runtime机制
runtime是oc的真面目.oc底层的一套c语言API. unsigned int count; //获取属性列表 objc_property_t *propertyList = class_cop ...
- extjs中的下载并对文件重命名功能的实现
在小白的学习extjs的过程中,如果需要了解多文件的上传功能,也可以查看小白的上篇随笔,希望给大家帮助.http://www.cnblogs.com/wangqc/p/extjsFileUpload. ...
- 变形--原点 transform-origin
任何一个元素都有一个中心点,默认情况之下,其中心点是居于元素X轴和Y轴的50%处.如下图所示: 在没有重置transform-origin改变元素原点位置的情况下,CSS变形进行的旋转.位移.缩放,扭 ...
- 前端构建工具gulp入门
本文假设你之前没有用过任何任务脚本(task runner)和命令行工具,一步步教你上手Gulp.不要怕,它其实很简单,我会分为五步向你介绍gulp并帮助你完成一些惊人的事情.那就直接开始吧. 第一步 ...
- IUS通过PLI产生fsdb波形
IUS通过PLI接口来调用系统函数,产生fsdb波形,再由verdi来debug. 要调用fsdbDumpfile和fsdbDumpvars,需要在testcase的shell(或.cshrc等)中设 ...
- PAT乙级 1003. 我要通过!(20)
答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: 1. ...
- zw版【转发·台湾nvp系列Delphi例程】CheckDifference1
zw版[转发·台湾nvp系列Delphi例程]CheckDifference1 procedure TForm1.Button1Click(Sender: TObject);var img, img1 ...
- 形状特征提取-Hu不变矩(转载)
[原文部分转载]:http://blog.csdn.net/wrj19860202/archive/2011/04/16/6327094.aspx 在连续情况下,图像函数为 ,那么图像的p+q阶几何矩 ...