栈的应用 括号的匹配问题
本人是一个刚学数据结构的菜菜鸟,想实现一下书本的所有代码,当打到链栈的应用就不会了我试过下面的代码,当执行到遇到case)或者case]的时候时if的执行语句就不会执行了
跪求大神
链栈的定义
typedef char SElemType;
typedef struct StackNode{
SElemType data;
struct StackNode *next;
}StackNode,*LinkStack;
bool InitStack(LinkStack &S);
bool StackLength(LinkStack S);
bool GetTop(LinkStack S,SElemType &e);//用E返回S的栈顶元素
bool Push(LinkStack &S,SElemType e);//插入元素E为新的栈顶元素
bool Pop(LinkStack &S,SElemType &e);//删除S的栈顶元素,并用E返回其值
bool Matching();//括号的匹配
//链栈的初始化
bool InitStack(LinkStack &S)
{
S=new StackNode;
S->next=NULL;
return true;
}
//栈的长度
bool StackLength(LinkStack S)
{
int Length=0;
while(S->next!=NULL)
{
Length++;
S=S->next;
}
return true;
}
//返回栈顶元素
bool GetTop(LinkStack S,SElemType &e)
{
if(S==NULL) return false;
e=S->data;
return true;
}
//添加元素
bool Push(LinkStack &S,SElemType e)
{
LinkStack p;
p=new StackNode;
p->data=e;
p->next=S;
S=p;
return true;
}
//删除栈顶元素
bool Pop(LinkStack &S,SElemType &e)
{
LinkStack p;
p=S;
e=S->data;
S=p->next;
delete p;
p=NULL;
return true;
}
//括号的匹配
bool Matching()
{
LinkStack S;
InitStack(S);//初始化栈
int flag=1;
char c,e;
cin>>c;
while(c!='#'&&flag)//想写一个循环输入判断
{
switch(c)
{
case '['||'('://这样写可以吗?
Push(S,c);
break;
case')':
GetTop(S,e);
if(StackLength(S)!=0&&e=='(')
Pop(S,e);
else flag=0;
break;
case']':
GetTop(S,e);
if(StackLength(S)!=0&&e=='[')
Pop(S,e);
else flag=0;
break;
}
cin>>c;
}
if(StackLength(S)!=0&&flag==0)
return false;
return true;
}
主函数
int main()
{
cout<<"请输入符号:";
Matching();
return 0;
}