判断一个序列是否为另一个栈的出栈序列(栈的压入、弹出序列)

来源:互联网 发布:mac 定时关闭程序 编辑:程序博客网 时间:2024/05/16 10:33

      判断一个序列是否为另一个栈的出栈序列


【思路】借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的


第一个元素,这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元素,则将出栈顺序向


后移动一位,直到不相等,这样循环等压栈顺序遍历完成,如果辅助栈还不为空说明弹出序列不是该栈的弹出顺序。


入栈1,2,3,4,5


出栈4,5,3,2,1


首先1入辅助栈,此时栈顶1≠4,继续入栈2


此时栈顶2≠4,继续入栈3


此时栈顶3≠4,继续入栈4


此时栈顶4=4,出栈4,弹出序列向后一位,此时为5,,辅助栈里面是1,2,3


此时栈顶3≠5,继续入栈5


此时栈顶5=5,出栈5,弹出序列向后一位,此时为3,,辅助栈里面是1,2,3


以下是实现代码:

bool  Ispopsort(vector<int> Push, vector<int> Pop){size_t size1 = Push.size();size_t size2 = Pop.size();if (size1 == 0 || size2 == 0)return false;vector<int> cur;for (size_t i = 0, j = 0; i < size1; i++){cur.push_back(Push[i]);while (j < size2&&Pop[j] == cur.back()){cur.pop_back();j++;}}return cur.empty();}



0 0