본문 바로가기
프로그래밍/자료구조 및 알고리즘

큐(Queeu)

by 오늘의논리 2023. 3. 7.
728x90

Queue(FiFO First In Fisrt Out 선입 선출)

 

예를들어 대기열

#include <queue> 필요

queue 구현해보자

 

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

template<typename T>
class ArrayQueue
{
public:
    ArrayQueue()
    {
        _container.resize(100);
    }
    void push(const T& value)
    {
        //다 찼는지 체크
        if (_size == _container.size())
        {
            //증설작업
            int newSize = max(1, _size * 2);
            vector<T> newData;
            newData.resize(newSize);

            //데이터 복사
            for (int i = 0; i < _size; i++)
            {
                int index = (_front + i) % _container.size();
                newData[i] = _container[index];
            }

            _container.swap(newData);
            _front = 0;
            _back = _size;

        }

        _container[_back] = value;
        _back = (_back + 1) % _container.size();
        _size++;

    }
    void pop()
    {
        _front = (_front + 1) % _container.size();
        _size--;
    }
    T& front()
    {
        return _container[_front];
    }
    bool empty() { return _size == 0; }
    int size() { return _size; }

private:
    vector<T> _container;

    int _front = 0;
    int _back = 0;
    int _size = 0;
};

template<typename T>
class ListQueue
{
public:
    void push(const T& value)
    {
        _container.push_back(value);
    }
    void pop()
    {
        _container.pop_front();
    }
    T& front()
    {
        return _container.front();
    }
    bool empty() { return _container.empty(); }
    int size() { return _container.size(); }

private:
    deque<T> _container;
    //list<T> _container;//가능
};


int main()
{
    ArrayQueue<int> q;

    for (int i = 0; i < 100; i++)
    {
        q.push(i);
    }
    while (q.empty() == false)
    {
        int value = q.front();
        q.pop();
        cout << value << endl;
    }

    int size = q.size();

    return 0;
}
728x90

'프로그래밍 > 자료구조 및 알고리즘' 카테고리의 다른 글

이진 탐색  (1) 2023.03.12
힙 트리 이론  (1) 2023.03.12
스택(Stack)  (0) 2023.03.07
배열, 동적배열, 연결리스트  (0) 2023.03.06
Big-O 표기법  (0) 2023.03.06

댓글