每日一刷——10.14——括号匹配(手写栈来实现)

news2025/1/18 16:45:59

栈与队列题目

第一题

题目

问题描述】设计一个算法判别一个算术表达式的圆括号是否正确配对

【输入形式】一个以@为结尾的算术表达式
【输出形式】若配对,则输出圆括号的对数;否则输出no

【样例输入】
(a+b)/(c+d)@

【样例输出】
2
【样例说明】共有两对括号,输出2

#include <iostream>
using namespace std;

template <class T>
class stack{   //这里不需要写<T> 
	public:	
		stack(int max);
		bool Push(T& a);
		bool Pop();
		T top();
	private:
		int max;
		int count;
		int front; 
		T* element;
};

template <class T>
stack<T>::stack(int max){
	element = new T[max];   //这里要写T类型的数组 
	front=-1;
	count=0;
}
template <class T>
bool stack<T>::Push(T& num){
	count++;
	front++;
	element[front]= num;      //element怎么用?? 
	return true;
}

template <class T>
bool stack<T>::Pop(){
	front--;
	count--;
	return true;
}

template <class T> 
T  stack<T>::top(){
	return element[front];
}

int main(){
	string str;
	int flag=1,count=0;
	stack<char> s(10);
	getline(cin,str,'@');
	for(int i=0;i<str.length();i++){
		if(str[i]=='(')
			s.Push(str[i]);
		else if(str[i]==')'){
			if(s.top()=='('){
				s.Pop();
				count++;
			}else{
				flag=0;
				break;
			}
		}
	} 
	if(flag==0)
		cout<<"no"<<endl;
	else
		cout<<count<<endl;
} 

样例不通过的点:

 看来没有正确输出没有一对括号都没有的结果

分析:

但是我欠缺考虑了多了左括号和多了右括号的情况!!!!

1.当左括号多余时,那么就是前面的括号全部抵消之后,但是最后栈里边还有元素
2.当右括号多余时,那么就是当右括号还想匹配时,却发现栈已经空了,这两种情况都是我需要考虑的,所以经过改进之后

代码如下

#include <iostream>
using namespace std;

//只要理清楚了,就很简单的,说服自己,但是身体好累 

template <class T>
class stack{   //这里不需要写<T> 
	public:	
		stack(int max);
		bool Push(T& a);
		bool Pop();
		T top();
		int Size();
	private:
		int max;
		int count;
		int front; 
		T* element;
};

template <class T>
stack<T>::stack(int max){
	element = new T[max];   //这里要写T类型的数组 
	front=-1;
	count=0;
}

template <class T>
int stack<T>::Size(){
	return count;
}

template <class T>
bool stack<T>::Push(T& num){
	count++;
	front++;
	element[front]= num;      //element怎么用?? 
	return true;
}

template <class T>
bool stack<T>::Pop(){
	front--;
	count--;
	return true;
}

template <class T> 
T  stack<T>::top(){
	return element[front];
}

int main(){
	string str;
	int flag=1,count=0;
	stack<char> s(10);
	getline(cin,str,'@');
	for(int i=0;i<str.length();i++){
		if(str[i]=='(')
			s.Push(str[i]);
		else if(str[i]==')'){
			if(s.top()=='('){
				s.Pop();
				count++;
			}else if(s.Size()==0){
				flag=0;
				break;
			}else{
				flag=0;
				break;
			}
		}
	} 
	 
	if(s.Size()!=0)
		cout<<"no"<<endl;   
	else if(flag==0)
		cout<<"no"<<endl;
	else
		cout<<count<<endl;
} 

最主要是改变了一下下边这样的两个判断输出语句

if(s.top()=='('){
				s.Pop();
				count++;
			}else if(s.Size()==0){
				flag=0;
				break;
			}else{
				flag=0;
				break;
			}

if(s.Size()!=0)
		cout<<"no"<<endl;   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2214233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

带隙基准Bandgap电路学习(三)

一、导入器件到版图中 从原理图中导入器件&#xff1a; Connectivity——>Generate——>All From Source I/O Pins暂不添加&#xff0c;后面自己画 PR&#xff08;Primary Region&#xff09;Boundary: 通常是用来定义芯片设计中某些关键区域的轮廓&#xff0c;比…

揭秘数字时代的安全守护者:深入探索RSA加密算法的奥秘

目录 引言 一、什么是RSA&#xff1f; 二、RSA 的基本原理 三、RSA 加密的基本步骤 1、加密过程 2、解密过程 四、RSA例子 五、RSA 的特点 六、RSA 的安全性 七、RSA 的实际应用 总结 引言 在当今的信息化社会&#xff0c;数据的安全性和隐私保护已…

外包干了两年,女朋友跟别人跑了

在这个瞬息万变的IT行业&#xff0c;不进则退的道理&#xff0c;我算是深刻体会到了。作为一名本科生&#xff0c;21年通过校招&#xff0c;我幸运地踏入了广州某知名软件公司的大门&#xff0c;成为了一名功能测试工程师。那时的我&#xff0c;满怀激情与梦想&#xff0c;以为…

Neuromnia是一家创新的AI平台用Llama为自闭症护理领域带来全新解决方案

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Linux——Harbor(容器镜像 管理项目)

镜像拉取存在一定的问题&#xff0c;出现原因在于&#xff1a; 使用官方公共仓库中的镜像。 拉取的镜像&#xff0c;主要保存在一下仓库中&#xff1a; docker.io //Docker hub 最大的官方维护的公共镜像仓库&#xff0c;一般都会提供所有项目的最新版镜像&#xff0c;镜像…

SIGformer: Sign-aware Graph Transformer for Recommendation

SIGformer: Sign-aware Graph Transformer for Recommendation&#xff08;Sigir24&#xff09; 摘要 在推荐系统中&#xff0c;大多数基于图的方法只关注用户的正面反馈&#xff0c;而忽略了有价值的负面反馈。将正反馈和负反馈结合起来形成一个带符号的图&#xff0c;可以更…

【AI论文精读5】知识图谱与LLM结合的路线图-P2

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI大项目】【AI应用】 P1 4 知识图谱增强的LLMs 大语言模型&#xff08;LLMs&#xff09;在许多自然语言处理任务中取得了令人期待的结果。然而&#xff0c;LLMs因缺乏实用知识和在推理过程中容易产生事实性错误而受到…

数据类型、变量和运算符

数据类型 数据类型分为基本数据类型和引用数据类型&#xff1b; 基本数据类型 无论是32位系统还是64位系统&#xff0c;数据类型所占的字节数都不会变 &#xff1b;整形和浮点型都是带有符号的&#xff1b;整型默认int&#xff0c;浮点型默认double&#xff1b; 整型 字节型…

图文深入理解java对象从创建到回收都经历了什么

1. 前言&#xff1a; 每个java对象都是有生命周期的&#xff0c;就像一个人的生命一样&#xff0c;从孕育到出生到成长变老最后由归于自然。笔者认为&#xff0c;Java对象的整个生命周期可以分为两个大的阶段&#xff1a;即创建阶段和运行阶段&#xff08;包含对象的回收和消亡…

19009 后缀表达式

### 思路 1. **输入处理**&#xff1a;读取输入的后缀表达式&#xff0c;去掉末尾的符号。 2. **使用栈计算后缀表达式**&#xff1a; - 遍历表达式中的每个字符。 - 如果是数字&#xff0c;压入栈中。 - 如果是运算符&#xff0c;从栈中弹出两个数字进行运算&#xf…

若依前后端分离版本el-select下拉框字典如何设置默认值。

在若依前后端分离框架中&#xff0c;如何给下拉框设置默认值&#xff0c;刚入门的小伙伴&#xff0c;可能会不知道如何去做。 本章教程&#xff0c;主要以用户管理模块中的添加用户举例说明如何设置用户性别默认值为男。 解决思路 首先&#xff0c;我们需要找到打开新增页面的方…

解锁机器学习的新维度:元学习的算法与应用探秘

引言 在机器学习快速发展的今天&#xff0c;元学习&#xff08;Meta-Learning&#xff09;作为一种新兴的方法论&#xff0c;受到了越来越多的关注。元学习的主要目标是使模型能够在面对新任务时迅速适应&#xff0c;通常只需极少的样本。这一能力在现实应用中尤为重要&#x…

linux点灯驱动实验实现

1.用字符串实现LED灯驱动编写 LED灯连接到的是GPIO1_IO03口上&#xff0c;所以我们只需要初始化这个引脚时钟&#xff0c;配置这个引脚和电器属性&#xff0c;我们就可以通过寄存器对LED进行控制。 2.内存映射 与STM32等芯片不同的是&#xff0c;linux系统对引脚地址操作不是…

光平面标定代码

本篇文章主要给出光平面标定代码&#xff0c;鉴于自身水平所限&#xff0c;如有错误&#xff0c;欢迎批评指正。&#xff08;欢迎进Q群交流&#xff1a;874653199&#xff09; 数据分为棋盘格数据和激光条数据&#xff0c;激光条数据为在第22个位姿至第26个位姿下打在棋盘格标定…

短视频矩阵多账号发布源码

在构建一个短视频矩阵系统时&#xff0c;我们需综合考虑多个关键领域&#xff1a;用户接口设计、后端处理逻辑、数据存储与维护以及系统安全性。该系统的主要功能模块包括&#xff1a; 1. 用户界面&#xff08;UI&#xff09;设计 - 登录/注册功能&#xff0c;允许用户创建并管…

解锁 SDKMAN!:最新教程与全面简介

SDKMAN! 是一个用于管理开发工具的软件开发工具包管理器,特别适用于 JVM 生态系统。 官网地址:https://sdkman.io/ 多版本管理:允许用户在同一台机器上安装和管理多个版本的 SDK(如 Java、Groovy、Scala、Kotlin 等)。 简单安装:通过简单的命令行命令可以安装、更新和卸载…

在三维可视化项目中,B/S和C/S架构该如何选择?

一、什么是B/S和C/S 在3D数据可视化中&#xff0c;有两种常见的架构模式&#xff1a;BS&#xff08;Browser/Server&#xff09;和CS&#xff08;Client/Server&#xff09; B/S模式 B/S模式是指将3D数据可视化的逻辑和处理放在服务器端&#xff0c;而在客户端使用浏览器进行…

Nature 正刊丨生物分子冷凝物介导内体膜的弯曲和断裂

01摘要 多囊体是通过降解膜结合的货物蛋白1,2,3参与细胞质量控制的关键内体隔室。消耗ATP的ESCRT蛋白机制通过多泡体膜的内陷和断裂形成管腔内囊泡&#xff0c;介导膜结合货物蛋白的捕获和吞噬4,5。在这里&#xff0c;我们报告说&#xff0c;植物ESCRT组分FREE16形成与膜结合的…

Hadoop集群基础搭建

目录 一.虚拟机安装 1.配置虚拟机的ip 2.配置本机的ip 3.新建虚拟机 4.克隆三台虚拟机 二.虚拟机网络配置 1.修改ip配置 2.配置主机名和主机映射 3.配置SSH免密登陆 三.安装JDK 1.tar命令解压JDK安装包 2.配置JDK的环境变量 四.安装Hadoop 1.tar命令解压Hadoop安…

Python数据分析-matplotlib数据可视化

1. 初识Matplotlib matplotlib是 Python 最流行的绘图工具之一&#xff0c;广泛用于数据可视化。 1.1基本图表绘制&#xff1a; 图表名称表示函数散点图plt.scatter(x, y)柱状图plt.bar(x, height)折线图plt.plot(x, y)直方图plt.hist(x, bins)箱线图plt.boxplot(x)热力图p…