careerpup - 창고 와 대열 3.5

4374 단어 UP
3.5 하나의 MyQueue 클래스 를 실현 합 니 다. 이 클래스 는 두 개의 스 택 으로 하나의 대기 열 을 실현 합 니 다.
해답
대기 열 은 선진 적 인 데이터 구조 (FIFO) 이 고 스 택 은 선진 적 인 데이터 구조 (FILO) 입 니 다. 두 개의 스 택 으로 대기 열 을 실현 하 는 가장 간단 한 방법 은 대기 열 에 들 어가 면 첫 번 째 스 택 으로 스 택 을 누 르 고 두 번 째 스 택 이 비어 있 지 않 으 면 두 번 째 스 택 에서 대열 을 나 갑 니 다. 그렇지 않 으 면 첫 번 째 스 택 의 데 이 터 를 두 번 째 스 택 에 순서대로 누 른 다음 에 스 택 을 나 갑 니 다.매번 데이터 가 대기 열 에 들 어 갈 때마다 첫 번 째 스 택 에 직접 들 어 갑 니 다.데이터 가 대기 열 에 있 을 때마다 두 번 째 스 택 이 비어 있 지 않 을 때 두 번 째 스 택 에서 바로 나 옵 니 다.
C + + 구현 코드:
#include<iostream>

#include<stack>

using namespace std;



class MyQueue

{

private:

    stack<int> s1;

    stack<int> s2;

public:

    void push(int x)

    {

        s1.push(x);

    }

    void pop()

    {

        if(s1.empty()&&s2.empty())

            return;

        if(s2.empty()&&!s1.empty())

        {

            while(!s1.empty())

            {

                s2.push(s1.top());

                s1.pop();

            }

            s2.pop();

        }

        else

            s2.pop();

    }

    int front()

    {

        if(s1.empty()&&s2.empty())

            return 0;

        if(!s2.empty())

            return s2.top();

        while(!s1.empty())

        {

            s2.push(s1.top());

            s1.pop();

        }

        return s2.top();

    }

    int size()

    {

        return s1.size()+s2.size();

    }

    bool empty()

    {

        return s1.empty()&&s2.empty();

    }

};



int main()

{

    MyQueue q;

    for(int i=0; i<10; ++i)

    {

        q.push(i);

    }

    cout<<q.front()<<endl;

    q.pop();

    q.push(10);

    cout<<q.front()<<endl;

    cout<<q.size()<<" "<<q.empty()<<endl;

    return 0;

}

좋은 웹페이지 즐겨찾기