---------很简单的 一道 堆栈问题-------

1098: 括号配对问题
时间限制: 1 Sec  内存限制: 128 MB
提交: 9  解决: 5
[提交][状态][讨论版]
题目描述
现在,有一行括号序列,请你检查这行括号是否配对.

输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符.

输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No.

样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes

很简单的一道题   就是纯 堆栈问题    很适合 用于  理解堆栈的  例题  下面附上代码.

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n,i,j,top,flag;
 5     char s[10000],st[5000];
 6     char c;
 7     scanf("%d\n",&n);
 8     for(i=1; i<=n; i++)
 9     {
10         top=-1;
11         scanf("%s",s);
12         flag=0;
13         for(j=0; c=s[j]; j++){
14             if(c=='[' || c=='(')
15             { //遇到左括号,则存入数组st(模拟栈操作——进栈)
16                 top++;
17                 st[top]=c;
18             }
19             else
20             { //遇到右括号,检查匹配情况
21                 if(top<0)
22                 { 
23                     flag=1;
24                     break;
25                 } //栈为空,不匹配,跳出循环
26                 if(c==']' && st[top]=='[' || c==')' && st[top]=='(') //与栈顶匹配,——退栈
27                     top--;
28                 else //与栈顶不匹配,跳出循环
29                 {
30                     flag=1;
31                     break;
32                 }
33             }
34         }
35         if(flag || top>=0)
36             printf("No\n");
37         else 
38             printf("Yes\n");
39     }
40     return 0;
41 }

 

posted @ 2016-01-25 14:53  X-POWER  阅读(262)  评论(0编辑  收藏  举报