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

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

算法思想:

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

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

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

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

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;
}
相关推荐
锅挤4 小时前
数据结构复习(第四章):串
数据结构
B325帅猫-量子前沿技术研究所4 小时前
PSD和FFT的关系
人工智能·算法
闻缺陷则喜何志丹4 小时前
【排序】P6149 [USACO20FEB] Triangles S|普及+
c++·算法·排序·洛谷
avocado_green4 小时前
【LeetCode】90. 子集 II
算法·leetcode
tankeven4 小时前
HJ178 【模板】双指针
c++·算法
君义_noip5 小时前
信息学奥赛一本通 4131:【GESP2506六级】学习小组 | 洛谷 P13015 [GESP202506 六级] 学习小组
算法·动态规划·gesp·信息学奥赛
XS0301065 小时前
数据结构-哈夫曼树,红黑树,B树
数据结构·b树
6Hzlia5 小时前
【Hot 100 刷题计划】 LeetCode 72. 编辑距离 | C++ 经典 DP 增删改状态转移
c++·算法·leetcode
穿条秋裤到处跑5 小时前
每日一道leetcode(2026.04.16):距离最小相等元素查询
算法·leetcode·职场和发展
XY_墨莲伊6 小时前
【实战项目】基于B/S结构Flask+Folium技术的出租车轨迹可视化分析系统(文末含完整源代码)
开发语言·后端·python·算法·机器学习·flask