【STL】栈(stack)

news2024/11/24 15:44:59

笔者在做下面这道题的时候想到用栈,但写的很麻烦

括弧匹配检验

代码:

#include<bits/stdc++.h>
using namespace std;
#define MAXC 255
typedef int SElemType;
typedef struct StackNode
{
	SElemType data;
	struct StackNode *next;
}StackNode,*LinkStack;
bool Push(LinkStack &S,SElemType e)
{
	StackNode *p;
	p=new StackNode;
	p->data=e;      
	p->next=S;     
	S=p;
	return 1;
}
bool Pop(LinkStack &S,SElemType &e)
{
	LinkStack p;
	if(S==NULL)return false;
	e=S->data;
	p=S;
	S=S->next;
	free(p);
	return true;
}
bool GetTop(LinkStack &S,SElemType &e)
{
	if(S==NULL) return false;
	e=S->data;
	return true;
}
bool isMatch(char ch[],LinkStack &S){
	SElemType e;
	for(int i=0;i<strlen(ch);i++){
		if(ch[i]=='['){
			Push(S,1);
	    }
	    else if(ch[i]=='('){
	    	Push(S,0);
		}
		else if(ch[i]==']'){
			if(GetTop(S,e)&&e==1) Pop(S,e);
			else return 0;
		}
		else if(ch[i]==')'){
			if(GetTop(S,e)&&e==0) Pop(S,e);
			else return 0;
		}
	}
	if(S!=NULL) return 0;
	return 1;
}
int main(){
	LinkStack S;
	S = NULL;
	char ch[MAXC];
	cin>>ch;
	if(isMatch(ch,S)) cout<<"OK";
	else cout<<"Wrong";
	return 0;
}

需要自己定义栈,定义入栈、出栈、取栈顶函数。

笔者是个嫌麻烦的人(绝对不是懒),找到了STL这个法宝!

STL的组件之一是容器,容器里面就有我们的栈,“bangbangbangbang

STL是个宝,头文件可不能少:

#include<stack>//这是栈的

当然,笔者是个懒蛋,有请万能头文件:

#include<bits/stdc++.h>

它是一个包含了每一个标准库的头文件。

优点:

  • 在算法竞赛中节约时间;
  • 减少了编写所有必要头文件的工作量。

缺点:

  • 不是GNU C++库的标准头文件,在部分情况下会编译失败;
  • 包含了很多不必要的东西,会大大增加编译时间。

栈的定义

stack<typename> stackname;
//typename为类型名,stackname为栈的命名,类型名可以不写
stack stackname;
//stack对象的拷贝构造与赋值
stack(const stack &stk);        //拷贝构造函数
stack& operator=(const stack &stk);        //重载等号操作符

栈的成员函数

函数名功能
.empty()判断栈是否为空,空则返回true
.pop()出栈
.push()压栈
.size()返回栈中元素数目
.top()返回栈顶元素
s.swap(s2)交换s和s2里面的值(s2需要和s是一个类型)

实例:

stack<int>sta;
sta.push(9);
stack<int> sta1(sta);        //调用拷贝构造函数
stack<int> sta2;
sta2=sta;        //等号重载赋值
stack<int> sta3=sta;    //调用拷贝构造函数,只有这条语句执行会调用构造函数,此处为调用拷贝构造函数而不是用等号重载赋值
    stack<int> sta;
    sta.push(1);
    sta.push(2);
    sta.push(3);
    sta.emplace(4);
    stack<int> sta1;
    sta1.push(5);
    sta1.push(6);
    sta.swap(sta1);
    cout <<"sta.size() is " << sta.size() << endl;
    cout << "sta1.size() is " << sta1.size() << endl;
    while (!sta1.empty())
    {
        cout << sta1.top() << endl;
        sta1.pop();
    }

emplace:C++11新特性emplace操作

这样一开始的代码就可以改写的简单了,这里还有一种解法:

#include<iostream>
#include<cstring>
using namespace std;
char a[255]={0};
int main(){
	int i,n,t,j,k;
	string s;
	bool f;
	cin>>s;t=0;
	for(j=0;j<=s.size()-1;j++){
		if(s[j]=='('||s[j]=='[') a[++t]=s[j];
		//如果是左括号就进栈
		if(s[j]==')') if(a[t]=='(') t--;else t++;
		if(s[j]==']') if(a[t]=='[') t--;else t++;
		//不匹配就出栈 
	}
	if(t==0) cout<<"OK"<<endl;
	else cout<<"Wrong"<<endl;
	return 0; 
}

stack没有迭代器

Stack所有元素的进出都必须符合”先进后出”的条件,只有stack顶端的元素,才有机会被外界取用。Stack不提供遍历功能,也不提供迭代器。

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

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

相关文章

LiveNVR监控流媒体Onvif/RTSP功能-概览负载统计展示取流中、播放中、录像中点击柱状图快速定位相关会话

LiveNVR概览负载统计展示取流中、播放中、录像中点击柱状图快速定位相关会话 1、负载信息说明2、快速定位会话3、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、负载信息说明 实时展示取流中、播放中、录像中等使用数目 取流中&#xff1a;当前拉流到平台的实时通道数目播放中&am…

天诚物联网锁亮相福州南京沈阳西安展会,与您见证AIoT行业发展

目光灼灼&#xff0c;步履不辍。自4月1日第七届CCLE中国教育后勤展览会一别&#xff0c;全场景AIoT解决方案服务商——江苏新巢天诚智能技术有限公司&#xff08;以下简称“天诚”&#xff09;打造的校园物联网锁软硬一体化解决方案获得了诸多准意向代理商、集成商同仁们的咨询…

人形机器人行业报告:AI赋能人形机器人开启产业化元年

今天分享的是人形机器人专题系列深度研究报告&#xff1a;《AI赋能&#xff0c;人形机器人开启产业化元年》。 &#xff08;报告出品方&#xff1a;国泰君安证券&#xff09; 报告共计&#xff1a;56页 要点 通用性是人形机器人商业化的关键&#xff0c;AI大模型赋能加速机…

蓝桥杯 每日2题 day5

碎碎念&#xff1a;哦哈呦&#xff0c;到第二天也是哦哈哟&#xff0c;&#xff0c;学前缀和差分学了半天&#xff01;day6堂堂连载&#xff01; 0.单词分析 14.单词分析 - 蓝桥云课 (lanqiao.cn) 关于这题就差在input前加一个sorted&#xff0c;记录一下下。接下来就是用字…

jenkins+git+maven+nodejs安装(linux系统)

前文已经安装完成sonarqube和Sonar Scanner了&#xff0c;接下来可以开始jenkins了 jenkins安装 命令&#xff08;版本为 2.440&#xff09; wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo wget https://pkg.jenkins.io/redh…

golangci-lint 报错

File is not gci-ed with --skip-generated -s standard,default (gci) golangci-lint 报错上面的错解决办法&#xff1a; 1. 文件换行需要换成"LF" 而不是"CRLF" ---->>> 我用的goland IDE&#xff0c;随便在这个文件删除一个空行&#xff…

《手把手教你》系列基础篇之2-python+ selenium自动化测试-打开和关闭浏览器(详细)

1. 简介 本节介绍如何初始化一个webdriver实例对象driver&#xff0c;然后打开和关闭firefox浏览器。要用selenium打开fiefox浏览器。首先需要去下载一个driver插件geckodriver.exe&#xff0c; 下载地址https://github.com/mozilla/geckodriver/releases&#xff0c;下载好这…

爬虫现在还有那么吃香嘛?

Python 作为一种广泛应用的编程语言&#xff0c;在 Web 开发、大数据开发、人工智能开发和嵌入式开发等领域都有着重要的应用。 Python 的易学性、清晰性和可移植性等特点使它得到很多技术人士的喜爱。对于数据科学和机器学习领域的程序员来说&#xff0c;Python 提供了强大的…

并发编程-线程安全:volatile、Lock、synchronized、CAS、ABA、AQS

并发编程-线程安全 1、volatile 关键字1.1 作用1.2 底层实现原理 2、synchronized2.2 synchronized 用法2.2 synchronized 和 volatile 的区别 3、Lock3.1 Lock 和 synchronized 的区别3.2 ReentrantLock 和 synchronized 的区别 4、CAS4.1 CAS 执行流程4.2 ABA问题 5、AQS&…

2024最火的情感短视频素材在哪下载?这里有几个素材网站可以下载

在这个看似无边无际的短视频海洋中&#xff0c;我就像那个手握罗盘、脚踏破旧木筏的勇敢航海家&#xff0c;时刻准备着发现新大陆。而我的罗盘&#xff0c;就是那些能够指引我找到珍稀素材的网站。让我带你领略一下我的航海日记吧。九才素材网&#xff1a; 九才素材网提供了丰…

大数据dolphinscheduler 本地容器化安装

Minio 容器安装 docker run -p 9000:9000 -p 9090:9090 --name minio -d -e "MINIO_ACCESS_KEYminioadmin" -e "MINIO_SECRET_KEYminioadmin" -v D:\SF\DOCKER\minio\data:/data -v D:\SF\DOCKER\minio\config:/root/.minio minio/minio server /da…

全国电影(广州)交易会暨第25届全国优秀影片推介会盛大召开

4月10日&#xff0c;全国电影&#xff08;广州&#xff09;交易会暨第25届全国优秀影片推介会在广州增城召开。作为2024年第一场电影全行业会议&#xff0c;该会议受到行业内外广泛关注和响应&#xff0c;被视为新一年度电影市场“晴雨表”和“风向标”。会议以“聚合电影行业内…

利用Python的Pyttsx3库实现离线文字转语音(TTS)功能

项目中需要一个语言模块&#xff0c;之前用微软的TTS其实挺好用的&#xff0c;但是不开源&#xff0c;离线也不好整&#xff0c;打算找个轻量化的&#xff0c;然后发现&#xff0c;Python里Pyttsx3库已经能完美实现我的需求了 Pyttsx3 Pyttsx3是一个Python库&#xff0c;用于…

【面试题】细说mysql中的各种锁

前言 作为一名IT从业人员&#xff0c;无论你是开发&#xff0c;测试还是运维&#xff0c;在面试的过程中&#xff0c;我们经常会被数据库&#xff0c;数据库中最经常被问到就是MySql。当面试官问MySql的时候经常会问道一个问题&#xff0c;”MySQL中有哪些锁&#xff1f;“当我…

简述Kafka的高可靠性

什么叫可靠性&#xff1f; 大家都知道&#xff0c;系统架构有三高&#xff1a;「高性能、高并发和高可用」&#xff0c;三者的重要性不言而喻。 对于任意系统&#xff0c;想要同时满足三高都是一件非常困难的事情&#xff0c;大型业务系统或者传统中间件都会搭建复杂的架构来…

day05-java面向对象(上)

5.1 面向对象编程 5.1.1 类和对象 1、什么是类 类是一类具有相同特性的事物的抽象描述&#xff0c;是一组相关属性和行为的集合。 属性&#xff1a;就是该事物的状态信息。 行为&#xff1a;就是在你这个程序中&#xff0c;该状态信息要做什么操作&#xff0c;或者基于事物…

如何在公网环境远程管理内网Windows系统部署的MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

品牌百度百科词条创建多少钱?

百度百科作为国内最具权威和影响力的知识型平台&#xff0c;吸引了无数品牌和企业争相入驻。一个品牌的百度百科词条&#xff0c;不仅是对品牌形象的一种提升&#xff0c;更是增加品牌曝光度、提高品牌知名度的重要途径。品牌百度百科词条创建多少钱&#xff0c;这成为了许多企…

ubuntu 20.04 设置国内镜像源(阿里源、清华源)

在网上搜了好多设置国内镜像源&#xff0c;都写的乱七八糟的&#xff0c;都是随便换&#xff0c;最后还是换得一堆问题。 镜像源也是跟版本一一对应的&#xff0c;不能随便一个国内源就还过去用&#xff0c;否则会出现各种各样的问题&#xff0c;我也是吃过亏之后才发现的。 国…

单例19c RMAN数据迁移方案

一、环境说明 源库 目标库 IP 192.168.37.200 192.168.37.202 系统版本 RedHat 7.9 RedHat 7.9 数据库版本 19.3.0.0.0 19.3.0.0.0 SID beg beg hostname beg rman 数据量 1353M 说明:源库已经创建数据库实例&#xff0c;并且存在用户kk和他创建的表空间…