题目1366:栈的压入、弹出序列
2014-07-18 11:15
288 查看
题目描述:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
输入:
每个测试案例包括3行:
第一行为1个整数n(1<=n<=100000),表示序列的长度。
第二行包含n个整数,表示栈的压入顺序。
第三行包含n个整数,表示栈的弹出顺序。
输出:
对应每个测试案例,如果第二个序列是第一个序列的弹出序列输出Yes,否则输出No。
代码:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
输入:
每个测试案例包括3行:
第一行为1个整数n(1<=n<=100000),表示序列的长度。
第二行包含n个整数,表示栈的压入顺序。
第三行包含n个整数,表示栈的弹出顺序。
输出:
对应每个测试案例,如果第二个序列是第一个序列的弹出序列输出Yes,否则输出No。
代码:
#include<stdio.h> #include<stdlib.h> #define Max 100001 int a[Max],b[Max],stack[Max]; int main() { int n; while(scanf("%d",&n) != EOF) { int top = -1,flag; for(int i = 0; i < n; i++) scanf("%d",&a[i]); for(int j = 0; j < n; j++) scanf("%d",&b[j]); int j = 0; for(int i = 0; i < n; i++) { int tmp = b[i]; flag = 0; if(top != -1 && stack[top] == tmp) { flag = 1; top--; continue; } for(int k = j; k < n; k++) { if(a[k] != tmp) { top++; stack[top] = a[k]; } else { flag = 1; j = k + 1; break; } } if(flag == 0) break; } if(flag == 1) printf("Yes\n"); else printf("No\n"); } }
相关文章推荐
- 九度_题目1366:栈的压入、弹出序列
- 题目1366:栈的压入、弹出序列-九度
- 九度 OJ 题目1366:栈的压入、弹出序列
- 九度 题目1366:栈的压入、弹出序列
- 题目1366:栈的压入、弹出序列
- 九度OJ-题目1366:栈的压入、弹出序列
- 【剑指Offer面试编程题】题目1366:栈的压入、弹出序列--九度OJ
- 题目1366:栈的压入、弹出序列
- 【剑指Offer面试编程题】题目1366:栈的压入、弹出序列--九度OJ
- 题目1366:栈的压入、弹出序列
- 题目22:栈的压入、弹出序列
- 剑指offer(13)-栈的压入、弹出序列 九度1366
- 算法题目---栈的压入、弹出序列
- 1366:栈的压入、弹出序列 @jobdu
- 剑指Offer - 九度1366 - 栈的压入、弹出序列
- 九度oj-1366-栈的压入、弹出序列
- 九度OJ 1366 栈的压入、弹出序列 【数据结构】
- 九度OJ 1366 栈的压入、弹出序列 【数据结构】
- 剑指offer题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
- 剑指offer20--栈的压入,弹出序列