对只有小圆括号的匹配判断

对只有小圆括号的匹配判断(栈来实现)

//*****************************************对只有小圆括号的匹配判断**************************

#include <iostream>

using namespace std;

typedef char elementType; //这里用typedef对int起别名,目的是减少对数据的冗余
const int maxSize = 1e3;

struct SNode {
	elementType Data[maxSize];
	int top;
};
typedef SNode* Stack; //对指向SNode结构体的指针起小名,免得后面麻烦

void Init(Stack &s) //定义一个对栈初始化的函数
{
	s = new SNode;
	s->top = -1;
}

bool Push(Stack &s, elementType e) //定义一个进栈的函数
{
	if (s->top == maxSize - 1)
		return false;
	s->top++;
	s->Data[s->top] = e;
	return true;
}

bool Pop(Stack& s, elementType &e) //定义一个出栈的函数
{
	if (s->top == -1)
		return false;
	e = s->Data[s->top];
	s->top--;
	return true;
}

bool Empty(Stack s) //此处s不是输出型参数,则不需要应用符号
{
	return (s->top == -1);
}

bool GetTop(Stack s, elementType &e) //定义一个取栈顶的元素的函数
{
	if (s->top == -1)
		return false;
	e = s->Data[s->top];
	return true;
}

void Destroy(Stack& s) //定义一个销毁栈的函数,若在开始用malloc分配的话,就用free释放。若用new,则用delete释放
{
	delete s;
}


bool match(char* exp)
{
	Stack s;
	Init(s);
	char e;
	
	while (*exp != '\0')
	{
		if (*exp == '(')
		{
			Push(s, *exp);
			exp++;
		}
		else
		{
			if (Empty(s))
			{
				Destroy(s);
				return false;
			}
			Pop(s, e);
			exp++;
		}
	}
	if (!Empty(s))
	{
		Destroy(s);
		return false;
	}
	else
	{
		Destroy(s);
		return true;
	}

}

int main()
{
		char exp[maxSize];
		cin >> exp;
		if (match(exp))
			cout << "匹配成功!";
		else
			cout << "很遗憾,匹配不成功!";
	return 0;
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值