对只有小圆括号的匹配判断(栈来实现)
#include <iostream>
using namespace std;
typedef char elementType;
const int maxSize = 1e3;
struct SNode {
elementType Data[maxSize];
int top;
};
typedef SNode* Stack;
void Init(Stack &s)
{
s = new SNode;
s->top = -1;
}
bool Push(Stack &s, elementType e)
{
if (s->top == maxSize - 1)
return false;
s->top++;
s->Data[s->top] = e;
return true;
}
bool Pop(Stack& s, elementType &e)
{
if (s->top == -1)
return false;
e = s->Data[s->top];
s->top--;
return true;
}
bool Empty(Stack s)
{
return (s->top == -1);
}
bool GetTop(Stack s, elementType &e)
{
if (s->top == -1)
return false;
e = s->Data[s->top];
return true;
}
void Destroy(Stack& s)
{
delete s;
}
bool match(char* exp)
{
Stack s;
Init(s);
char e;
while (*exp != '\0')
{
if (*exp == '(')
{
Push(s, *exp);
exp++;
}
else
{
if (Empty(s))
{
Destroy(s);
return false;
}
Pop(s, e);
exp++;
}
}
if (!Empty(s))
{
Destroy(s);
return false;
}
else
{
Destroy(s);
return true;
}
}
int main()
{
char exp[maxSize];
cin >> exp;
if (match(exp))
cout << "匹配成功!";
else
cout << "很遗憾,匹配不成功!";
return 0;
}