栈在括号匹配中的应用
#include<iostream>
using namespace std;
#define MaxSize 100
typedef struct
{
char dada[MaxSize];
int top;
}SqStack;
void InitStack(SqStack &s)
{
s.top=-1;
}
bool StackEmpty(SqStack s)
{
if(s.top == -1)
{
return true;
}
else
{
return false;
}
}
bool Push(SqStack &s,char x)
{
if(s.top==MaxSize-1)
{
return false;
}
s.top = s.top+1;
s.dada[s.top]=x;
return true;
}
bool Pop(SqStack &s,char &x)
{
if(s.top==-1)
{
return false;
}
x=s.dada[s.top];
s.top = s.top-1;
return true;
}
bool bracketCheck(char str[],int length)
{
SqStack s;
InitStack(s);
for(int i=0;i<length;i++)
{
if(str[i]=='(' || str[i]=='[' || str[i] == '{')
{
bool ret1=Push(s,str[i]);
if(ret1)
{
cout<<"压栈成功"<<endl;
}
else
{
cout<<"压栈失败"<<endl;
}
}
else
{
if(StackEmpty(s))
{
return false;
}
char topElem;
bool ret2=Pop(s,topElem);
if(ret2)
{
cout<<"出栈成功"<<endl;
}
else
{
cout<<"出栈失败"<<endl;
}
if(str[i]==')' && topElem != '(')
{
return false;
}
if(str[i]==']' && topElem != '[')
{
return false;
}
if(str[i]=='}' && topElem != '{')
{
return false;
}
}
}
return StackEmpty(s);
}
void testStack()
{
char str[]={'[','(','{','}',')',']'};
int len=sizeof(str);
bool ret3=bracketCheck(str,len);
if(ret3)
{
cout<<"匹配成功"<<endl;
}
else
{
cout<<"匹配失败"<<endl;
}
}
int main()
{
testStack();
return 0;
}