#include<iostream>
using namespace std;
typedef struct zhan1
{
int * base;
int * top;
int length;
int MAX;
}zhan1;
int * zhan_init(int MAX)
{
int * begin;
begin=(int *)malloc(MAX * sizeof(int));
return begin;
}
void insert_zhan(zhan1 & zhan,int e)
{
if(zhan.top>=zhan.base+10)
{
printf("栈已满");
}
*(zhan.top)=e;
(zhan.top)++;
zhan.length++;
}
void search_zhan(zhan1 & zhan)
{
int e;
while(zhan.base!=zhan.top)
{
e=*zhan.base;
printf("%d ",e);
zhan.base++;
}
}
bool out_zhan(zhan1 & zhan)
{
int e;
if(zhan.length==0)
{
printf("栈空");
return false;
}
zhan.length--;
zhan.top--;
e=*zhan.top;
return true;
}
void jinzhi(zhan1 & zhan,int num)
{
int e;
while(num!=0)
{
e=num%8;
insert_zhan(zhan,e);
num=num/8;
}
out_zhan(zhan);
}
int get_last(zhan1 & zhan)
{
int e;
int * x;
x=zhan.top;
x--;
e=*x;
return e;
}
bool kuohaopipei(string a,zhan1 & zhan)
{
int i=0,e;
while(a[i]!=0)
{
switch(a[i])
{
case '(':
case '[':
case '{':
{insert_zhan(zhan,a[i]); i++;
break;}
case ')':
{
if(get_last(zhan)=='(')
{
out_zhan(zhan);
i++;}
else
{
insert_zhan(zhan,a[i]);
i++;
}
break;
}
case ']':{
if(get_last(zhan)=='[')
{
out_zhan(zhan);
i++;}
else
{
insert_zhan(zhan,a[i]);
i++;
}
break;
}
case '}':
{
if(get_last(zhan)=='{')
{
out_zhan(zhan);
i++;}
else
{
insert_zhan(zhan,a[i]);
i++;
}
break;
}
}
}
if(zhan.length==0)
{
printf("匹配成功");
return true;
}
else return false;
}
int main()
{
string a;
a="[{}]";
zhan1 zhan;
zhan.length=0;
zhan.MAX=10;
zhan.base=zhan_init(zhan.MAX);
zhan.top=zhan.base;
kuohaopipei(a,zhan);
}