数据结构实验之栈四:括号匹配
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入
输出
示例输入
sin(20+10)
{[}]
示例输出
yes
no
///模拟栈.....
///注意gets()函数在最新的标准里已经没有了....强行gets()....主要是怕没有结束标志而无限输入....
///题目很好理解 碰见左半部分入栈 碰见右半部分 比较栈顶元素,for循环之后判断栈是否为空就好了
///Accode
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
#define maxsize 100
#define ll long long
typedef struct Stack
{
int Size;
char *top,*base;///equal int base[]
} Stack;
bool Empty(Stack &s)
{
if (s.top == s.base)
{
return 1;
}
return 0;
}
void Creat(Stack &s)
{
s.base=new char[maxsize];///?
s.top=s.base;
s.Size=maxsize;
}
void push(Stack &s,char e[])
{
if (s.top-s.base >= s.Size)
{
s.base=(char *)realloc(s.base,2*maxsize*sizeof(Stack));
s.Size+=maxsize;
///s.top=s.base+s.Size;
}
s.top++;
*s.top=e[0];
}
void pop(Stack &s)
{
if (s.top != s.base)
{
s.top--;
}
}
void print(Stack &s)
{
while (!Empty(s))
{
cout<<*s.top;
pop(s);
}
cout<<endl;
}
void Clear(Stack &s)
{
while (!Empty(s))
{
pop(s);
}
}
int check(Stack &s,char str[])
{
int i;
for (i=0; str[i]; i++)
{
if (str[i]=='{')
{
push(s,"{");
}
else if (str[i]=='[')
{
push(s,"[");
}
else if (str[i]=='(')
{
push(s,"(");
}
else if (str[i]=='}')
{
if (*s.top!='{')
{
return 0;
}
else
{
pop(s);
}
}
else if (str[i]==']')
{
if (*s.top!='[')
{
return 0;
}
else
{
pop(s);
}
}
else if (str[i]==')')
{
if (*s.top!='(')
{
return 0;
}
else
{
pop(s);
}
}
}
if (Empty(s))
{
return 1;
}
return 0;
}
int main()
{
char str[55];
while (gets(str)!=NULL)
{
Stack s;
Creat(s);
if (check(s,str)==1)
{
cout<<"yes"<<endl;
}
else cout<<"no"<<endl;
}
return 0;
}