版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
#include<iostream>
#define MaxSize 100
#define OK 1
#define ERROR 0
using namespace std;
typedef char ElemType;
typedef int Status;
typedef struct StackNode
{
ElemType data;
struct StackNode *next;
}StackNode, *LinkStack;
Status InitStack(LinkStack &S)
{
S = NULL;
return OK;
}
/*入栈*/
Status Push(LinkStack &S,ElemType e)
{
LinkStack p;
p = new StackNode;
p->data = e;
p->next = S;
S = p;
return OK;
}
/*弹出栈顶元素*/
Status Pop(LinkStack &S, ElemType &e)
{
LinkStack p;
e = S->data;
p = S;
S = S->next;
delete p;
return OK;
}
/*判断是否栈空,是返回1,否返回0*/
Status StackEmpty(LinkStack S)
{
if (S == NULL)return OK;
else
return ERROR;
}
/*获取栈顶元素的值,不修改指针*/
Status GetTop(LinkStack S)
{
if (S != NULL)return S->data;
}
Status Matching(LinkStack &S)
{
ElemType ch, e;
int flag;
InitStack(S);
flag = 1;
cin >> ch;
while (ch != '#'&&flag)
{
switch (ch)
{
case '[':
case '(':Push(S, ch); break;
case ')':
if (!StackEmpty(S) && GetTop(S) != '[')
Pop(S, e);
else
flag = 0;
break;
case ']':
if (!StackEmpty(S) && GetTop(S) == '[')
Pop(S, e);
else
flag = 0;
break;
}
cin >> ch;
}
if (StackEmpty(S) && flag)return OK;
else
return ERROR;
}
int main()
{
LinkStack S, p;
if (Matching(S))
cout << "匹配成功!\n";
else
{
cout << "匹配失败!\n";
}
p = S;
while (p)
{
cout << p->data;
p = p->next;
}
system("pause");
return 0;
}