【STL】栈

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

括弧匹配检验

代码:

#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.mzph.cn/news/795580.shtml

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

相关文章

手机扫码获取文件怎么做?文件活码在电脑上的制作方法

现在很多人会把文件生成二维码之后&#xff0c;将二维码图片打印或者分享给其他人&#xff0c;通过扫描二维码的方式快速在手机上查看或者下载文件内容&#xff0c;从而提升文件传输的速度和效率。 制作文件活码二维码可以长期有效的扫码显示文件&#xff0c;支持多个文件存入…

如果在 Ubuntu 系统中两个设备出现两个相同的端口号解决方案

问题描述&#xff1a; 自己的移动机器人在为激光雷达和IMU配置动态指定的端口时&#xff0c;发现激光雷达和深度相机配置的 idVendor 和 idProduct 相同&#xff0c;但是两个设备都具有不同的ttyUSB号&#xff0c;如下图所示 idVendor&#xff1a;代表着设备的生产商ID,由USB设…

Linux第5课 Linux目录介绍

文章目录 Linux第5课 Linux目录介绍一、打开系统目录二、查看系统目录 Linux第5课 Linux目录介绍 系统目录就是指操作系统的主要文件存放的目录&#xff0c;目录中的文件直接影响到系统是否正常工作&#xff0c;了解这些目录的功能&#xff0c;对使用系统会有很大的帮助。 一…

c# wpf XmlDataProvider 简单试验

1.概要 2.代码 <Window x:Class"WpfApp2.Window12"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend…

NIO基础知识

在学习Netty之前先要学习一下NIO相关的知识&#xff0c;因为Netty是基于NIO搭建的一套网络编程框架。 一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从…

Oracle 中 where 和 on 的区别

1.Oracle 中 where 和 on 的区别 on&#xff1a;会先根据on后面的条件进行筛选&#xff0c;条件为真时返回该行&#xff0c;由于on的优先级高于left join&#xff0c;所以left join关键字会把左表中没有匹配的所有行也都返回&#xff0c;然后生成临时表返回,执行优先级高于…

计算机接口(部分实验)

;实验三&#xff1a; ;*******************************; ;* 8255方式0的C口输入,A口输出 *; ;*******************************; io8255a equ 288h io8255c equ 28ah io8255 equ 28bhcode segmentassume cs:code start: mov dx, 28bH ;设8255为…

FPGA高端项目:解码索尼IMX327 MIPI相机+2路视频融合叠加,提供开发板+工程源码+技术支持

目录 1、前言2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理HLS多路视频融合叠加图像缓存HDMI输出工程…

【51单片机入门记录】RTC(实时时钟)-DS1302应用

目录 一、DS1302相关写函数 &#xff08;1&#xff09;Write&#xff3f;Ds1302 &#xff08;2&#xff09;Write&#xff3f;Ds1302&#xff3f;Byte 二、DS130相关数据操作流程及相关代码 &#xff08;1&#xff09;DS1302初始化数据操作流程及相关代码 (shijian[i]/10&…

20240406在Ubuntu20.04下让移远的4G模块EC200A-CN通过USB底板直接上网

20240406在Ubuntu20.04下让移远的4G模块EC200A-CN通过USB底板直接上网 2024/4/6 15:42 缘起&#xff1a;最近在调试全志H3平台在linux&#xff08;Ubuntu Core/openWRT&#xff09;下适配EC200A-CN。 以前调试移远的EC20的时候是先在Ubuntu下确认模块时好的&#xff0c;然后再开…

最新在线工具箱网站系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API&#xff0c;同时还自带免费API接口&#xff0c; 是一个多功能性工具程序&#xff0c;支持后台管理、上…

蓝凌OA单点登录实现方案:以统一身份管理提升效率与安全新举措

蓝凌OA的优势与挑战 在数字化浪潮的推动下&#xff0c;企业对于高效、安全的身份管理需求愈发迫切。蓝凌OA系统&#xff0c;以其出色的流程管理和协同办公能力&#xff0c;已经成为众多企业实现数字化转型的重要工具。然而&#xff0c;随着企业信息化建设的不断深入&#xff0…

配置vscode链接linux

1.安装 remote SSH 2.按F1 ssh ljh服务器公网ip 3. 选择保存远端host到本地 某位置 等待片刻后 4. 切换到远程资源管理器中 应该可以看到一台电脑&#xff0c;右键在当前窗口链接&#xff0c;输入你的服务器用户密码后电脑变绿说明远程连接成功 5.一定要登陆上云服务器后再…

错误:找不到或无法加载主类(vscode的解决方法)

项目场景&#xff1a; 某天&#xff0c;喵某人在敲代码的过程中&#xff0c;点击运行代码&#xff0c;突然显示找不到或无法加载主类。之前创建的java文件都可以正常运行。但新建的java文件无论是什么&#xff0c;点击运行都会显示“错误&#xff1a;找不到或无法加载主类”。 …

深入剖析:HTML页面从用户请求到完整呈现的多阶段加载与渲染全流程详解

HTML页面的加载全过程是一个涉及网络通信、文件解析、资源加载、渲染树构建、布局计算以及最终绘制等多个环节的复杂过程。以下是详细的步骤说明&#xff1a; 1. 用户输入URL并发送请求 用户在浏览器地址栏输入一个URL&#xff08;统一资源定位符&#xff09;&#xff0c;或者…

【内存泄漏】数据库连接connectionPhantomRefs内存过大

1. 问题背景 线上出现内存报警&#xff0c;内存增长曲线如下 dump内存文件&#xff0c;临时重新发布服务。后经排查发现是数据库连接池设置不合理以及mysql-connector-java 5.1.49有内存泄漏bug。以下为对此问题的分析及问题总结。 1.1 应用背景 数据库连接池&#xff1a; …

[StartingPoint][Tier1]Ignition

Task 1 Which service version is found to be running on port 80? (发现哪个服务版本在端口 80 上运行&#xff1f;) $ nmap -sV -Pn 10.129.1.27 -p 80 nginx 1.14.2 Task 2 What is the 3-digit HTTP status code returned when you visit http://{machine IP}/? (访…

Centos7下docker安装jenkins

个人记录 安装Docker与Docker-compose Centos7安装Docker与Docker-compose【图文教程】 配置docker-compose.yml vim docker-compose.yml按i进行编辑模式&#xff0c;粘贴如下内容 version: 3 services:jenkins:image: jenkinsci/blueoceancontainer_name: jenkinsrestart…

剑指Offer题目笔记26(动态规划的基础知识)

面试题88&#xff1a; 问题&#xff1a; ​ 一个数组cost的所有数字都是正数&#xff0c;它的第i个数字表示在一个楼梯的第i级台阶往上爬的成本&#xff0c;在支付了成本cost[i]之后可以从第i级台阶往上爬1级或2级。请计算爬上该楼梯的最少成本。 解决方案一&#xff1a;&…

Java | Leetcode Java题解之第9题回文数

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isPalindrome(int x) {// 特殊情况&#xff1a;// 如上所述&#xff0c;当 x < 0 时&#xff0c;x 不是回文数。// 同样地&#xff0c;如果数字的最后一位是 0&#xff0c;为了使该数字为回文&#xff0…