理解
出入栈规律之一,如果前面有一个比较大的数,后面有连续的递增顺序,递增顺序>=2个小于前面比较大的数,那么此出栈顺序不可能实现。比如4,1,2,3,5。

思路:输入一个数,然后不断按照顺序模拟入栈,从a->stack数组,过程中发现与输入数相等的,则出栈,while循环中的p,是当栈顶元素不相等,并且都已经入栈完毕时,发挥跳出while不再入栈的作用,如果去掉就会不断入栈,无法出现no的情况。

视频讲解:https://www.bilibili.com/video/BV1rC4y1H7c3?from=search&seid=13655648136491386031

Description
给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次。输入一个入栈序列,后面依次输入多个序列,请判断这些序列是否为所给入栈序列合法的出栈序列。

例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个出栈序列,但4,3,5,1,2就不可能是该序列的出栈序列。假设压入栈的所有数字均不相等。

Input
第一行输入整数n(1<=n<=10000),表示序列的长度。

第二行输入n个整数,表示栈的压入顺序。

第三行输入整数t(1<=t<=10)。

后面依次输入t行,每行n个整数,表示要判断的每一个出栈序列。

Output
对应每个测试案例输出一行,如果由初始入栈序列可以得到该出栈序列,则输出yes,否则输出no。

Sample

Input
5
1 2 3 4 5
2
4 5 3 2 1
4 3 5 1 2
Output
yes
no
#include<bits/stdc++.h>
using namespace std;
int main()
{int a[10010],stack[10010];int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);//存放入栈顺序}int t;scanf("%d",&t);while(t--){int top=-1,p=0;for(int i=0;i<n;i++){int k;scanf("%d",&k);while(stack[top]!=k||top==-1)//栈顶元素不等于输入的测试数据或者是第一个输入的数据就进入while循环{if(p>=n)//如果p超过了n的值,说明该入栈的都入栈了,那么就不用进行下一步操作了,直接break跳出循环{break;}stack[++top]=a[p++];//模拟从a到stack的入栈过程}if(stack[top]==k)//如果发现有和输入相等的,那么此时进行出栈操作{top--;}}if(top==-1)//栈顶元素为空则是合法出栈序列反之则不是{printf("yes\n");}else{printf("no\n");}}return 0;
}

详解+G - 数据结构实验之栈与队列七:出栈序列判定相关推荐

  1. 栈与队列-之出栈和入栈

    ·栈的概念: -运算只在表的一端进行,一般线性表而言,插入删除都可以在任意一个位置进行的 ·队列:入栈和出栈只能分别在两端中的一边,就是说它在一端入队列,在另外一端当中去出队列.从某种意义上讲栈和队列 ...

  2. 直接插入排序、冒泡排序实验详解【数据结构实验报告】

    文章目录 一.直接插入排序 二.冒泡排序 一.直接插入排序 1.算法思想 直接插入排序(straight insertion sort),有时也简称为插入排序,是减治法的一种典型应用.其基本思想如下: ...

  3. sdut 3335 数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri ...

  4. Batch Normalization详解(原理+实验分析)

    Batch Normalization详解(原理+实验分析) 1. 计算过程 2. 前向传播过程 3. 反向传播过程 4. 实验分析 4.1 实验一:验证有没有BatchNorm下准确率的区别 4.2 ...

  5. 【数据结构】栈和队列OJ练习(栈和队列相互实现+循环队列实现)

    目录 前言 1.用队列实现栈 2.用栈实现队列 3.循环队列 前言 前面在学习了栈和队列的实现之后,相信大家对栈和队列的结构和使用方式都有了一些理解. 下面我们就来进行一些练习,这这章的练习相对于原来 ...

  6. 栈和队列:1.栈(Stack)

    栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. 图1 栈结构示意图 由于栈只有一边开口存取数据,称开口的那一端为" ...

  7. C语言实现栈的进栈与出栈、输出栈顶元素、元素个数、销毁栈

    /********************************引入头文件**************************************************/ #include&l ...

  8. 面试题 03.04. 化栈为队/面试题09. 用两个栈实现队列/232. 用栈实现队列

    2020-05-08 1.题目描述 用两个栈实现一个队列 2.题解 将一个栈用来进行入操作,另一个进行出操作,入栈直接入,出栈的时候如果是空的则把另一个 栈中的所有元素移动过来,再进行出栈,否则直接出 ...

  9. 已知入栈顺序求所有的出栈顺序已知出栈顺序求所有的入栈顺序

    一.已知入栈顺序求所有的出栈顺序 已知入栈顺序是{1,2,3,4,5},求所有的出栈顺序? 我的思路: 既然入栈顺序固定,我觉得可以使用递归来做. 先定义一个函数,比如说叫做help. //伪代码 v ...

最新文章

  1. nginx代理响应报文体不全解决思路
  2. Windows server 2012 AD架构 试验 系列22 -ADAC与PowerShell History
  3. go 基准测试 找不到函数_Go 中的内联优化 | Linux 中国
  4. spring security自定义指南
  5. 01.elasticsearch-security_es鉴权机制
  6. go java gc_图解Golang的GC垃圾回收算法
  7. SpringBoot原理-SpringBoot核心运行原理
  8. js入门笔记整理(二)——操作符
  9. [转]sqlserver 创建分区表
  10. 为金蝶K3页面增加批量导入选项(其它出库、其它入库、调拨单、生产领料、外购入库、成本调整)
  11. VSTO安装卸载方法
  12. python 英语词典下载_Python 字典(Dictionary)
  13. 零极点分布对系统频率响应的影响
  14. 为什么会出现双摄像头手机?
  15. 2022年电工(初级)考试报名及电工(初级)试题及解析
  16. MySQL8.0安装与基于二进制日志文件位置的主从复制
  17. 【Java】 Java 实现 2048 小游戏
  18. AutoCAD .NET API (.NET) 概述
  19. OpenCV通过HSV颜色空间过滤图片及目标检测颜色空间范围确定
  20. ML之SSL:Semi-Supervised Learning半监督学习的简介、应用、经典案例之详细攻略

热门文章

  1. iphone换机数据迁移_iPhone 与安卓手机备份与资料迁移的方法
  2. java regex match 替换_java正则表达式四种常用的处理方式(匹配、分割、替代、获取)...
  3. MySQL工作中的实际用_总结工作中经常用到的mysql基础知识
  4. UI组件-UIPickerView
  5. [转] C# 绘制报表,使用Graphics.DrawString 方法
  6. zabbix使用IT services 了解服务器SLA整体情况
  7. [翻译]AKKA笔记 - DEATHWATCH -7
  8. 深挖android low memory killer
  9. WordPress企业主题:BDV适合于小型公司、企业,主要以产品类为主
  10. NS2中数据包Packet的分析 (转帖)