DataStructure | 자료구조

스택으로 큐 구현하기 / 큐로 스택 구현하기

gyunnnnnn 2022. 11. 25. 10:02

스택과 큐의 상호 구현

  • 면접 보면서 정말 많이 받은 질문 중 하나이다.
  • 처음 질문받았을 때 어버버 하면서 아무것도 대답 못했던 기억이 있고 두 번째 받았을 땐 자신 있게 작성하다 틀린 기억이 있는 부끄러운 기억이 있다.

스택으로 큐 구현하기

이론은 간단하다. 2개의 스택을 이용해서 구현하면 된다.

 

 

Enqueue(삽입)

  • 그냥 첫 번째 스택인 a에 추가만 하면 된다.

Dequeue(제거)

  • 두 번째 스택인 b가 비어있지 않다면 b에 있는 값을 제거(반환) 하면 된다.
  • 두 번째 스택인 b가 비었다면 첫 번째 스택인 a가 빌 때까지 a를 pop(제거)하면서 두 번째 스택인 b에 push(추가) 한다.
class StackQueue
{
public:
    stack<int> a;
    stack<int> b;
    void Enqueue(int data)
    {
        a.push(data);
    }
    int Dequeue()
    {
        if (b.empty())
        {
            while (!a.empty())
            {
                b.push(a.top());
                a.pop();
            }
        }
        int data = b.top();
        b.pop();
        return data;
    }
};

큐로 스택 구현하기

  • 큐로 스택을 구현하는 경우에도 큐 2개를 이용하면 스택을 구현할 수 있다.
#include<queue>
using namespace std;
class QueueStack
{
public:
    queue<int> a;
    queue<int> b;
    void Push(int data)
    {
        if (a.empty())
        {
            a.push(data);
        }
        else
        {
            while (!a.empty())
            {
                b.push(a.front());
                a.pop();
            }
            a.push(data);
            while (!b.empty())
            {
                a.push(b.front());
                b.pop();
            }
        }
    }
    int Pop()
    {
        int data = a.front();
        a.pop();
        return data;
    }
};

'DataStructure | 자료구조' 카테고리의 다른 글

자료구조 List에 대한 설명과 구현  (0) 2022.12.05
Stack  (0) 2022.11.26
Queue | 큐  (0) 2022.11.06