栈的压入弹出顺序
- 题目
- 算法原理
- 代码实现
题目
栈的压入弹出顺序
给定一个栈的压入顺序,然后再给定一个栈的弹出顺序,问这个两个顺序是否匹配
算法原理
- 定义一个栈s,我们先把栈的压入顺序数组的元素压入栈中,直到栈顶元素等于弹出顺序的第一个(逻辑上,但我们s栈弹出一个指向弹出序列的指针也要++)
- 然后我们循环判断 s栈顶的元素是否等于弹出序列的栈顶 && (因为s栈要弹出)s栈不能为空
- 最后当压入序列遍历完后看是否栈为空。
代码实现
stack<int> s;
bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {int push_i;int pop_i = 0;for(push_i = 0; push_i < pushV.size(); push_i++){s.push(pushV[push_i]);while(!s.empty() && s.top()== popV[pop_i]){s.pop();pop_i++;}}return s.empty();}