C语言详解括号匹配问题(栈的应用 )

这篇具有很好参考价值的文章主要介绍了C语言详解括号匹配问题(栈的应用 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题概述

检测括号是否成对出现
括号匹配问题 栈c语言,算法和数据结构,C语言,括号匹配,栈,算法,数据结构
最后出现的左括号最先匹配(LIFO),和栈的后进先出异曲同工
括号匹配问题 栈c语言,算法和数据结构,C语言,括号匹配,栈,算法,数据结构
每出现一个右括号,就抵消(出栈操作)掉一个左括号

算法思路

  • 遇到左括号就入栈
  • 遇到有括号,就抵消一个左括号

不匹配的情况

  • 遇到一个右括号,栈内弹出的左括号与之不匹配,例如 此时的右括号是 ] 而栈内的左括号是 {
  • 匹配到最后一个括号。栈内已经空了,说明此时多出来了括号
  • 处理完所有括号,栈内非空

实现流程图

括号匹配问题 栈c语言,算法和数据结构,C语言,括号匹配,栈,算法,数据结构

C语言代码

匹配代码实现代码

bool bracketCheck(char str[],int length){
	SqStack S;
	InitStack(&S); //初始化栈
	for(int i=0;i<length;i++){
		if(str[i]=='('||str[i]=='{'||str[i]=='['){
			Push(&S,str[i]); //扫描到左括号就入栈
		}else{
			if(IsEmpty(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 IsEmpty(S);
}

完整代码

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#define MaxSize 100 //定义栈中元素最大个数

typedef struct{
	char data[MaxSize];
	int top;
}SqStack;

//初始化栈
void InitStack(SqStack *S){
	S->top = -1;
}
//判断栈是否为空
bool IsEmpty(SqStack S){
	if(S.top == -1){
		return true;
	}
	return false;
}
//新元素入栈
void Push(SqStack *S,char x){
	if(S->top == MaxSize-1){
		printf("栈已满"); //栈已满
		return;
	}
	S->top += 1;
	S->data[S->top] = x;
}
//栈顶元素出栈,用x返回
void Pop(SqStack *S,char *x){
	if(S->top == -1){
		printf("栈已满");
		return;
	}
	*x = S->data[S->top];
	S->top -= 1;
}
//匹配算法
bool bracketCheck(char str[],int length){
	SqStack S;
	InitStack(&S); //初始化栈
	for(int i=0;i<length;i++){
		if(str[i]=='('||str[i]=='{'||str[i]=='['){
			Push(&S,str[i]); //扫描到左括号就入栈
		}else{
			if(IsEmpty(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 IsEmpty(S);
}
int main(){
	char s[MaxSize];
	printf("请输入需要判断的括号:\n");
	scanf("%s",s);
	int len = strlen(s);
	printf("当前输入的括号个数为:%d\n",len);
	printf("--------现在开始进行判断--------\n");
	if(bracketCheck(s,len)){
		printf("匹配成功!");
	}else{
		printf("匹配失败!");
	}
	return 0;
}

结果测试

括号匹配问题 栈c语言,算法和数据结构,C语言,括号匹配,栈,算法,数据结构
括号匹配问题 栈c语言,算法和数据结构,C语言,括号匹配,栈,算法,数据结构文章来源地址https://www.toymoban.com/news/detail-737695.html

到了这里,关于C语言详解括号匹配问题(栈的应用 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】【栈】括号匹配算法(可直接运行)

    假设表达式中允许包含三种括号:()、[]、{},其嵌套的顺序任意,即([]{})或[()[]{}]等均为正确的格式,实现一个算法,完成对表达式中括号的检验。 考虑以下括号序列: [ ( [ ] [ ] ) ] 分析如下: (1)计算机接收第一个括号 [ 后,等待与之匹配的 ] 出现。 (2)接收第二个括号

    2024年04月17日
    浏览(42)
  • C语言经典算法之括号匹配算法

    目录 前言 A.建议 B.简介 一 代码实现 二 时空复杂度 A.时间复杂度分析 B.空间复杂度分析 三 优缺点 A.优点: B.缺点: 四 现实中的应用 1.学习算法最重要的是理解算法的每一步,而不是记住算法。 2.建议读者学习算法的时候,自己手动一步一步地运行算法。 tips:文中的(如

    2024年02月21日
    浏览(28)
  • 【数据结构】括号匹配问题你学会了吗?来刷刷题检验一下吧!!!

    大家好,很高兴又和大家见面啦!!! 在前面的内容中,我们详细介绍了栈在括号问题中的应用,相信大家看完后对括号问题的解题思路有了更加清晰的认识了。俗话说的好,磨刀不误砍柴工。在今天的内容中,我们就来通过几道习题来加深栈在括号问题中应用吧。 首先我

    2024年04月22日
    浏览(23)
  • 栈的OJ题(逆波兰表达式求值+括号匹配+出入栈顺序匹配+最小栈)

    平时使用是算式是中缀表达式 逆波兰表达式是一种后缀表达式,算符写在后面。 优点: 1.去掉括号后表达式无歧义 2.适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中 3.中缀转后缀:加上括号,将对应的运算符放在括号外 1.题

    2024年02月08日
    浏览(41)
  • 【算法与数据结构】栈的实现详解

    栈的概念: 栈 :一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:

    2024年03月11日
    浏览(41)
  • 栈的详解和例题(力扣有效括号)

    感谢各位大佬的光临,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 收入专栏:初阶数据结构_LaNzikinh篮子的博客-CSDN博客 文章目录 前言 一.什么是栈 二.栈的实现 三.例题(力扣) 总代码 之前讲了,很多关于栈的习题,还有栈与队列

    2024年04月11日
    浏览(23)
  • 数据结构与算法-(7)---栈的应用-(4)后缀表达式求值

    🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:Aileen_0v0🧸—CSDN博客 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:Aileen_0v0🧸

    2024年02月07日
    浏览(41)
  • 【数据结构】用栈实现括号匹配

    1.创立一个判断括号是否匹配的函数BracketsCheck 2.传参(栈,输入的字符串) 3.对字符串中的(、[、{、这三种括号进行匹配 4.顺序从左往右进行,依次将符合条件的括号放入栈中,满足FILO原则 5.但拿到右括号时进行匹配,如果匹配成功,那么就出栈,如果失败就返回false 定义

    2024年02月06日
    浏览(31)
  • 头歌(C语言)-数据结构与算法-栈的实现-第1关:实现一个顺序存储的栈

    任务描述 相关知识 栈的基本概念 栈结构的定义(C) 顺序栈的操作 编程要求 测试说明 任务描述 本关任务是实现 step1/SeqStack.cpp 中的 SS_IsFull 、 SS_IsEmpty 、 SS_Length 、 SS_Push 和 SS_Pop 五个操作函数,以实现判断栈是否为满、是否为空、求栈元素个数、进栈和出栈等功能。 相关

    2024年02月07日
    浏览(47)
  • 《数据结构、算法与应用C++语言描述》-列车车厢重排问题

    完整可编译运行代码见:Github::Data-Structures-Algorithms-and-Applications/_10Train_carriages_rearrangement/ 一列货运列车有 n 节车厢,每节车厢要停靠在不同的车站。假设 n个车站从 1 到n 编号,而且货运列车按照从n到1的顺序经过车站。车厢的编号与它们要停靠的车站编号相同。为了便于从

    2024年04月10日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包