栈的压入、弹出序列(是否合法)
来源:互联网 发布:数据库except 编辑:程序博客网 时间:2024/05/21 15:07
元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。
bool IsPopOrder(const int* pPush, const int* pPop, int nLength) //三个参数:压入序列,弹出序列,序列长度{ bool bProssible = false; if (pPush != NULL && pPop!= NULL && nLength > 0) { const int* pNextPush = pPush; //读取压入序列 const int* pNextPop = pPop; //读取弹出序列 std::stack<int> stackData; //创建辅助栈 while (pNextPop - pPop < nLength) //弹出序列全部匹配结束循环 { while (stackData.empty() || stackData.top() != *pNextPop) //栈为空或栈顶与当前弹出元素不匹配 { if (pNextPush - pPush == nLength) //压入序列全部读完 break; stackData.push(*pNextPush); //将压入序列对应元素压入 pNextPush++; } if (stackData.top() != *pNextPop) //压入序列元素全部压入但不匹配弹出序列,证明弹出序列错误 break; stackData.pop(); //匹配弹出序列弹出元素 pNextPop++; } if (stackData.empty() && pNextPop - pPop == nLength) //数据栈为空并且已经全部压入,说明弹出序列匹配 bProssible = true; } return bProssible;}
阅读全文
0 0
- 栈的压入、弹出序列(是否合法)
- 每日一题(35) - 栈的压入、弹出序列(验证出栈序列是否合法)
- 每日一题(35) - 栈的压入、弹出序列(验证出栈序列是否合法)
- 面试题22:根据栈的压入序列,判断弹出序列是否合法
- 数据结构--判断栈的弹出序列是否合法
- 1366栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- Q22:栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- java
- 高通平台(以8937为例)LCD驱动移植文件的确定方法
- java
- [解决方法]docker镜像timeout解决方法
- java
- 栈的压入、弹出序列(是否合法)
- 在while循环里switch菜单和scanf输入的问题
- java
- 0 欢迎使用CSDN-markdown编辑器(博客自带)
- java编译器特性
- 算法:求最大公约数与最小公倍数
- java-ApiDemo
- office 2010/2013激活工具及VS2013密钥
- Yii2 Lesson