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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了---------很简单的 一道 堆栈问题-------相关的知识,希望对你有一定的参考价值。

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 }

 

以上是关于---------很简单的 一道 堆栈问题-------的主要内容,如果未能解决你的问题,请参考以下文章

一道水题。。时间复杂度有问题

增加堆栈保留大小并不能防止堆栈溢出

当堆栈仍然有元素时,为啥会跳过“如果堆栈不为空”条件?

iOS - 导航控制器堆栈问题

如何使用 CaptureStackBackTrace 捕获异常堆栈,而不是调用堆栈?

***Error - 堆栈大小和递归