[NYOJ] 02括号配对问题(c语言链栈实现)
2016-10-04 15:15
369 查看
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述现在,有一行括号序列,请你检查这行括号是否配对。
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
样例输出
解析
1.
括号匹配的四种可能性:
①左右括号配对次序不正确
②右括号多于左括号
③左括号多于右括号
④左右括号匹配正确
2. 算法思想:
1.顺序扫描每一个字符直至该行结束(遇到'\n'),当遇到栈空或者遇到左括号时该括号进栈;
2.当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,出栈继续判断;
3.若当前栈顶元素与当前扫描的右括号括号不匹配,则将该右括号进栈(此时已经匹配失败);
4.若最终栈为空,则括号匹配成功,如果不为空,则不成功;
C语言实现
括号配对问题
时间限制:3000 ms | 内存限制:65535 KB难度:3
描述现在,有一行括号序列,请你检查这行括号是否配对。
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3 [(]) (]) ([[]()])
样例输出
No No Yes
解析
1.
括号匹配的四种可能性:
①左右括号配对次序不正确
②右括号多于左括号
③左括号多于右括号
④左右括号匹配正确
2. 算法思想:
1.顺序扫描每一个字符直至该行结束(遇到'\n'),当遇到栈空或者遇到左括号时该括号进栈;
2.当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,出栈继续判断;
3.若当前栈顶元素与当前扫描的右括号括号不匹配,则将该右括号进栈(此时已经匹配失败);
4.若最终栈为空,则括号匹配成功,如果不为空,则不成功;
C语言实现
#include <stdio.h> #include <stdlib.h> typedef struct StackNode{ char data; struct StackNode *next; }StackNode, *LinkP; typedef struct LinkStack{ LinkP top; int count; }LinkStack; /*压栈*/ int push(LinkStack *S, char e){ LinkP p = (LinkP)malloc(sizeof(struct StackNode)); p->data = e; p->next = S->top; S->top = p; S->count++; return 0; } /*出栈*/ char pop(LinkStack *S){ LinkP p; char e = S->top->data; p = S->top; S->top = S->top->next; free(p); S->count--; return e; } /*清空栈*/ int ClearStack(LinkStack *S){ LinkP p; while(S->top){ p = S->top; S->top = S->top->next; S->count--; free(p); } return 0; } int main() { int n; char ru,chu,tmp; LinkStack s; scanf("%d",&n); getchar(); s.top = NULL; s.count = 0; while(n--){ ClearStack(&s); while((ru = getchar())!='\n'){ if(!s.top){ push(&s,ru); }else{ if(ru=='(' || ru=='[')push(&s,ru); else{ if(ru==']'){ if(s.top->data=='[')pop(&s); else push(&s,ru); } if(ru==')'){ if(s.top->data=='(')pop(&s); else push(&s,ru); } } } } if(!s.top){ printf("Yes\n"); }else{ printf("No\n"); } } return 0; }
相关文章推荐
- nyoj-02 括号配对问题
- NYOJ 02 括号配对问题
- NYoj02括号配对问题(栈的用法)
- nyoj 括号配对问题
- NYOJ-2 括号配对问题 -- 数据结构_堆栈
- NYOJ-2-括号配对问题-2013年09月09日09:32:18
- NYOJ 2 括号配对问题
- NYoj 2 括号配对问题
- NYOJ 2 括号配对问题
- NYOJ-2:括号配对问题
- NYOJ 2 括号配对问题
- NYOJ 2 括号配对问题 数据结构栈的应用
- NYOJ2 括号配对问题
- NYOJ 2 括号配对问题
- NYOJ-2 括号配对问题
- NYOJ 2题 括号配对问题
- nyoj-2-括号配对问题
- nyoj-2-括号配对问题
- 【ACM】nyoj_2_括号配对问题_201308091548
- NYOJ NO.3 括号配对问题