3003: 括号匹配(栈和队列)

时间限制: 1 Sec  内存限制: 128 MB
提交: 2  解决: 2
[提交][状态][讨论版]

题目描述

假设一个表达式中只允许包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用如:(…[…{… …[…]…}…[…]…(…)…]…)。设计一个算法,判断表达式中的括号是否正确配对。输出结果为Yes或者No。

顺序栈的定义为

typedef struct
{
char date[Max];
int top;
} Spstack;
需编写的算法为int solve(char *a,Spstack *st);
可使用的函数有:
1、bool Pop(Spstack *&s,char &e);    //出栈
2、bool GetTop(Spstack *s,char &e); //取栈顶元素
3、bool Push(Spstack *&s,char e);     //入栈
4、bool StackEmpty(Spstack *s);        //判断是否为空栈
括号匹配正确返回1,否则返回0。其中a为该表达式,st为一个空栈。

输入

{[][]()([])}[]()

输出

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;
}

转载于:https://www.cnblogs.com/im0qianqian/p/5989393.html

YTU 3003: 括号匹配(栈和队列)相关推荐

  1. 括号匹配(栈和队列)

    #include<iostream> #include<stack> #include<string> using namespace std; int main ...

  2. H - Streets of Working Lanterns Gym - 101149H -括号匹配-栈模拟

    H - Streets of Working Lanterns Gym - 101149H 题意:括号匹配,有很多"?",这些"?"可以凑成任意一种,判断最后能 ...

  3. NyistOJ 2 括号匹配(栈)

    NyistOJ 2 括号匹配 简单的栈的应用问题,利用STL中的栈来解决,当然-也可以自己手写栈.思路就是遇到左括号进栈,遇到右括号首先判断栈是否为空,若为空直接将这个右括号进栈,当然此时也就不匹配了 ...

  4. python实现括号匹配不用栈_使用Python实现栈,判断括号是否平衡

    栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...

  5. Data Structure_数组_栈_队列_链表_霍夫曼

    数组 数组在编码中很常见,就是把数据码成一排存放. 这就表示一个数组,这个数组有八个元素存放.对于元素的获取,主要就是通过下标获取,所以索引对于数组是很重要的,这个索引可以是有意义的,也可以是没有意义 ...

  6. c语言括号匹配的检验,检验括号匹配的算法

    用栈实现检验括号匹配的算法没啥具体描述,数据结构的知识,急用,有重赏 思想是 先进栈,获取第一个半边括号,标记一下,继续进栈直到获取到第二个与之匹配的另一外括号,然后出栈,取出内容.就这样.. 数据结 ...

  7. sdut 2134 数据结构实验之栈与队列四:括号匹配

    数据结构实验之栈与队列四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...

  8. c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...

    文字:独木 排版:独木 图片:独木 栈与队列 1.括号匹配问题 栈 例题1 例题2-----不匹配例题1 例题3-----不匹配例题2 2. 表达式求值问题 例题 1.中缀表达式转前缀表达式 2.中缀 ...

  9. Problem C: 括号匹配(栈和队列)

    Problem C: 括号匹配(栈和队列) Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 76  Solved: 18 [Submit][Status ...

最新文章

  1. JavaScript原生代码处理JSON的一些高频次方法合集
  2. 美国半导体十年计划中的NO.1,模拟硬件究竟有什么价值?
  3. 【机器学习】4 款超级棒的模型可解释性工具包,总有一款适合你!
  4. linux/Windows系统如何安装PHP-openssl扩展
  5. [机器学习] XGBoost 自定义损失函数-FocalLoss
  6. leetcode 87. 扰乱字符串(dp)
  7. 4 FI配置-财务会计-创建会计科目表或总账科目表(COA-Chart of Account)
  8. Python 必知的 20 个骚操作!
  9. 恢复SQLSERVER被误删除的数据(转——收藏)
  10. the system requirements are not satisied或Android Studio不支持HAXM
  11. 高斯滤波 c++实现
  12. 计算机组成原理罗克露课后答案,计算机组成原理[完整版](罗克露)(全)原版教案.ppt...
  13. 考勤月度统计mysql_考勤查询统计SQL脚本
  14. 已知非线性规划问题,写出K-T条件
  15. 一文搞懂经济数据中M0 M1 M2
  16. 聊聊技术人的“绩效考核”
  17. 虚拟化存储和非虚拟化存储
  18. 微信公众号开发笔记(二):微信分享接口实现和问题
  19. NDK Resolution Outcome: Project settings: Gradle model version=XXX, NDK version is UNKNOWN
  20. 中缀和后缀表达式的转换

热门文章

  1. MySQL数据库与Oracle数据库在存储中文字符以字节或字符存储的区别
  2. 重新配置oralce dbconsole
  3. RenderTransformOrigin 的作用
  4. django mysql 修改密码_Django更改sqlite数据库使用mysql数据库 - 李金龙
  5. Socket API: I/O函数recvmsg()与sendmsg()
  6. 用到的python组件
  7. C#通用验证类:邮箱,电话,手机,数字,英文,日期,身份证,邮编,网址,IP
  8. 为什么eolinker发送老是等待_eolinker环境管理之开发、测试和生产环境
  9. 【java学习之路】(java SE篇)009.IO
  10. 安装pyOpenGL/python-opengl