程序员面试题精选--栈的push、pop序列判定
2011-10-02 17:38
288 查看
题目:输入两个整数序列。其中一个序列表示栈的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序列。
思路: 1、建立一辅助栈;
2、进入循环,若栈为空,压入一元素;
3、依次取pop序列一元素,与栈顶元素比较。若相等,则将栈顶元素弹出;若不相等,将push序列下一元素压栈。
4、在步骤3中需判定:若push序列剩余元素全部压入栈,栈顶元素也不可能与pop序列当前元素相等,此时函数返回,pop序列不合法;若非,回到步骤2.
5、若上述循环正常退出,则此时栈必然空,说明pop序列合法,函数返回,结束。
参考代码如下:
比如输入的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序列。
思路: 1、建立一辅助栈;
2、进入循环,若栈为空,压入一元素;
3、依次取pop序列一元素,与栈顶元素比较。若相等,则将栈顶元素弹出;若不相等,将push序列下一元素压栈。
4、在步骤3中需判定:若push序列剩余元素全部压入栈,栈顶元素也不可能与pop序列当前元素相等,此时函数返回,pop序列不合法;若非,回到步骤2.
5、若上述循环正常退出,则此时栈必然空,说明pop序列合法,函数返回,结束。
参考代码如下:
#include<iostream> #include<stack> using namespace std; template <typename T> bool IsPossiblePopOrder(const T *push, const T *pop, unsigned int length) { unsigned int i = 0; unsigned int j = 0; stack<T> mystack; while(j<length) {// 此循环若正常退出,则说明POP序列合法 if(mystack.empty()) { mystack.push(push[i]); i++; } T top = mystack.top(); //获取当前栈顶元素 //比较POP序列元素与栈顶元素是否相等,若相等,则将其弹栈;若不相等,则将PUSH序列下一元素压栈 while(pop[j]!=top && i<length) { mystack.push(push[i]); i++; top = mystack.top(); } if(pop[j] == top) { j++; mystack.pop(); } //说明对于POP序列中的一个值,即使PUSH序列剩余元素全部压入栈,也不可能得到,此时函数返回,POP序列不合法 else if(i==length) return false; } return true; //此时栈必然为空 } int main() { int push[5] = {1,2,3,4,5}; int pop[5] = {4,5,3,2,1}; bool result = IsPossiblePopOrder(push, pop, 5); if(result) cout<<"True, pop sequence is valid!"<<endl; else cout<<"False, pop sequence is invalid!"<<endl; system("pause"); //DEV环境,些语句使黑框命令行不消失,若VC6.0,可去掉 return 0; }
相关文章推荐
- 程序员面试题精选100题(24)-栈的push、pop序列[数据结构]
- 程序员面试题精选100题(24)-栈的push、pop序列
- 程序员面试题精选100题(24)-栈的push、pop序列
- 程序员面试题精选100题(24)-栈的push、pop序列
- 程序员面试题精选100题(24)-栈的push、pop序列[数据结构]
- 程序员面试题精选100题(24)-栈的push、pop序列
- 程序员面试题100题第24题——判断是否是push、pop序列
- 程序员面试题精选100题(24)-栈的push、pop序列[数据结构]
- 笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应
- No29栈的push、pop序列(栈)
- 程序员面试题精选100题(06)-判断整数序列是不是二元查找树的后序遍历结果
- 栈的push、pop 序列
- 程序员面试题精选(26):和为n连续正数序列
- 剑指Offer---面试题22:栈的push,pop序列问题
- 栈的push、pop序列
- 栈的push、pop序列
- 题目:输入两个整数序列。其中一表示栈的 push 顺序,判断另一个序列有没可能是对应的 pop 顺序
- 栈的push,pop序列
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。 比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。
- 程序员面试题精选-判断整数序列是不是二元查找树的后序遍历结果