数据结构实验之栈与队列四:括号匹配
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic Discuss
Problem Description
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,处理到文件结束。
Output
如果匹配就输出“yes”,不匹配输出“no”
Sample Input
sin(20+10)
{[}]
Sample Output
yes
no
#include <bits/stdc++.h>
using namespace std;
typedef char elemtype;
#define max 1000
typedef struct st
{
elemtype*base,*top;
int sqstacklize;
}sqstack;
void creat(sqstack*s)
{
s->base=(elemtype*)malloc(max*sizeof(elemtype));
s->top=s->base;
s->sqstacklize=max;
}
void push(sqstack*s,char e)
{
s->top++;
*s->top=e;
}
int empty(sqstack*s)
{
if(s->top == s->base)
return 1;
else
return 0;
}
void del(sqstack*s)
{
while(!empty(s))
s->top--;
}
int main ()
{
sqstack s;
creat(&s);
char l[52];
while(gets(l)!=NULL) //
{
int len=strlen(l);
int i;
for(i=0 ;i<len; i++)
{
if(l[i] == '('||l[i] == '{'||l[i] == '[')
push(&s,l[i]);
if(l[i] == ')')
{
if(empty(&s)||*s.top!='(')
break;
else
s.top--;
}
if(l[i] == '}')
{
if(empty(&s)||*s.top!= '{')
break;
else
s.top--;
}
if(l[i] == ']')
{
if(empty(&s)||*s.top!= '[')
break;
else
s.top--;
}
}
if(i != len) //此处很关键,防止{{}}}}这种情况下输出yes.
printf("no\n");
else
{
if(empty(&s))
printf("yes\n");
else
printf("no\n");
}
del(&s);//清空栈,如果不加会怎么样鸭鸭?
}
}