烟大 2238: 括号匹配(栈和队列)

2238: 括号匹配(栈和队列)

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 2  Solved: 2
[Submit][Status][Web Board]

Description

假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[{… …[]][]())。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。

Input

5+{[2X5]+2}

Output

YES

Sample Input

8-[{2+7]}

Sample Output

NO

HINT

Source 


 Code:

 1 /*

 2 所用操作函数:

 3 empty() 堆栈为空则返回真

 4 pop()   移除栈顶元素

 5 push()  在栈顶增加元素

 6 top()   返回栈顶元素

 7 */

 8 #include <iostream>

 9 #include <stack>

10 #include <string.h>

11 using namespace std;

12 int main()

13 {

14     string l;

15     while(cin>>l){

16         stack <char> s; //放到循环外定义就错了,每次循环都要初始化

17         bool f=true;

18         for(int i=0;i<l.length();i++){

19             switch(l[i]){

20             case '(':s.push('(');break;

21             case '[':s.push('[');break;

22             case '{':s.push('{');break;

23             case ')':if(s.top()!='(') f=false;      //如果栈顶元素值与当前字符括号匹配则将匹配的前括号出栈

24                     else s.pop();

25                     break;

26             case ']':if(s.top()!='[') f=false;

27                     else s.pop();

28                     break;

29             case '}':if(s.top()!='{') f=false;

30                     else s.pop();

31                     break;

32             default:break;

33             }

34             if(!f) break;

35         }

36         if(!s.empty()) f=false;   //判断是否栈空

37         if(f)

38             cout<<"YES"<<endl;

39         else

40             cout<<"NO"<<endl;

41     }

42     return 0;

43 }
View Code

 

Freecode : www.cnblogs.com/yym2013

你可能感兴趣的:(队列)