20165314 2016-2017-2 《Java程序设计》第5周学习总结
教材学习内容总结
- 内部类和异常类的理解
- 异常类的使用
- 通过文件读写数据,各种数据流的区别
- 序列化与对象克隆
Posted gsq1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五周--验证栈序列相关的知识,希望对你有一定的参考价值。
给出两个序列 pushed 和 poped 两个序列,其取值从 1 到 n(n≤100000)。已知入栈序列是 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是否为入栈序列可能的一个出栈序列
#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;
以上是关于第五周--验证栈序列的主要内容,如果未能解决你的问题,请参考以下文章