第五周--验证栈序列

Posted gsq1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五周--验证栈序列相关的知识,希望对你有一定的参考价值。

题目描述

给出两个序列 pushed 和 poped 两个序列,其取值从 1 到 n(n100000)。已知入栈序列是 pushed,如果出栈序列有可能是 poped,则输出 Yes,否则输出 No。为了防止骗分,每个测试点有多组数据。

输入格式

第一行一个整数 q,询问次数。

接下来 q 个询问,对于每个询问:

第一行一个整数 n 表示序列长度;

第二行 n 个整数表示入栈序列;

第三行 n 个整数表示出栈序列;

输出格式

对于每个询问输出答案。

输入输出样例

输入 
2
5
1 2 3 4 5
5 4 3 2 1
4
1 2 3 4
2 4 1 3
输出 
Yes
No

通过简单地阅读题目可知,对于给定的入栈序列,验证序列poped是否为入栈序列可能的一个出栈序列
  1. 入栈(push())
  2. 是否栈空(empty())
  3. 访问栈顶(top())
  4. 出栈(pop())

#include<bits/stdc++.h>
using namespace std;
int main()

stack<int>q;
int n,p,tmp=0;
cin>>p;//输入询问的次数
for(int t=p;t>0;t--)

cin>>n;
int a[n],b[n];
for(int i=0;i<n;i++)
cin>>a[i];//输入push的数组
for(int j=0;j<n;j++)
cin>>b[j];//输入pop的数组
for(int i=0;i<n;i++)

q.push(a[i]);//将push数组存入栈中
while(q.top()==b[tmp])//栈是先进后出,如果相等就删除,不相等就相当于已经不是了

q.pop();//相等就删除
tmp++;//一个个相比较
if(q.empty())
break;


if(q.empty())//如果栈为空就验证成功
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
while(!q.empty())
q.pop();
tmp=0;//清空栈

return 0;




第五周学习总结

20165314 2016-2017-2 《Java程序设计》第5周学习总结

教材学习内容总结

  • 内部类和异常类的理解
  • 异常类的使用
  • 通过文件读写数据,各种数据流的区别
  • 序列化与对象克隆

代码托管

技术分享图片

以上是关于第五周--验证栈序列的主要内容,如果未能解决你的问题,请参考以下文章

20145326蔡馨熠《信息安全系统设计》第五周学习总结

第五周学习--卷积网络识别含义多重性验证

第五周学习总结

第五周

第五周作业

2017-2018-1 20155208 《信息安全系统设计基础》第五周学习总结