码迷,mamicode.com
首页 > 其他好文 > 详细

栈的压入、弹出序列

时间:2015-09-22 14:41:42      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:栈的压入、弹出序列

题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。


解法:

模拟栈的操作

创建一个stack变量,表示入栈;


  1. 如果stack为空,或者stack.top()==popV[i],stack.pop

  2. 否则,stack.push(pushv【inpos])


  3.  bool IsPopOrder(vector<int> pushV, vector<int> popV) {
  4.     int size1 = pushV.size();
  5.     int size2 = popV.size();
  6.     if (size1 != size2||size1==0)
  7.         return false;
  8.     stack<int> st;
  9.     int inpos = 0;
  10.     for (int i = 0; i<size2;){
  11.         if (!st.empty() && st.top() == popV[i]){
  12.             st.pop();
  13.             i++;
  14.         }
  15.         else{
  16.             if (inpos < size1)
  17.                 st.push(pushV[inpos++]);
  18.             else
  19.                 return false;
  20.         }
  21.     }
  22.     return inpos == size1&&st.empty();
  23. }

栈的压入、弹出序列

标签:栈的压入、弹出序列

原文地址:http://searchcoding.blog.51cto.com/1335412/1697054

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!