用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

数据结构与算法----1.14 括号检验匹配问题

2019-07-19 作者: Ryan2019举报

[c++]代码库

//***********************************
//功能:括号检验匹配问题
//日期:2017年10月10日
//作者:Ryan2019
//***********************************
#include <iostream>
using namespace std;
typedef char SElemType;
const int StackInitSize=10;
const int StackInc=5;
struct SStack
{
    SElemType *base,*top;
	int stacksize;
};
bool StackInit (SStack &S);//构造栈
bool Push(SStack &S,SElemType &e);//入栈
bool Pop(SStack &S,SElemType &e);//出栈
bool StackEmpty(SStack &S);//空栈
bool Match(SElemType *a);//括号检验匹配
int main()
{
	SElemType a[]="()(";
	SElemType b[]="())";
	SElemType c[]="()()";
	cout<<"表达式a为:"<<a<<endl;	
	if(Match(a))
	{	cout<<"表达式中的括号匹配!"<<endl;	}
	else
	{	cout<<"表达式中的括号不匹配!"<<endl;}
	cout<<"表达式b为:"<<b<<endl;
	if(Match(b))
	{	cout<<"表达式中的括号匹配!"<<endl;	}
	else
	{	cout<<"表达式中的括号不匹配!"<<endl;}
	cout<<"表达式c为:"<<c<<endl;
	if(Match(c))
	{	cout<<"表达式中的括号匹配!"<<endl;	}
	else
	{	cout<<"表达式中的括号不匹配!"<<endl;}
	return 0;
}
bool StackInit (SStack &S)
{
	S.base=new SElemType[StackInitSize];
	if(!S.base) return false;
	S.top=S.base;
	S.stacksize=StackInc;
	return true;
}
bool StackEmpty(SStack &S)
{
	return S.top==S.base;
}
bool Push(SStack &S,SElemType &e)
{
	SElemType *base;
	if(S.top-S.base==S.stacksize)
	{
		base=(SElemType*)realloc(S.base,(S.stacksize+StackInc)*sizeof(SElemType));
		if(!base) return false;
		S.base=base;
		S.top=S.base+S.stacksize;
		S.stacksize+=StackInc;
	}
	*S.top=e;
	S.top++;
	return true;
}
bool Pop(SStack &S,SElemType &e)
{
	if(S.top==S.base) return false;
	S.top--;
	e=*S.top;
	return true;
}
bool Match(SElemType *a)
{	
	SStack S;
	StackInit(S);
	SElemType e;	
	int i=0;
	while(a[i]!='\0')
	{		
		if(a[i]=='(' ||a[i]=='[' || a[i]=='{' )
		{			
			Push(S,a[i]);
		}
		else if(a[i]==')' ||a[i]==']' || a[i]=='}')
		{
			if(!Pop(S,e))
			{
				return false;
			}
			if(e=='(' && a[i]==')' || e=='[' && a[i]==']'|| e=='{' && a[i]=='}')
			{
				i++;	
				continue;
			}
			else{		
				return false;
			}
		}
		else{		
			i++;
			continue;
		}
        i++;
	}
	return StackEmpty(S);
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...