首页 > 其他分享 >数据结构01 栈及其相关问题讲解

数据结构01 栈及其相关问题讲解

时间:2024-06-13 20:29:20浏览次数:12  
标签:输出 01 匹配 int 元素 数据结构 讲解 include 表达式

栈是一种线性数据结构,栈的特征是数据的插入和删除只能通过一端来实现,这一端称为“栈顶”,相应的另一端称为“栈底”。

 

栈及其特点

用一个简单的例子来说,栈就像一个放乒乓球的圆筒,底部是封住的,如果你想拿出乒乓球,只能从顶部拿。同样的,如果你想再将乒乓球放回去,也只能从顶部放入其中。当然生活中还有很多这样的例子,再比如食堂中的一叠盘子,我们只能从顶端一个一个的取。放盘子也只能放在最上方。

总结栈的特点为:先入后出(Last In First Out->LIFO),即先入栈的元素要在之后入栈的元素取出来之后才能取出来。

STL模板中栈的基本使用

对于栈的使用,我们可以直接利用STL模板来实现,STL模板库中栈的基本操作如下:

 头文件:#include<堆栈>

创建一个存放int类型数据的空栈s:stack<int> s;

s.empty():  判断栈是否为空,为空返回true,否则返回false;

s.size():  返回栈中元素的个数;

s.top():  获取栈顶元素的值;

s.push(k):   向栈中添加新的元素k;

s.pop():    删除栈s的栈顶元素。

s.push(k):   向栈中添加新的元素k;

s.pop():    删除栈s的栈顶元素。

 

训练:逆波兰表达式

逆波兰表达式,又称后缀表达式,后缀表达式不包含括号,运算符(包括'+''-''*''/')放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。利用栈结构,将后缀表达式的结果计算出。

【输入描述】输入一个逆波兰表达式,字符之间用空格隔开

【输出描述】输出算式结果

【输入样例】2 1 + 3 *

【输出样例】9

 

参考程序

#include<iostream>
#include<stack>
using namespace std;
int main(){
  int t,k;
  char c;
  stack<int> s;
  while(cin>>c){
        if(c>='0'&&c<='9')
            s.push(c-'0');  //是数字就入栈
        if(c=='+'){
            t=s.top(); //获取栈顶数字
            s.pop();   //出栈
            k=s.top(); //获取新的栈顶
            s.pop();     //出栈
            s.push(t+k);   //相加的和入栈
        }
        if(c=='-'){
            t=s.top();   //获取栈顶
            s.pop();     //出栈
            k=s.top();  //获取新的栈顶
            s.pop();     //出栈
            s.push(k-t); //相减结果入栈,注意顺序
        }
        if(c=='*'){
            t=s.top();
            s.pop();
            k=s.top();
            s.pop();
            s.push(t*k);   //相乘的积入栈
        }
        if(c=='/'){
            t=s.top();
            s.pop();
            k=s.top();
            s.pop();
            s.push(k/t); //相除结果入栈注意顺序
        }
    }
    cout<<s.top();
    return 0;
}

训练:括号匹配

给定一个字符串,里边可能包含“()”、“[]”、“{}”三种括号,请编写程序检查该字符串的括号是否匹配出现,匹配说明嵌套关系正确,例如 {[()]}() 是匹配的,而)({)[}]( 则不匹配。匹配则输出YES,否则输出NO。)

【输入描述】输入一个字符串 例如(1+2)/(0.5+1)

【输出描述】如果字符串匹配则输出YES,否则输出NO

【输入样例】(1+2)/[(0.5+1)*2]

【输出样例】YES

参考程序

#include <iostream>
#include <stack>
using namespace std;
int main(){
    stack<char> s;
    string a;
    cin>>a;
    for(int i=0;i<a.size();i++){
        if(a[i]=='('||a[i]=='['||a[i]=='{')  s.push(a[i]); //左括号入栈
        if(a[i]==')'){
            if(s.empty()) //右括号没匹配的就no
            {
                cout<<"NO"<<endl;
                return 0;
            }
            if(s.top()=='(')s.pop(); //右括号有匹配的则出栈
        }
        if(a[i]==']'){
            if(s.empty()) //右括号没匹配的就no
            {
                cout<<"NO"<<endl;
                return 0;
            }
            if(s.top()=='[') s.pop(); //右括号有匹配的则出栈
        }
        if(a[i]=='}'){
            if(s.empty()) //右括号没匹配的就no
            {
                cout<<"NO"<<endl;
                return 0;
            }
            if(s.top()=='{') s.pop(); //右括号有匹配的则出栈
        }
    }
    if(s.empty()) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    return 0;
}

从入门到算法,再到数据结构,查看全部文章请点击此处icon-default.png?t=N7T8http://www.bigbigli.com/

标签:输出,01,匹配,int,元素,数据结构,讲解,include,表达式
From: https://blog.csdn.net/qq_39434533/article/details/139632667

相关文章

  • 基于SpringBoot+Vue+uniapp的餐厅点餐系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的球队训练信息管理系统的详细设计和实现(源码+lw+部署文档
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的高校图书馆个性化服务的详细设计和实现(源码+lw+部署文档
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • [强网杯 2019]Upload php反序列化代码审计
    进入页面发现有登录,随便注册一个用户登录试试。文件上传?传个试试,结果发现不论怎么上传都没用,还发现了cookie像是反序列化的东西。扫目录看看,发现源码。发现主要文件,做做审计吧。index.php<?phpnamespaceapp\web\controller;usethink\Controller;classIndexextend......
  • 数据结构与算法1 简要复习
    1.三种复杂度Ο,读音:big-oh;表示上界,小于等于。Ω,读音:bigomega、欧米伽;表示下界,大于等于。Θ,读音:theta、西塔;既是上界也是下界,称为确界,等于。2.抽象数据类型3.堆,栈(queue,stack)4.哈希线性探测二次探测(重要)二次哈希5.二叉搜索树(BST)#include<iostream>//定义二叉搜索......
  • 7-3 谁考了第k名【数据结构/PTA】
    题目:在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。输入第一行有两个整数,分别是学生的人数n(1≤n≤10000),和求第k名学生的k(1≤k≤n)。其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。输出输出第k名......
  • 2Gb 256Mx8 KTDM2G3C818BGCEAT KTDM2G3C818BGIEAT(SDRAM) KTM4GH1AHI01 KTM8GL1ASI01
    一、DDR3(L)SDRAM概述SMART’sDDR3(L)SDRAM组件与行业广泛兼容,并提供x8和x16配置。这些1.35v(DDR3L)和1.5V(DDR3)器件采用标准78和96引脚网格阵列封装,时钟速度为1866Mbps,密度为1Gb、2Gb和4Gb。宽/汽车工作范围器件也针对汽车AEC-Q1002类应用进行了测试和认证。DDR3(L)SDRAM......
  • 数据结构习题(快期末了)
    一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。数据的存储结构是数据的逻辑结构的存储映像。数据的物理结构是指数据在计算机内实际的存储形式。算法是对解题方法和步骤的描述。若......
  • 011基于SSM+Jsp的社区生活超市管理系统
    开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示系统首页用户注册用户登录商品信息超市资讯管理员登录管理员功能界面供应商管理商品信息管......
  • 010基于SSM+Jsp的人事管理系统
    开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示管理员登录公告信息管理部门管理员工管理工资管理员工培训管理奖惩信息管理员工事务管理摘......