29 栈的 push、pop 序列
2014-09-19 16:31
375 查看
/* 29.栈的 push、pop 序列 题目:输入两个整数序列。其中一个序列表示栈的 push 顺序, 61 判断另一个序列有没有可能是对应的 pop 顺序。 为了简单起见,我们假设 push 序列的任意两个整数都是不相等的。 比如输入的 push 序列是 1、2、3、4、5,那么 4、5、3、2、1 就有可能是一个 pop 系列。 因为可以有如下的 push 和 pop 序列: push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop, 这样得到的 pop 序列就是 4、5、3、2、1。 但序列 4、3、5、1、2 就不可能是 push 序列 1、2、3、4、5 的 pop 序列。 相同就出栈 ,否则进栈 */ #include<iostream> #include<stack> #include<stdio.h> using namespace std; int isPop(int push[],int pop[],int n) { stack<int> ss; int i1=0,i2=0; while(i2<n) { if(ss.empty()||ss.top()!=pop[i2]) { if(i1<n) { printf("Push:%d\n",push[i1]); ss.push(push[i1++]); } else return 0; } while(!ss.empty()&&ss.top()==pop[i2]) { printf("POP:%d\n",ss.top()); ss.pop(); i2++; } } return 1; } int main() { int push1[5]={1,2,3,4,5}; int pop1[5]={4,5,3,2,1}; int pop2[5]={1,2,4,3,5}; int pop3[5]={1,4,5,2,3}; if(isPop(push1,pop1,5)==1) printf("YES\n"); else printf("No\n"); if(isPop(push1,pop2,5)==1) printf("YES\n"); else printf("No\n"); if(isPop(push1,pop3,5)==1) printf("YES\n"); else printf("No\n"); return 0; }
相关文章推荐
- 29.栈的push、pop 序列
- 29.栈的push、pop序列
- 栈的push、pop序列(29)
- 29.栈的push、pop 序列
- 29、栈的push、pop序列
- Q29、栈的 push、pop 序列(栈)
- 微软面试100题之29题:栈的push、pop 序列
- 29.栈的push、pop 序列
- 算法习题29:栈的push、pop序列是否一致
- 29.栈的push、pop序列(栈)
- 29. 栈的push,pop序列
- 程序员面试题精选100题(24)-栈的push、pop序列[数据结构]
- 题目:输入两个整数序列。其中一表示栈的 push 顺序,判断另一个序列有没可能是对应的 pop 顺序
- 微软面试100题 之24栈的push、pop序列
- 24.栈的push和pop序列[StackPushPopSequence]
- 两个整数序列,其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 栈的push、pop序列-实现
- 【算法】输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 程序员面试题100题第24题——判断是否是push、pop序列
- 微软面试100题-栈的push-pop序列问题