SDUT 3334 数据结构实验之栈与队列七:出栈序列判定
2017-11-04 17:04
344 查看
数据结构实验之栈与队列七:出栈序列判定
Time Limit: 30MSMemory Limit: 1000KB
Submit
Statistic
Discuss
Problem 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。Example Input
5 1 2 3 4 5(模板元素) 2 4 5 3 2 1(目标元素) 4 3 5 1 2
Example Output
yes no
Hint
思路:将模板元素依次进栈,直到输入的目标元素依次与栈顶元素相同,停止进栈,栈顶元素出栈。最后如果栈为空,则输出yes,否则输出no。#include<cstdio> #include<cstring> using namespace std; int a[10001],stacks[10001]; int main() { int n,m; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&m); while(m--) { int temp,p=0,q=-1; for(int i=0;i<n;i++) { scanf("%d",&temp); while(q==-1||stacks[q]!=temp)//使a中元素UI次进栈直到temp等于栈顶元素 { if(p>=n) break; stacks[++q]=a[p++]; } if(stacks[q]==temp)//使栈顶元素出栈 q--; } if(q==-1)//栈空则可满足题目要求 printf("yes\n"); else printf("no\n"); } return 0; }
相关文章推荐
- SDUT 3334 数据结构实验之栈与队列七:出栈序列判定
- 3334 数据结构实验之栈与队列七:出栈序列判定
- 3334-数据结构实验之栈与队列七:出栈序列判定
- 数据结构实验之栈与队列七:出栈序列判定
- SDUT 3334 栈与队列:出栈序列判定 栈混洗
- sdut 2134 数据结构实验之栈与队列四:括号匹配
- sdut-3332 数据结构实验之栈与队列五:下一较大值(一)
- sdut 3335 数据结构实验之栈与队列八:栈的基本操作
- [SDUT](3334)数据结构实验之栈七:出栈序列判定 ---栈
- SDUT 2135 数据结构实验之队列一:排队买饭
- sdut 1479 数据结构实验之栈与队列九:行编辑器
- SDUT 3334 数据结构实验之栈七:出栈序列判定
- 栈与队列-出栈序列统计(数据结构基础 第3周)
- sdut 数据结构实验之队列一:排队买饭
- SDUT 2335 - 数据结构实验之队列一:排队买饭
- SDUT 2135 数据结构实验之队列一:排队买饭
- SDUT 出栈序列判定 3334
- SDUT 3333 数据结构实验之栈与队列六:下一较大值(二)
- sdut 3333 数据结构实验之栈与队列六:下一较大值(二)
- sdut 2088 数据结构实验之栈与队列十一:refresh的停车场