컴퓨터의 기본적인 자료구조의 한가지로, 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out) 구조로 저장하는 형식. 즉 한쪽 끝에서 삽입이 일어나고 그 반대쪽 끝에서 삭제가 일어나는 순서 리스트이다.
큐는 FIFO(선입선출)을 따른다.
데이터가 입력 된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용한다.
c++에서는 표준 템플릿 라이브러리 STL로 큐를 제공해준다.
하지만 STL을 쓰지 않고 큐를 구현하도록 해보자
#include <iostream>
using namespace std;
template <class T> class Queue{
public:
T* queue; //큐 원소들을 저장한 배열(heap 영역에 위치)
int front; // 첫번째 원소의 직전 위치
int rear; //마지막 원소의 위치
int capacity; //현재 확보된 큐 배열의 크기
Queue(int queueCapacitye): capacity(queueCapacity){
if(capacity < 1) throw "Queue capacity must be > 0";
queue = new T[capacity];
front=rear=0;
}
~Queue(){
delete[] queue;
}
inline bool IsEmpty(){
return front == rear;
}
bool IsFull(){
if((rear + 1) % size == front) return true;
else return false;
}
inline T& Front(){
if(IsEmpty()) throw "Queue is empty. No front element";
return queue[(front+1)%capacity];
}
inline T& Rear(){
if(IsEmpty()) throw "Queue is empty. no rear element";
return queue[rear];
}
void Push(T value)[
is(!isFull()){
queue[rear] = value;
rear = (rear+1) % capacity;
}
else
cout << "Queue is full" << endl;
}
void pop(){
if(isEmpty()) throw "queue is empty. cannot delete";
front = (front+1) % capacity;
queue[front].~T();
}