判断表达式中开闭括号是否配对出现。运用栈实现表达式开、闭括号是否配对出现算法

判断表达式中开闭括号是否配对出现。运用栈实现表达式开、闭括号是否配对出现算法

算法思想:

每次扫描到一个左括号就入栈,扫描到右括号就出一个栈顶元素,看括号类型是否匹配。

如果某次扫描到右括号发现栈中已无元素可出,则匹配失败(右括号多于左括号)

如果某次扫描到右括号,出栈顶元素,发现两个括号类型不一样,匹配失败

还有一种情况就是,你把右括号都扫描完了,结构栈中还有元素,匹配失败(左括号多于右括号)

c 复制代码
bool bracketCheck(char str[], int length) {
	//str是一个字符数组,里面存储了各种左括号和右括号
	//len表示该字符数组有多长
	SqStack S;
	InitStack(&S);//初始化一个栈
	for (int i = 0;i < length;i++) {
		if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
			Push(&S, str[i]);//扫描到左括号,入栈
		}
		else {
			if (StackEmpty(&S))//扫描到右括号,但栈空
				return false;//匹配失败
			char topElem;
			Pop(&S, &topElem);//栈顶元素出栈
			//括号不匹配的三种情况
			if (str[i] == ')'&&topElem != '(')
				return false;
			if (str[i] == ']'&&topElem != '[')
				return false;
			if (str[i] == '}'&&topElem != '{')
				return false;
		}
	}
	return StackEmpty(&S);//全部匹配完,如果栈空则匹配成功
}



int main() {
	char str[6] = {'(',')','[',']','{','}'};
	int len=strlen(str);
	if (bracketCheck(str,6)) {
		printf("匹配成功");
	}
	else {
		printf("匹配失败");
	}
	return 0;
}
相关推荐
兴科Sinco11 分钟前
[leetcode 1]给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数[力扣]
python·算法·leetcode
沐怡旸13 分钟前
【算法--链表】138.随机链表的复制--通俗讲解
算法·面试
anlogic19 分钟前
Java基础 9.10
java·开发语言·算法
薛定谔的算法21 分钟前
JavaScript单链表实现详解:从基础到实践
数据结构·算法·leetcode
CoovallyAIHub30 分钟前
CostFilter-AD:用“匹配代价过滤”刷新工业质检异常检测新高度! (附论文和源码)
深度学习·算法·计算机视觉
幻奏岚音31 分钟前
《数据库系统概论》第一章 初识数据库
数据库·算法·oracle
你好,我叫C小白32 分钟前
贪心算法(最优装载问题)
算法·贪心算法·最优装载问题
CoovallyAIHub39 分钟前
CVPR 2025 | 频率动态卷积(FDConv):以固定参数预算实现频率域自适应,显著提升视觉任务性能
深度学习·算法·计算机视觉
mit6.82442 分钟前
[rStar] 解决方案节点 | `BaseNode` | `MCTSNode`
人工智能·python·算法
on_pluto_1 小时前
Leecode hot100 - 448. 找到所有数组中消失的数字
数据结构