C语言堆栈括号匹配 C语言解决堆栈括号匹配问题示例详解

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

C语言堆栈括号匹配 C语言解决堆栈括号匹配问题示例详解

xr415   2021-11-18 我要评论
想了解C语言解决堆栈括号匹配问题示例详解的相关内容吗,xr415在本文为您仔细讲解C语言堆栈括号匹配的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:C语言问题解决,C语言堆栈括号匹配问题,下面大家一起来学习吧。

1.括号匹配问题就是当遇到{( [这些左括号的时 将括号字符入栈

2.当遇到右括号时判断栈顶元素是不是与左括号匹配如果匹配就出栈

如果不匹配就直接结束程序(即括号匹配失败)

首先构建栈

struct STACK
{
	char num[10];
	int top;
};
struct STACK* creatstack()
{
	struct STACK* stack = new struct STACK;
	assert(stack);
	stack->top = -1;//0 -1这些根据直接所习惯去标记栈顶 -1只是先置加 0后置加
	return stack;
}
void push(struct STACK* stack, char ch)
{
	stack->num[++stack->top] = ch;
 
}
void pop(struct STACK* stack)
{
	stack->top--;
}

调用匹配函数

 如果返回true即匹配成功 返回false即匹配失败

bool Match(struct STACK* stack, char* match)
{
	int len = strlen(match);
	for (int i = 0; i < len; ++i)
	{
		if (match[i] == '{' || match[i] == '[' || match[i] == '(')
		{
			push(stack, match[i]);
		} 
		if (match[i] == '}' )
		{
			if (stack->num[stack->top] == '{')
			{
				pop(stack); 
			}
			else
			{
				return false;
			}
		}
		if (match[i] == ')' )
		{
			if (stack->num[stack->top] == '(')
			{
				pop(stack); 
			}
			else
			{
				return false;
			} 
		} 
		if (match[i] == ']' )
		{
			if (stack->num[stack->top] == '[')
			{
				pop(stack); 
			}
			else
			{
				return false;
			}
		}
	} 
	if (stack->top == -1)
		return true;
	else
	{
		return false;
	}
}

代码调用

如果是输出1说明匹配成功 输出0匹配不成功

int main()
{
	struct STACK* stack = creatstack();
	char str[10] = "()[][]{}";	
	cout << Match(stack ,str)<< endl;
}

猜您喜欢

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们