29.栈的push、pop序列(栈)
2012-10-27 19:05
495 查看
题目:输入两个整数序列。其中一个序列表示栈的push顺序,
判断另一个序列有没有可能是对应的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序列。
这里首先是以第一个数为基准,以后出现的序号比第一个数小的要一次减小,比第一个数大的要依次增大,这样就符合出栈顺序。
判断另一个序列有没有可能是对应的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> bool bepop(int* output,int* input,int n); int pos(int* input,int n,int m); //求在出栈中的位置 int main() { int input[9] = {1,2,3,4,5,6,7,8,9}; int output[9] = {4,5,3,6,2,7,8,9,1}; bool bnow = bepop(output,input,9); return 0; } bool bepop(int* output,int* input,int n) { if (input == NULL) return false; int i =0 ; int posmin = -1 ; //比首位置小的点 int posbig = -1 ; //比首位置大的点 int posnow = -1; //首位置的点 posnow = pos(input,n,output[i]); i++; for (;i<n;i++) { int k = 0; k=pos(input,n,output[i]); if (k>posnow) { if (posbig == -1) posbig = k ; else if (posbig>k) return false; else posbig = k; } else { if (posmin == -1) posmin = k; else if (posmin<k) return false ; else posmin = k; } } return true; } int pos(int* input,int n,int m) { for (int i=0;i<n;i++) if (input[i] == m) return i; return -1; }
相关文章推荐
- 29.栈的push、pop序列
- 栈的push、pop序列(29)
- 29 栈的 push、pop 序列
- 29.栈的push、pop 序列
- 29、栈的push、pop序列
- Q29、栈的 push、pop 序列(栈)
- 算法习题29:栈的push、pop序列是否一致
- 微软面试100题之29题:栈的push、pop 序列
- 29.栈的push、pop 序列
- 29. 栈的push,pop序列
- 29.栈的push、pop 序列
- 栈的push、pop 序列测试
- 程序员面试题精选100题(24)-栈的push、pop序列[数据结构]
- 25. 微软面试题:栈的push、pop序列(栈)
- 第29题:推断一个序列是否是还有一个push序列的pop序列
- 栈的push、pop序列
- 每天学习一算法系列(27)(输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序)
- 栈的push、pop序列
- PHP 输入两个整数序列。其中一个序列表示栈的push 顺序, 判断另一个序列有没有可能是对应的pop 顺序
- 栈的push、pop 序列