剑指offer:栈的压入弹出序列
2015-10-06 00:54
351 查看
如何判断一个序列可能是另外一个序列的压入弹出序列呢?
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
/* a是入栈序列,b是出栈序列 */
bool isPopQueue(int* a, int* b, int len)
{
/* 入参判断 */
if(a == NULL || b == NULL || len <= 0)
return false;
int i = 0, j = 0;
stack<int> st;
/* 循环去判断 */
while(i < len || j < len)
{
if(i < len)
{
while(a[i] != b[j] && i < len)
{
st.push(a[i]);
i++;
}
cout << "i = " << i << ", j = " << j << endl;
}
if(j < len)
{
if(i < len && a[i] == b[j])
{
i++;
j++;
}
else if(!st.empty())
{
if(st.top() == b[j])
{
j++;
st.pop();
}
else
{
return false;
}
}
else
{
return false;
}
}
}
return true;
}
int main()
{
int a[] = {1,2,3,4,5};
int b[] = {4,5,3,1,1};
if(isPopQueue(a,b,5) == true)
{
cout << "good" << endl;
}
else
{
cout << "poor" << endl;
}
return 0;
}
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
/* a是入栈序列,b是出栈序列 */
bool isPopQueue(int* a, int* b, int len)
{
/* 入参判断 */
if(a == NULL || b == NULL || len <= 0)
return false;
int i = 0, j = 0;
stack<int> st;
/* 循环去判断 */
while(i < len || j < len)
{
if(i < len)
{
while(a[i] != b[j] && i < len)
{
st.push(a[i]);
i++;
}
cout << "i = " << i << ", j = " << j << endl;
}
if(j < len)
{
if(i < len && a[i] == b[j])
{
i++;
j++;
}
else if(!st.empty())
{
if(st.top() == b[j])
{
j++;
st.pop();
}
else
{
return false;
}
}
else
{
return false;
}
}
}
return true;
}
int main()
{
int a[] = {1,2,3,4,5};
int b[] = {4,5,3,1,1};
if(isPopQueue(a,b,5) == true)
{
cout << "good" << endl;
}
else
{
cout << "poor" << endl;
}
return 0;
}
相关文章推荐
- PHP mysqli_free_result()与mysqli_fetch_array()函数
- Java Main Differences between HashMap and HashTable
- Maximizing Battery Life
- 深入理解Javascript之this关键字
- 第三章:javascript: 列表
- Web_JavaScript_JS循环滚动效果;
- 隔日随笔样式测试
- js写法【2】
- JSP实现快速上传文件的方法
- JS+CSS相对定位实现的下拉菜单
- JS实现淡蓝色简洁竖向Tab点击切换效果
- JS实现的文字与图片定时切换效果代码
- JS实现三个层重叠点击互相切换的方法
- 前端开发工程师最常问的问题
- JavaScript Date() 对象使用问题。
- 为什么我要用 Node.js? 案例逐一介绍
- 原创:Javascript Websocket客户端封装
- cf 349 B. Color the Fence(贪心)
- Caffe 代码阅读
- js的cookie扩展