好家伙,写题,题目代码在最后

来吧,

1.栈

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。

这一端被称为栈顶,相对地,把另一端称为栈底。

向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;

从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。                                                                                                                                                                                                                                                                                 ——百度百科  

上图

 总之,我们记住这玩意"先进后出"就行了

举个栗子,(假设水倒入杯子后不会流动)

就像你烧了一壶水,拿个杯子倒水,然后喝了一口

你喝的第一口水是你最后倒进去的

而你最先倒进去的水在最下面

最后倒进去的水最先喝到

最先倒进去的最后喝到

这就是先进后出了

(是不是拿固体举例子会比较好...)

方法以及标识:

//头文件
#include <stack> //实例化字符类型的栈
stack <char> sta;

常用方法:

1.1.sta.top()方法

函数用于访问栈顶元素

1.2.sta.pop()

函数用于移除栈顶元素

1.3.sta.size()

函数返回堆栈元素的数量。堆栈元素的数量是指堆栈的大小。

堆栈元素的大小是非常重要的信息,因为基于它我们可以推断出许多其他内容,例如所需的空间等。

1.4.sta.push(new_obj)

函数用于在栈顶添加新元素

1.5.sta.empty()

函数用于测试容器是否为空

2.题目如下:

输入一串字符串,该字符串只能由各种不同的括号组成,设计算法,测试该字符串中的括号是否匹配。

如:“({[]})”该字符串中括号是匹配的,字符串“[{{}(”是不匹配的,要求采用栈的思想来完成该题目

2.1.分析一波题目:

我们用栈去解决这个题目(不然为什么会有上面的内容)

这种对称的题目用栈来做就是很舒服

利用栈的先进后出的特点,我们可以进行左右括号的匹配,“(){}”,在右括号“)}”左边最近的左括号必须是相对应的“({”,否则就不合法

先把左半边的括号全部入栈,然后按入栈的反顺序依次去查对应右括号,(如先入"{("那么就先查")}")

若果出现不匹配,则返回false,

每次匹配一对正确的括号,就要将其出栈,为后面的括号腾出空间。

上代码:

#include <iostream>
#include <stack> using namespace std; bool isValid(string s) {
stack <char> sta;
char c,b;
int l=s.length();
for(int i=0;i<l;i++)
{
//将所有的左半边括号入栈
if(s[i]=='(' || s[i]=='[' || s[i]=='{')
{
sta.push(s[i]);
}
//对后面的元素逐一检查
//三种情况
//1.栈空了,返回false
//2.成功匹配,将成功匹配的字符出栈
//3.其他情况,返回false
else if(s[i]==')')
{
if(sta.empty())
return false;
else if(c=sta.top(),c=='(')
sta.pop();
else
return false;
}
else if(s[i]==']')
{
if(sta.empty())
return false;
else if(c=sta.top(),c=='[')
sta.pop();
else
return false;
}
else if(s[i]=='}')
{
if(sta.empty())
return false;
else if(c=sta.top(),c=='{')
sta.pop();
else
return false;
}
}
if(sta.empty())
return true;
else
return false;
} int main()
{
string s;
cin>>s;
//输入字符
bool b=true; b=isValid(s);
if(b==true)
cout << "true";
else cout << "false";
return 0;
}

输入样例:

输入: ({}(000))

输出: true

数据结构(二):括号匹配(C++,栈)的更多相关文章

  1. YTU 3003: 括号匹配(栈和队列)

    3003: 括号匹配(栈和队列) 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...

  2. OJP1147括号匹配加强版(栈)与P1153乱头发节(单调栈)

    惨兮兮的被刷掉2%的通过率后在经过思考和dalao的指点后终于A掉了这道题 强烈建议修改这题的样例,实在太迷惑人,各种错误算法都能过 比如说这是一份错误代码,看懂了也不要学思路,和正解不知道差到哪里去 ...

  3. 数据结构2_java---栈,括号匹配

    package Main; import java.util.Scanner; import javax.swing.text.html.HTMLDocument.HTMLReader.Isindex ...

  4. C++学习之:括号匹配与栈的使用

    #include <stack> using std::stack ; 变量定义: stack<T>  stackName ; 成员函数: 成员函数 功能 bool  empt ...

  5. 洛谷 - P1739 - 表达式括号匹配 - 模拟 - 栈

    https://www.luogu.org/problemnew/show/P1739 虽然应该是用栈的……但是直接模拟就可以了. #include<bits/stdc++.h> usin ...

  6. java:数据结构(二)栈的应用(括号匹配)

    一.什么是括号匹配: 括号匹配就是利用计算机辨别表达式里面的括号是否书写成功 例如: {()((a)) }这就是一个正确 (()()   这就是一个错误的 二.括号匹配的算法: 众所周知,括号分为花括 ...

  7. SDUT-2134_数据结构实验之栈与队列四:括号匹配

    数据结构实验之栈与队列四:括号匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给你一串字符,不超过50个字符,可能 ...

  8. php栈数据结构和括号匹配算法

    栈,体现的是后进先出,即LIFO.队列,体现的是先进先出,即FIFO. 栈 array_pop() //尾出 array_push() //尾进 或 array_shift()//头进 array_u ...

  9. STL-stack和顺序栈实现括号匹配

    2018-11-11-14:28:31 1.顺序栈 下面是我用数组实现的顺序栈,包含的函数有出入栈,查看栈顶元素,栈的大小,栈是否空等函数,当栈空间不够用时,对应的数组会自动增长. /******** ...

  10. Python面试题:使用栈处理括号匹配问题

    括号匹配是栈应用的一个经典问题, 题目 判断一个文本中的括号是否闭合, 如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括 ...

随机推荐

  1. 【Android 逆向】动态调试AliCrackme_1

    1 试玩 apk # 安装APK到真机 adb install AliCrackme_1.apk 打开apk,投石问路,输入123试一下 2 将apk 拖入androidKiller,得到反编译的sm ...

  2. Github-CLI

    Github-CLI Github 的官方命令行工具 Github CLI.Mac 系统可以通过 homebrew 安装或者直接下载免安装包来使用. 命令 Github CLI 的所有命令均以gh开头 ...

  3. mysqld_exporter参数信息

    [root@database03 mysqld_exporter]# ./mysqld_exporter --help usage: mysqld_exporter [<flags>] F ...

  4. Kibana插件

    附加的功能在 Kibana 中是以插件的形式提供的.您可以利用 bin/kibana-plugin 命令来管理这些模块.您也可以手动安装这些插件,只需要将这些插件包放到 plugins 目录并解压到新 ...

  5. td-agent的v2,v3,v4版本区别

    官方地址:https://docs.fluentd.org/quickstart/td-agent-v2-vs-v3-vs-v4

  6. Vue实现拖拽穿梭框功能四种方式

    一.使用原生js实现拖拽 点击打开视频讲解更加详细 <html lang="en"> <head> <meta charset="UTF-8 ...

  7. Java8新特性之Stream流(含具体案例)

    一.概述   Stream 流是 Java 8 新提供给开发者的一组操作集合的 API,将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选.排序.聚合等.元素 ...

  8. (数据科学学习手札144)使用管道操作符高效书写Python代码

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,一些比较熟悉pandas的读者 ...

  9. git clone开启云上AI开发

    摘要:相比于传统的软件开发,AI开发存在以下4个痛点:算法繁多:训练时间长:算力需求大:模型需手动管理,我们可以使用云上AI开发的方式来缓解以上4个痛点. 本文分享自华为云社区<git clon ...

  10. 2022最新版JDK1.8的安装教程、包含jdk1.8的提取码(亲测可用)

    文章目录 1.jdk的安装 1.1.下载(百度网盘jdk1.8提取码永久有效) 1.2.双击提取出来的exe,运行程序.如下图 1.3.进入安装向导 1.4.选择默认(安装所有的组件).同时更改安装路 ...