【100题】给定入栈序列,判断一个序列是否可能为输出序列
2012-08-01 09:09
441 查看
#include <stack> #include <iostream> using namespace std; /* 假设序列中无重复数字 输入序列为: 1,2,3,4,5 测试序列:4,5,3,2,1 测试序列:4,3,5,1,2 题目拓展: 1,如果序列中有重复的元素,怎么办? 2,找出一个入栈序列中所有可能的出栈序列? */ bool bxy ( const int *pPush, const int *pPop, int nLength ) { bool flag = false; if(pPush && pPop && nLength>0) { const int *pNextPush = pPush; const int *pNextPop = pPop; stack<int> data; while(pNextPop-pPop < nLength) { //当data为空,而且栈顶元素不是pop序列当前的值 //则向data中push while(data.empty() || data.top() != *pNextPop) { //如果push序列为空,则跳出! if(!pNextPush) { break; } // data.push(*pNextPush); if(pNextPush-pPush < nLength-1) { pNextPush++; } else { break; //pNextPush = NULL; } } // if(data.top() != *pNextPop) { break; } data.pop(); pNextPop++; } if(data.empty() && pNextPop-pPop==nLength) { flag = true; } } return flag; } int main(int argc, char **argv) { int push[] = {1,2,3,4,5}; int Yespop[] = {4,5,3,2,1}; int Nopop[] = {4,3,5,1,2}; cout << bxy(push,Yespop,5) <<endl; cout << bxy(push,Nopop,5) <<endl; return 0; }
相关文章推荐
- 给定入栈顺序,输出所有可能的出栈情况,并判断给定的序列是否为正确的输出序列
- 写一函数判断一个整数是否是素数。在main函数中调用该函数输出2~100中所有素数。
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
- 给定一个入栈顺序和一个出栈顺序,判断出栈顺序是否可能
- 判断一个序列是否为栈的输出序列
- C#l练习(用方法来实现:①判断一个给定的整数是否为“质数”。②计算1-100之间的所有质数(素数)的和
- 区间序列 (2,3) (4.2,6) (7,9),判断给定的一个区间与上面哪些区间有交集,比如给定(4,5)则输出(4.2,6)。
- 面试题精选(76):给定BST先序遍历序列,不构造BST的情况下判断BST是否每个node都只有一个child
- 给定一个数组,判断这个数组的元素是否是在一个序列
- java判断一个序列是否可能是另外一个压栈序列的弹出序列
- 面试题之括号匹配分析( 出栈序列是否合法,给定一个入栈序列,求所有可能的出栈序列等等)
- (1)任务描述 编写一个程序:输入一个身份证号,判断该号码对应的人是否是18至25岁女孩,是则输出”yes”,否则输出”no” (2)功能要求 ①输入一行给出正整数N(<= 100)是输入的身份证号码
- 判断一个序列是否是另一个给定序列的弹出序列
- 给定BST先序遍历序列,不构造BST的情况下判断BST是否每个node都只有一个child
- 判断给定序列是否为某BST后序输出
- 【HDU 4514】【树的直径 dfs或者并查集判断环】【给定一个无向图,图可能是非连通的,如果图中存在环,就输出YES,否则就输出树的直径】
- 如何判断LSTM模型中的过拟合和欠拟合 By 机器之心2017年10月02日 11:09 判断长短期记忆模型在序列预测问题上是否表现良好可能是一件困难的事。也许你会得到一个不错的模型技术得分,但了解
- 图结构练习——判断给定图是否存在合法拓扑序列
- 写一个函数:给定一个整数N, 判断N是否为素数.