栈在括号匹配中的应用(数据结构)

本文详细介绍了如何在C++中使用栈数据结构来检查括号匹配问题,包括栈的基本操作、测试函数test01的实现和注意事项。
摘要由CSDN通过智能技术生成

这里把在王道数据结构中栈在括号匹配中的应用做一下详细的注释,包括一些个人敲代码时遇到的问题。看看有没有帮到你。

1.栈的基本操作

#include <iostream>
#define Max 15
using namespace std;
struct Stack {
	char arr[Max];
	int top;
};
//初始化栈
bool InitStack(Stack& stack) {
	stack.top = -1;
	return true;
}
//插入操作
bool Push(Stack& stack, char x) {
	if (stack.top = Max - 1) {
		return false;
	}
	else {
		stack.top++;
		stack.arr[stack.top] = x;
		return true;
	}
}
//压出操作
bool Pop(Stack& stack,char &s) {//栈顶元素出栈用s返回
	s = stack.arr[stack.top];
	stack.top--;
}
//判断是否为空操作
bool Stack_Is_Empty(Stack& stack) {
	if (stack.top == -1) {
		return true;
	}
	else {
		return false;
	}
}

2.判断括号匹配的函数(主要注释部分)

bool test01(char* arr,int length) {
	Stack S;
	InitStack(S);
	//循环读取字符数组的每一位数字
	for (int i = 0; i < length; i++) {
		//分支判断为左括号还是右括号
		if (arr[i] == '(' || arr[i] == '{' || arr[i] == '[') {
			//压入栈中
			Push(S, arr[i]);
		}
		else {//说明扫描到了右括号
			if (Stack_Is_Empty(S)) {//如果此时栈空,说明无法匹配
				return false;
			}
			else {
				char temp;//将出栈元素暂时保存此处
				Pop(S, temp);
				//这里要注意:如果思路是判断匹配,则会出现问题
				//一项匹配不能返回true,需利用continue关键词,这里并不建议。
				if (temp == '(' && arr[i] != ')') {
					return false;
				}
				if (temp == '{' && arr[i] != '}') {
					return false;
				}
				if (temp == '[' && arr[i] != ']') {
					return false;
				}
			}

		}
	}
	if (Stack_Is_Empty(S)) {
		return true;
	}
	//其实可以写成return Stack_Is_Empty(S);虽然是小问题,但积少成多
}

3.注意事项

在扫描到右括号且栈不为空时,如果思路是判断匹配,则会出现问题,即一项匹配不能返回true,需利用continue关键词,会增加代码复杂度。这里并不建议。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值