栈的应用一之括号匹配问题

2023-11-18

括号匹配问题:

         给一个类似这样的字符串:char a[]="(())abc{[(])}";检测三种括号的左右括号是否匹配?

分析:

先取出一个字符,并判断是不是括号(任意括号)?

    1.   不是括号,取下一个字符。

    2.   是括号。

              (1)   是左括号。压栈

              (2)   是右括号。和栈顶元素比较

                                         ①  栈空。   前面所取的左右括号匹配或者字符串第一个字符为右括号,

                                                            说明右括号比左括号多,直接返回。

                                         ② 栈不空。栈顶元素与当前括号是否匹配?

                                                            匹配,  将栈中的左括号出栈

                                                           不匹配,栈顶元素的括号和当前括号的种类不一样

                                                                         说明左右括号不匹配,直接返回。

当循环结束后,字符串中所有的字符都检测是否匹配。

    1.  栈依然为空。左右括号匹配正确

    2.  栈不为空。   左括号比右括号多

看代码:sum.h

#ifndef __STACK_H__ 
#define __STACK_H__ 

typedef int DataType;
typedef struct Node
{
	DataType data[10];
	int sz;
}Stack;
void Initstack(Stack * stack);
void Pushstack(Stack * stack,DataType d);
void Popstack(Stack * stack);
int  Topstack(Stack  stack);
void MatchBrackets(Stack *stack, const char* x);
#endif

              sum.c

#include"sum.h"
#include<assert.h>
#include<stdio.h>
#include<string.h>
void Initstack(Stack * stack)
{
	assert(stack!=NULL);
	memset(stack, sizeof(stack->data), 4);
	stack->sz = 0;
}
void Pushstack(Stack * stack, DataType d)
{
	assert(stack != NULL);
	stack->data[stack->sz] = d;
	stack->sz++;
}
void Popstack(Stack * stack)
{
	assert(stack != NULL);
	stack->data[stack->sz - 1] = 0;
	stack->sz--;
}
int  Topstack(Stack  stack)
{
	return stack.data[stack.sz - 1];
}

void MatchBrackets(Stack *stack, const char* x)
{
	int str = strlen(x);
	int i = 0;
	for (i = 0; i < str; i++)
	{
		if ((x[i] == '(') || (x[i] == '[') || (x[i] == '{') || (x[i] == ')') || (x[i] == ']') || (x[i] == '}'))//判断是否是括号
		{
			if ((x[i] == '(') || (x[i] == '[') || (x[i] == '{'))//判断是否是左括号
			{
				Pushstack(stack, x[i]);//压栈
			}
			else
			{
				
				if (stack->sz == 0)//判断栈空
				{
					printf("右括号比左括号多!!!\n");
					return;
				}
				if ((Topstack(*stack) == '(' && x[i] == ')') || (Topstack(*stack) == '[' && x[i] == ']') || (Topstack(*stack) == '{' && x[i] == '}'))//判断栈顶元素与当前括号是否匹配
				{
					Popstack(stack);//出栈
				}
				else
				{
					printf("左右括号次序匹配不正确\n");
					return ;
				}
			}
		}
	}
	if (stack->sz == 0)//判断栈空
	{
		printf("左右括号匹配正确\n");
	}
	else
	{
		printf("左括号比右括号多!!!\n");
	}
}

              test.c

#include<windows.h>
#include<stdio.h>
#include"sum.h"

int main()
{
	Stack stack1;
	Stack stack2;
	Stack stack3;
	Stack stack4;
	Initstack(&stack1);
	Initstack(&stack2);
	Initstack(&stack3);
	Initstack(&stack4);
	char a[] = "(())abc{[(])}";
	char b[] = "(()))abc{[]}";
	char c[] = "(()()abc{[]}";
	char d[] = "(())abc{[]()}";
	MatchBrackets(&stack1, a);
	MatchBrackets(&stack2, b);
	MatchBrackets(&stack3, c);
	MatchBrackets(&stack4, d);
	system("pause");
	return 0;
}

运行结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

栈的应用一之括号匹配问题 的相关文章

  • Android Studio连接Mysql数据库步骤以及常见错误

    1 先把Mysql给下好 环境变量也配置好 这里我就不说了 2 下载好Navicat for Mysql软件 管理数据库 3 进入Android Studio创建一个类 写好连接数据库的代码 我们采用的是常用的JDBC方法来连接 需要的ja
  • JNI基础

    问题1 JNI是什么 答 JNI是Java语言的机制 Java可以通过JNI调用C C 代码 C C 代码也可以通过JNI调用Java代码 问题2 NDK是什么 答 NDK是代码库 功能有两个 1 将 c cpp文件转换成 so文件 2 将
  • 【产品笔记】3.产品经理实战

    1 团队合作 2 产品设计到立项 3 项目启动到产品上线 4 产品上线后的运营 产品 商业模式 功能 设计 技术 内容 产品的成功归功于整个团队的精诚合作 产品的失败只归咎于产品负责人 用户运营 拉新 留存 老用户召回 内容运营 内容质量
  • Visual Studio 2017下载地址和安装教程(图解版)

    Visual Studio 2017下载地址和安装教程 图解版 Visual Studio 2017不仅支持C C Python Visual Basic Node js HTML JavaScript等各大编程语言 还能开发 iOS An
  • 华为OD机试真题-日志排序-2023年OD统一考试(B卷)

    华为OD机试2023年最新题库 JAVA Python C 题目描述 运维工程师采集到某产品现网运行一天产生的日志N条 现需根据日志时间按时间先后顺序对日志进行排序 日志时间格式为 H M S N H表示小时 0 23 M表示分钟 0 59
  • MOS管的知识,看这一篇就可以了

    转载 21ic电子网 2020 11 15 18 19 以下文章来源于记得诚电子设计 作者记得诚 记得诚电子设计 分享电子硬件知识 永远相信美好的事情即将发生 今天的文章简单总结一下MOS管 如下是本文目录 场效应管分类 场效应管分为结型
  • 虚拟机执行子程序-虚拟机字节码执行引擎

    代码编译的结果从本地机器码转变为字节码 是存储格式发展的一小步 却是编程语言发展的一 大步 虚拟机执行子程序 虚拟机字节码执行引擎 一 概述 二 运行时栈帧结构 1 局部变量表 2 操作数栈 3 动态连接 4 方法返回地址 5 附加信息 三
  • 图像处理知识框架

    转自https blog csdn net hitwengqi article details 8292675 花了点时间整理了一下数字图像处理知识体系 从宏观上把握图像处理 使自己的学习思路就更加清晰 1 本文大部分内容来自 http b
  • Vue前端框架12 组件生命周期、生命周期的应用、动态组件、组件保持存活、异步组件、依赖注入、Vue应用原理

    文章目录 一 组件生命周期 二 生命周期的应用 三 动态组件 四 组件保持存活 五 异步组件 六 依赖注入 七 Vue应用 一 组件生命周期 每个Vue组件在创建时需要经历一系列的初始化步骤 比如设置侦听 编译模板 挂载实例到DOM 或者数
  • Matlab中的矩阵合并操作

    Matlab中的矩阵合并操作 矩阵是Matlab中最常用的数据结构之一 矩阵合并也是一个十分实用的操作 本文将介绍在Matlab中如何进行矩阵合并 并提供相应的源代码 在Matlab中 可以用方括号 来表示一个矩阵 矩阵合并可以分为横向合并
  • 【iOS】push与present Controller的区别

    文章目录 前言 一 push方法 二 pop方法 三 present方法 四 dismiss方法 五 dismiss多级的方法 举例 动画 前言 iOS推出与退出界面有两种方式 push与present 接下来笔者分别介绍这两种方式 一 p
  • Lcd(一)显示原理

    一 LCD控制原理 S5PV210处理器中自带LCD控制器 控制LCD的显示 把 LCD 图像数据从一个位于系统内存的 video buffer 传送到一个外部的 LCD 驱动器接口 类型 1 STN 超扭曲向列 它的特点是功耗低 但亮度不
  • 图片隐写神器Stegsolve安装教程

    首先需要配置电脑的java环境 网上有教程 通过该链接 www caesum com handbook Stegsolve jar 下载Stegsolve jar 有Java环境的话会自动选择使用Java打开 如下图 功能分析 File F
  • 【Bitlocker篇】BitLocker无法加密系统盘,提示正在启动Bitlocker,系统找不到指定的文件的解决方案

    Bitlocker篇 BitLocker无法加密系统盘 提示正在启动Bitlocker 系统找不到指定的文件的解决方案 先排除先天不足因素 1 首先电脑硬件支持TPM 2 电脑系统支持BitLocker加密 3 除系统盘外其他盘能正常启用B
  • 硬件产品经理:从入门到精通(新书发布)

    目录 简介 新书 框架内容 相关课程 简介 在完成多款硬件产品从设计到推向市场的过程后 笔者于2020年开始在产品领域平台输出硬件相关的内容 在这个过程中经常会收到很多读者的留言 希望能推荐一些硬件相关的书籍或资料 其实 笔者刚开始做硬件产
  • Win10 警告-已计划将多个默认网关用于提供单一网络例如Intranet或Internet)的冗余…的解决方案

    电脑因为硬盘故障更换了硬盘重新安装了系统 按照以前设置的IP地址重新设置 但是总是出现 警告 已计划将多个默认网关用于提供单一网络 折腾了好久 不得其解 最后 把 控制面板 网络和 Internet 网络连接 里的 WLAN 蓝牙网络连接
  • Linux文件系统实验(C语言实现新建、打开、关闭、读写文件以及查改文件权限)

    操作系统实验导航 实验一 银行家算法 https blog csdn net weixin 46291251 article details 115384510 实验二 多级队列调度和多级反馈队列调度算法 https blog csdn n
  • mac用终端登陆PostgreSQL时出现-bash: psql: command not found

    系统无psql命令 此时要将postgresql 的 bin 目录添加到环境变量中 注意你的postgresql在哪 还有它的版本 推荐前往 Applications和 Library确认 export PATH Library Postg
  • 开源LLM「RWKV」想要打造AI领域的Linux和Android|ChatAI

    RWKV想逐步成为最强开源模型 中期计划取代Transformer 能如愿吗 我们没有护城河 OpenAI也是 近期 谷歌内部人士在Discord社区匿名共享了一份内部文件 点破了谷歌和OpenAI正面临的来自开源社区的挑战 尽管经外媒Se

随机推荐

  • [2019计算机视觉]——贪心学院 学习笔记 1.环境配置

    环境 硬件环境 我的硬件环境是 Intel I7 8750H GTX 1060 系统环境 anaconda 4 5 11 Ubuntu18 04 软件环境 名称 版本 python 3 6 7 cuda 9 0 cudnn 7 4 Tens
  • 一键生成微信小程序的制作工具-小程序切片工具

    微信小程序前端开发者工具 小程序切片 是一款根据效果图像画画一样来设计微信小程序 自动生成导出前端页面的快速开发工具 可以很方便 快速地生成小程序的wxml wcss js文件 可以大大提高您的工作效率 减少前端布局的编写工作 功能如下 1
  • Node(4)

    文章目录 express跨域解决 路由传参 静态资源渲染 serve static MVC 1 新建文件夹 routers 路由管理utils工具类 2 新建文件夹 controller 请求处理 3 新建文件夹 model service
  • TensorRT学习(实战-自定义算子)

    YOLOv4进行TensorRT推理的时候会使用Mish激活函数 而使用到的mish激活函数没有在TensorRT进行实现 故需要进行实现对应TensorRT插件 故需要进行Mish激活函数的实现 Mish激活函数定义 def mish f
  • Arduino - 字符判断函数

    Arduino 字符判断函数 字符判断函数 虽然在实际编程中可能很少使用到 但是可以作为知识储备 有必要了解一些 这些函数包含在ctype h当中 Arduino IDE路径 C Program Files x86 Arduino hard
  • Python入门教程完整版,Python所有方向学习体系,学完即可就业

    今天给大家带来了干货 Python入门教程完整版 完整版啊 完整版 言归正传 小编该给大家介绍一下这套教程了 希望每个小伙伴都沉迷学习 无法自拔 本套教程学习时间15天 1 3天内容 为Linux基础命令 4 13天内容 为Python基础
  • 导入 导出 jeesite框架封装

    为什么80 的码农都做不了架构师 gt gt gt JeeSite的Excel导入 导出 支持大数据量 使用annotation最小化配置 介绍 对Apache POI 3 9的简单封装 实现Excel的导出导入功能 使用Annotatio
  • 数据库 --- 约束

    一 什么是约束 常见的约束有那些 约束是在创建表的时候 可以给表的字段添加相应的约束 添加约束的目的是为了保证表中数据的合法性 有效性 完整性 常见的约束有 非空约束 not null 唯一约束 unique 主键约束 primary ke
  • Some Tips in Life

    How to Find Digital Books 1 http so baiduyun me 百度云搜索 2 http www zhaofile com 找文件 3 http www cnepub com 掌上书苑 4 http vdis
  • java定义时钟类clock_Java 编程题,定义一个时钟类(Clock)

    题目 Java 编程题 定义一个时钟类 Clock 要求如下 1 存储时钟的时hour 0 23 分minute 0 59 秒second 0 59 2 创建新对象时默认为0时0分0秒 3 设置时钟为指定的时间 4 使时钟前进1秒钟的功能i
  • jstat 命令

    NAME jstat Monitors Java Virtual Machine JVM statistics This command is experimental and unsupported SYNOPSIS jstat Opti
  • mongoDB数据库----简介

    目录 目录 一 NoSQL 1 关系型数据库遵循ACID规则 2 分布式系统 3 分布式计算的优点 4 分布式计算的缺点 5 什么是NoSQL 6 NoSQL 简史 7 NoSQL的优点 缺点 8 NoSQL 数据库分类 二 MongoDB
  • 你知道ChatGPT有哪些商业价值吗?不知道,那没意思

    这段时间 热度zui大的是什么 答案是 ChatGPT 去年11月底上线 当时仅在AI和科技圈内小火了一把 没想到在今年春节后 火爆出圈 ChatGPT的爆火 对商家和品牌方 还有投资创业者来说 是个机遇 普通人虽然很难参与到这些高科技的投
  • Python 求两个正整数的最大公约数

    辗转相除法 思路 1 将两整数求余 a b x 2 如果x 0 则b为最大公约数 3 如果x 0 则 a b b x 继续从1开始执行 4 也就是说该循环的是否继续的判断条件就是x是否为0 代码如下 def main a int input
  • javascript经典代码推荐

  • 基于Matlab的高精度轨道传播器模拟

    基于Matlab的高精度轨道传播器模拟 传播器模拟是一种常见的工程方法 用于预测和分析卫星 火箭或其他天体在轨道上的运动 在这篇文章中 我们将使用Matlab编写一个高精度轨道传播器模拟器 并提供相应的源代码 轨道传播器模拟器的主要目标是根
  • FRP服务器搭建成功后,配置多个客户端使用

    FRP内网穿透服务器搭建成功后 在服务器后台启动FRP 然后还需要两步 第一 在域名购买的网站 比如阿里云 配置一条所有子域名到服务器IP的规则 第二 配置多个客户端 A电脑的配置信息如下 common server addr 服务器IP
  • 前端八股文系列(四)4 JavaScript

    文章目录 前端八股文系列 四 4 JavaScript JS中的8种数据类型及区别 JS中的数据类型检测方案 1 typeof 2 instanceof 3 Object prototype toString call instanceof
  • LeetCode-1781. 所有子字符串美丽值之和【哈希表,字符串,计数】

    LeetCode 1781 所有子字符串美丽值之和 哈希表 字符串 计数 题目描述 解题思路一 简单暴力 双层循环 重点是分别记录子字符串 i j 的最大最小频率 注意这里当i变的时候 所有字符出现的频率就清理 否则在原来的基础上加就行 解
  • 栈的应用一之括号匹配问题

    括号匹配问题 给一个类似这样的字符串 char a abc 检测三种括号的左右括号是否匹配 分析 先取出一个字符 并判断是不是括号 任意括号 1 不是括号 取下一个字符 2 是括号 1 是左括号 压栈 2 是右括号 和栈顶元素比较 栈空 前