【STL】栈

news2025/1/17 1:46:45

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

括弧匹配检验

代码:

#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/1572409.html

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

相关文章

【数据结构与算法】:直接插入排序和希尔排序

1. 排序的概念及其意义 1.1 排序的概念 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 1.2 排序的稳定性 假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若…

电商系列之风控安全

> 插&#xff1a;AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

243.回文链表

给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;head …

初始Java篇(JavaSE基础语法)(6)(继承和多态)(上)

Java学习篇 个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 继承篇 为什么需要继承&#xff1f; 继承概念 继承的语法 父类成员访问 super关键字 子类构造方法 super和this的比较 再谈…

CLoVe:在对比视觉语言模型中编码组合语言

CLoVe:在对比视觉语言模型中编码组合语言 摘要引言相关工作CLoVe: A Framework to Increase Compositionality in Contrastive VLMsSynthetic CaptionsHard NegativesModel Patching CLoVe: Encoding Compositional Language inContrastive Vision-Language Models 摘要 近年来…

Spark 部署与应用程序交互简单使用说明

文章目录 前言步骤一&#xff1a;下载安装包Spark的目录和文件 步骤二&#xff1a;使用Scala或PySpark Shell本地 shell 运行 步骤3:理解Spark应用中的概念Spark Application and SparkSessionSpark JobsSpark StagesSpark Tasks 转换、立即执行操作和延迟求值窄变换和宽变换 S…

【.Net】Polly

文章目录 概述服务熔断、服务降级、服务限流、流量削峰、错峰、服务雪崩Polly的基本使用超时策略悲观策略乐观策略 重试策略请求异常响应异常 降级策略熔断策略与策略包裹&#xff08;多种策略组合&#xff09; 参考 概述 Polly是一个被.NET基金会支持认可的框架&#xff0c;同…

使用Flutter创建带有图标提示的TextField

在移动应用开发中&#xff0c;TextField是一种常用的用户输入小部件。然而&#xff0c;有时向用户提供有关他们应该输入什么的提示或说明是很有帮助的。在本教程中&#xff0c;我们将创建一个Flutter应用程序&#xff0c;演示如何在TextField旁边包含一个图标提示。 编写代码 …

C语言计算任意位数的水仙花数

一、水仙花数定义&#xff1a; 水仙花数&#xff08;Narcissistic number&#xff09;是指一个 n&#xff08;n≥3&#xff09; 位数&#xff0c;它的每个数位上的数字的 n 次幂之和等于它本身。例如 3 位数的 153&#xff1a;1 5 3 153 二、C语言计算任意位数的水仙花数代…

第十三届蓝桥杯C++A组 - B/D/E

文章目录 前言一、灭鼠先锋1.题目描述2.算法 二、选数异或1.题目描述2.算法 三、爬树的甲壳虫1.问题描述2.算法 前言 题目考点灭鼠先锋bfs博弈论MEX运算SG函数选数异或二分线段树爬树的甲壳虫快速幂逆元扩展欧几里得裴蜀定理dp 一、灭鼠先锋 1.题目描述 2.算法 我们先要确定…

顺序表的应用

文章目录 目录1. 基于动态顺序表实现通讯录项目2.顺序表经典算法2.1 [移除元素](https://leetcode.cn/problems/remove-element/description/)2.2 [合并两个有序数组](https://leetcode.cn/problems/merge-sorted-array/description/) 3. 顺序表的问题及思考 目录 基于动态顺序…

华为CCE部署RabbitMQ中间件操作文档

1、创建有状态&#xff08;StatefulSet&#xff09;部署 中间件一般为有状态部署&#xff0c;有状态部署与无状态部署区别参考文档&#xff1a;K8S有无状态部署-CSDN博客 1.1、基本信息 注意&#xff1a; 应用名称命名规则&#xff1a;&#xff08;命名规则最好统一&#xff…

深入理解计算机系统 家庭作业 2.85

A 7111.01.11*V E2,M1.11,f0.11 位表示: exp:10000...001其中0有k-2个.frac:1100...000其中0有n-2个 B 有个默认条件就是E>n, En,M1.111...(小数部分n个1),f0.1111(n个1),V exp:111...11其中1有n-1个.frac:111...111其中1有n个 C有个默认条件就是没有符号位.最小的规格…

轻量的 WebHook 工具:歪脖虎克

本篇文章聊聊轻量的网络钩子&#xff08;WebHook&#xff09;工具&#xff1a;歪脖虎克。 写在前面 这是一篇迟到很久的文章&#xff0c;在 21 年和 22 年的时候&#xff0c;我分享过两篇关于轻量的计划任务工具 Cronicle 的文章&#xff1a;《轻量的定时任务工具 Cronicle&a…

EFK(elasticsearch+filebeat+kibana)日志分析平台搭建

本文是记录一下EFK日志平台的搭建过程 项目背景&#xff1a; 此次搭建的日志分析平台主要是采集服务器上的java服务的log日志(输出的日志已经是json格式)&#xff0c;这些日志都已经按照不同环境输出到/home/dev /home/test1 /home/test2 目录下了&#xff0c;按照不同的应…

具身智能机器人实现新里程碑!新型3D世界模型问世

随着人工智能技术的不断进步&#xff0c;视觉-语言-动作&#xff08;VLA&#xff09;模型在机器人控制、自动驾驶、智能助手等领域展现出了广阔的应用前景。这类模型能够将视觉、语言、动作等多模态信息进行融合&#xff0c;实现从感知到决策的端到端学习。然而&#xff0c;现有…

商业开源MES+源码+可拖拽式数据大屏

商业开源的一套超有价值的JAVA制造执行MES系统源码 带本地部署搭建教程 教你如何在本地运行运行起来。 开发环境&#xff1a;jdk11tomcatmysql8springbootmaven 需要源码&#xff0c;私信我付费获取。 一、系统概述&#xff1a; 万界星空科技免费试用MES、开源MES、商业开…

SAR教程系列7——在cadence中用Spectrum工具FFT仿真ADC的ENOB、SNR等动态性能指标

首先在仿真之前&#xff0c;你得有一个ADC。然后是思考如何仿真的问题&#xff0c;如何加激励&#xff0c;如何使用相关工具查看仿真结果。假定你有一个可以仿真的ADC&#xff0c;大致经过下列步骤可以得到ADC的相关动态性能指标。 第一步&#xff1a;在ADC后面接一个理想的DA…

docker命令:查看镜像、查看正在运行的容器、终止某个正在运行的容器

2024年4月6日&#xff0c;周五下午 查看docker镜像&#xff08;image&#xff09;有哪些 docker image ls 查看正在运行的容器&#xff08;container&#xff09;有哪些 docker ps 终止正在运行的container docker stop 容器ID 用docker ps可以查到正在运行的容器的ID

如何从数码相机恢复已删除的照片?

“嗨&#xff0c;我删除了索尼数码相机中的所有照片。有什么办法可以让他们回来吗&#xff1f;” ——刘凯 我们经常从数码相机中删除照片。但是&#xff0c;如果我们误删除了一些重要的照片&#xff0c;则很难将其恢复&#xff0c;因为删除的照片可能会绕过回收站或垃圾箱&am…