#include <iostream>
using namespace std;
//定义链栈的存储结构
typedef struct StackNode
{
char data;
StackNode *next;
}StackNode,*LinkStack;
//初始化链栈
void InitStack(LinkStack &S)
{
S = NULL;
}
//定义入栈操作
bool Push(LinkStack &S,char e)
{
LinkStack p = new StackNode;
if(p == NULL)
return false;
p->data = e;
p->next = S;
S = p;
return true;
}
//定义出栈操作
bool Pop(LinkStack &S,char &e)
{
LinkStack p;
if(S == NULL)
return false;
e = S->data;
p = S;
S = S->next;
delete p;
return true;
}
//判断栈是否空
bool StackEmpty(LinkStack &S)
{
if(S == NULL)
return true;
return false;
}
char getTop(LinkStack &S)
{
if(S)
return S->data;
return NULL;
}
//匹配检验函数
bool Matching(LinkStack &S)
{
char x,c;
int flag = 1;
cin >> c;
while (c != '#' && flag)
{
switch(c)
{
case '[':
Push(S,c);
break;
case '(':
Push(S,c);
break;
case ')':
x = getTop(S);
if(x == '(')
Pop(S,x);
else flag = 0;
break;
case ']' :
x = getTop(S);
if(x == '[')
Pop(S,x);
else flag = 0;
break;
}
cin >> c;
}
if(StackEmpty(S) && flag)
return true;
else
return false;
}
int main()
{
cout << "Please Input Your Expression__" << endl;
LinkStack S;
InitStack(S);
if(Matching(S))
cout <<"Matching Success!";
else cout <<"Matching failed!";
int i;
cin >>i;
return 0;
}