括号匹配问题


算法思想;

1)从左到右扫描字符串;

2)凡出现左括弧,则进栈;

3)凡出现右括弧,首先检查栈是否空; 若栈空,则表明该右括弧多余;否则和栈顶元素比较, 若相匹配,则左括弧出栈;否则表明不匹配

4表达式检验结束时,若栈空,则表明表达式中匹配正确;否则表明左括弧有余

#include<iostream.h>
#include<iomanip>
typedef char ElemType;
//#include"a.h"
//#include"b.h"

typedef struct StackNode{
ElemType data;
struct StackNode *next;
}StackNode, *LinkStack;

LinkStack s,L;
ElemType e;

void InitStack(LinkStack &s)//构造一个空栈s,栈顶置空;
{
	s=NULL;
}
void Push(LinkStack &s,ElemType e)//入栈,只能头插法;
{
	LinkStack p=new StackNode;
	p->data=e;
	p->next=s;
	s=p;
}
void Pop(LinkStack &s,ElemType &e)//出栈;
{
	LinkStack p=new StackNode;
	if(s==NULL)printf("输出格式错误\n");
	e=s->data ;
	p=s;s=s->next;
	delete p;
}
int main()
{
	while(1){
	InitStack(s);InitStack(L);
	int i,j;char str2[100];
		cout<<"输入一段表达式:";
		cin>>str2;
		for(j=0;j<strlen(str2);j++)
		{
		e=str2[j];
		if(e=='['||e=='('||e=='{')Push(s,e);
		if(e==')'){if(s==NULL){cout<<"右括号多余"<<endl;goto a;}else {if(s->data =='(')Pop(s,e);else {cout<<"括号不匹配"<<endl;goto a;}}}
		if(e==']'){if(s==NULL){cout<<"右括号多余"<<endl;goto a;}else {if(s->data =='[')Pop(s,e);else {cout<<"括号不匹配"<<endl;goto a;}}}
		if(e=='}'){if(s==NULL){cout<<"右括号多余"<<endl;goto a;}else {if(s->data =='{')Pop(s,e);else {cout<<"括号不匹配"<<endl;goto a;}}}
		}
		if(s==NULL)cout<<"括号匹配成功"<<endl;
		else cout<<"左括号多余"<<endl;
a:;
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值