欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

判断元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)是合法序列

程序员文章站 2022-07-04 10:30:09
...

该题依旧考察的是栈的先进后出原则
思路如图
判断元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)是合法序列
出栈时候先判断S2是否为空,不为空则从S2栈顶元素逐个取出,再从S1中取出剩下的元素
代码实现如下

#include<iostream>  
#include <assert.h>  
#include <stack>
using namespace std;
typedef int T;  
class Stack  
{  
public:  
    Stack()  
    {}  
    ~Stack()  
    {}  
    void Push(T data)  
    {  
        s1.push(data);  
    }  
    void Pop()  
    {  
        while (!s2.empty())  
        {  
            cout << "s2.pop(" << s2.top() << ")" << endl;  
            s2.pop();  
        }  
        if (!s1.empty())  
        {  
            cout << "s1.pop(" << s1.top() << ")" << endl;  
            s1.pop();  
        }  
    }  
    void NumReverse(int x)  
    {  
        if (x > s1.size() && x < 0)  
            return;  
        while (x)  
        {  
            T temp = s1.top();  
            if (!s1.empty())  
            {  
                s1.pop();  
                s2.push(temp);  
            }  
            --x;  
        }  
    }  

private:  
    stack<T> s1;  
    stack<T> s2;  
};  
int main()  
{  
    Stack s;  
    s.Push(1);  
    s.Push(2);  
    s.Push(3);  
    s.Push(4);  
    s.Push(5);  
    s.NumReverse(2);  
    s.Pop();  
    s.Pop();  
    s.Pop();  
    s.Pop(); 
    system("pause");
    return 0;  
}

判断元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)是合法序列