栈的应用--括号匹配

#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;
}

 

posted @ 2014-09-28 20:14  Android开发8585  阅读(201)  评论(0编辑  收藏  举报