输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序
来源:互联网 发布:淘宝steam喜加一哪个好 编辑:程序博客网 时间:2024/05/21 11:34
输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。
为了简单起见,我们假设push 序列的任意两个整数都是不相等的。
比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列,但序列4、3、5、1、2 就不可能是push 序列1、2、3、4、5 的pop 序列。
思路:
1.首先新建一个栈模拟入栈入栈,都是在push序列中进行。
2.将push序列依次开始入栈,直到栈顶元素等于pop序列的第一个元素。
3.push的栈顶元素出栈,pop序列移到第二元素。
4.如果push栈顶继续等于pop序列现在的元素,则继续出栈并pop后移。
5.如果push已经全部入栈但是pop序列未遍历结束,且栈顶元素不等于现在所指元素则返回false。
6.如果栈为空,且pop也已经遍历结束,则返回true
按照上述思路,给出了源代码:代码中有两个实现,其中第一个是按照原作者的思路实现的,另外一个是网上的答案。
#include <iostream>#include <stack>using namespace std;bool isPopSerial(int push[], int pop[], int n)//原作者自己写的一种方法,注意函数名{int i=0,j=0;stack<int> mystack;while(i < n)//只要没有全部将push数组push到栈中{mystack.push(push[i]);i++;while(!mystack.empty() && mystack.top() == pop[j]){mystack.pop();j++;}}if( mystack.empty() && j==n)//最后是pop序列的唯一条件:栈变空了,且pop序列游标到了最后return true;return false;//除此之外都不是pop序列}bool isPopSeries(int push[],int pop[],int length)//网上流传的经典答案{if(!push||!pop||length<=0)return false;stack<int> temp;int pushNum=0;int i = 0;while(i < length){while(temp.empty()||temp.top()!=pop[i]){if(pushNum < length)temp.push(push[pushNum++]);elsereturn false;}if(!temp.empty()&&temp.top()==pop[i]){temp.pop();i++;}}return true;}int main(){int pushArray[5] = {1,2,3,4,5}; int popArray[5] = {4,5,3,2,1};if(isPopSerial(pushArray,popArray,5))cout<<"yes"<<endl;elsecout<<"no"<<endl;return 0; }
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序
- 题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 【算法】输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 微软算法100道题-------输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 两个整数序列,其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- 每天学习一算法系列(27)(输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序)
- <仅是自己做笔记。。。系列-14>输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 题目:输入两个整数序列。其中一表示栈的 push 顺序,判断另一个序列有没可能是对应的 pop 顺序
- 输入两个整数序列。其中一个序列表示栈的push顺序
- 谈谈如何判断一个Pop序列是否是一个Push序列的Pop顺序
- 栈的push、pop序列-判断序列是否是栈的pop顺序
- 一个序列是否可能是push序列的pop序列
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- c#如何检查局域网内服务器是否连通
- 浅谈java工厂方法模式
- 如何开好图文打印店
- POJ 2354 Titanic
- matlab中关于A(I)=B的理解
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序
- Configuration Import and Export of ZyWALL USG
- 子网划分的原理和子网掩码
- recover和restore的区别
- servlet多线程
- 项目时间管理(IT项目版)
- 笔试题目“翻转字符串”的实现
- c++继承后的可见性
- linux下C语言多线程编程实例