剑指offer-栈的压入、弹出序列 (2013.12.23)

来源:互联网 发布:镜像站如何下载centos 编辑:程序博客网 时间:2024/05/05 15:25
循环时注意变量的初始化,队列的使用使得思路更加简洁。
#include <iostream>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
int main()
{
    int ilength;
    int m;
    int p=0;
    //vector<int> nums;
    vector<int> numstojudge;
    int input;
    stack<int> Stack;
    queue<int> nums;
    while (cin>>ilength)
    {
        m=0;
        while (nums.empty()!=true)//清空
        {
            nums.pop();
        }
        numstojudge.clear();
        while (Stack.empty()!=true)
        {
            Stack.pop();
        }
        for (int i=0;i<ilength;i++)
        {
            cin>>input;
            nums.push(input);
        }
        for (int j=0;j<ilength;j++)
        {
            cin>>input;
            numstojudge.push_back(input);
        }
        while(m<ilength)//nums和numstojudge使用的计数数字当不同,分开计数!
        {
            if (Stack.empty()==true&&nums.empty()!=true)//若空,则压数据如辅助栈
            {
                Stack.push(nums.front());
                nums.pop();
            }
            while ( nums.empty()!=true&&Stack.top()!=numstojudge.at(m))//压栈,直到栈顶数据和当前的数字相同
            {
                Stack.push(nums.front());
                nums.pop();
            }
            if (Stack.top()==numstojudge.at(m))
            {
                Stack.pop();
            }
                m++;
        }
        if (nums.empty()==true&&Stack.empty()!=true)
        {
            cout<<"No"<<endl;
        }else if (Stack.empty()==true){
            cout<<"Yes"<<endl;
        }
    }
}
/**************************************************************
    Problem: 1366
    User: 无梦楼主lv
    Language: C++
    Result: Accepted
    Time:550 ms
    Memory:2712 kb
****************************************************************/
0 0
原创粉丝点击