括号分配(栈和队列)C
2016-04-08 20:34
260 查看
提交: 70 解决: 17
[提交][状态][讨论版]
…[…]…}…[…]…(…)…]…)。设计一个算法,判断表达式中的括号是否正确配对。输出结果为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为一个空栈。
2、只需提交你所编写的算法
问题 C: 括号匹配(栈和队列)
时间限制: 1 Sec 内存限制: 128 MB提交: 70 解决: 17
[提交][状态][讨论版]
题目描述
假设一个表达式中只允许包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用如:(…[…{……[…]…}…[…]…(…)…]…)。设计一个算法,判断表达式中的括号是否正确配对。输出结果为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; char e; int match=1; 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=0; } i++; } if(!StackEmpty(st)) match=0; 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; }
相关文章推荐
- 【蓝桥杯】历届试题 买不到的数目
- 最短路总结
- HttpClient4.5教程-第四章-HTTP身份认证
- 出栈顺序(栈和队列)B
- 京东笔试题 小东复习,规划时间
- yii小物件详解
- Tcl -- linsert
- leetcode: Majority Element
- Angularjs学习笔记5_scope和$rootScope
- 关于递归的理解及递归表达式复杂度分析(以求解最大公约数为例)
- Git的使用的简单介绍
- 第四次作业 文件复制速度的提升
- 小米笔试题 懂二进制
- 在幼儿园管理系统中使用BootStrap的时候,如何快速找到合适的图标!
- NYOJ139我排第几个
- JS中三种主要方法(函数定义)类别理解 —(JS面向对象&原型)
- linux下启动和关闭网卡命令及DHCP上网
- 复利计算--结对1.0,做汉堡,结对2.0
- unity源码解析Material
- 2016蓝桥杯B组——NO.5