码迷,mamicode.com
首页 > 其他好文 > 详细

平衡的括号

时间:2015-07-24 22:06:41      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

平衡的括号 

这道题目主要运用栈的一些知识。栈在第五章的STL里已经讲了一些,这里再复习一下。

栈的特点是“先进后出”。头文件是<stack>,声明方式:"stack<int> s"。

主要有以下几个操作:

push():把元素压入“栈顶”,又称入栈

pop():从栈顶把元素弹出,出栈

top():取栈顶元素(但不删除)

size():测栈长(个数)

empty():判断栈是否为空

这是我对栈的初步总结。

下面仔细看一下这道题:

题目大意:

输入一个包含“()”和“【】”的括号序列,判断是否合法。具体规则如下:(1)空串合法;(2)如果A和B都合法,则AB合法;(3)如果A合法则(A)和【A】都合法。

题目分析:

先要测出字符串的长度,如果串长==0,是合法的,输出Yes。再判断是否为括号符,将括号符入栈;再判断是否有匹配的括号符,判断j的值,j=0或-1,则符合平衡,输出Yes,否则输出No

代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<stack>
 5 using namespace std;
 6 
 7 const int maxn = 130;
 8 char c[maxn],m[maxn];
 9 
10 int main()
11 {
12     int n,i,j;
13     scanf("%d",&n);
14     getchar();
15     while(n--)
16     {
17         gets(c);    
18         if (strlen(c) == 0)
19         {
20             printf("Yes\n");
21             continue;
22         }
23         if(c[0] == )||c[0] == ])
24         {
25             printf("No\n");
26             continue;
27         }
28         for(i=0,j=0;i<=strlen(c);i++)
29         {
30             if(c[i]!=( && c[i]!=) && c[i]!=[ && c[i]!=] )    //判断c是否为括号符,不是则退出此次循环
31                 continue;
32             m[j]=c[i];             //将第一个括号符压入栈底,j指向栈底
33             if(j==0)              //栈底只有一个元素,使j指向第二个元素
34             {
35                 j++;
36                 continue;
37             }
38             if( (m[j-1]==( && m[j]==)) || (m[j-1]==[ && m[j]==]) )//判断是否有匹配的括号符,则j指向栈前元素,否则j 自加
39                 j--;
40             else j++;
41         }
42         if(j<=0)
43             printf("Yes\n");//j=0或-1,则符合平衡,输出Yes,否则输出No
44         else
45             printf("No\n");
46     }
47     return 0;
48 }

总结:
有关栈的知识我看了好久才看明白一些。先是做了一些例题,找了一些关于栈的内容,了解了栈的知识。

关于栈,我要学习的还有很多,继续加油吧。。。

 

平衡的括号

标签:

原文地址:http://www.cnblogs.com/ttmj865/p/4674433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!