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;
}

以上就是C语言堆栈括号匹配问题示例详解的详细内容,更多关于C语言堆栈括号匹配的资料请关注脚本之家其它相关文章!

你可能感兴趣的