判断栈的出栈顺序是否正确

一般这种题都是出现在选择题里面的,而且元素较少,所以即使我们使用野路子(依次把选项代入测试)也不会花费多少时间。但是,我们总不能一直打游击啊,当遇到敌人主力的时候无能为力,那就坑了。
所以这里介绍怎样转游击战为阵地战,从正面硬刚敌人并且取胜的方法。

首先,假设入栈顺序是1,2,3,4
正确的出栈顺序(其中一种)2,3,4,1
错误的出栈顺序(其中一种)3,1,4,2
然后,开始准备进攻。我们设置一个中间栈:tempStack,记录一个出栈顺序下标index
1、按入栈顺序,存入一个元素到tempStack中
2、比较tempStack的栈顶元素与出栈顺序的第index个元素比较
相同,则进行3,否则进行1
3、弹出tempStack的栈顶元素,index++。执行2。
最后,如果循环结束后,tempStack为空,则表示出栈顺序正确。否则,出栈顺序错误。
估计乍看一眼,可能难以理解。其实,这就是模拟了一遍出入栈的过程。觉得难以理解的话,可以在纸上按上述流程把所有元素的入栈出栈画一遍就应该能理解了。我把代码贴在下面了,但是由于我用vector比较熟,所以在代码中也直接使用vector代替stack了。

#include <iostream>
using namespace std;
#include <vector>
#include <stack>

bool Judge(vector<int>& arrIn, vector<int>& arrOut)
{
    vector<int> tempStack;
    int i = 0;
    for(vector<int>::iterator it = arrIn.begin();it != arrIn.end(); ++it)
    {
        tempStack.push_back(*it);
        while(tempStack.size() > 0 && tempStack.back() == arrOut[i])
        {
            tempStack.pop_back();
            ++i;
        }
    }
    return tempStack.empty();
}

int main()
{
    vector<int> arrIn{1,2,3,4};
    vector<int> arrOut = {3,1,4,2};
    cout << boolalpha << Judge(arrIn,arrOut) << endl;

}

哦,千万记住,我用的是C++11标准。所以要使用支持c++11标准的编译器编译上述代码哦。
ps: minGw编译选项使用-std=c++11居然不能编译成功,反而要使用-std=gnu++11,受不了!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值