큐(queue)는 "대기줄"이라는 의미로, 먼저 집어 넣은 데이터가 먼저 나오는 구조로 저장하는 형식을 말한다.
First In First Out
public:
Node *next = nullptr;
Node *prev = nullptr;
int data;
Node(int data);
};
Node::Node(int data) {
this->data = data;
next = prev = nullptr;
}
class LinkedListQueue {
private:
Node *header = nullptr;
Node *trailer = nullptr;
int size = 0;
public:
LinkedListQueue();
int getSize();
bool empty();
void getFront();
void getRear();
void enQueue(int data);
void deQueue();
};
LinkedListQueue::LinkedListQueue() {
size = 0;
header = new Node(0);
trailer = new Node(0);
header->next = trailer;
trailer->prev = header;
header->prev = trailer->next = nullptr;
}
int LinkedListQueue::getSize() {
return size;
}
bool LinkedListQueue::empty() {
return (getSize() == 0);
}
int LinkedListQueue::getFront() {
if (empty()) return -1;
return header->next->data;
}
int LinkedListQueue::getRear() {
if (empty()) return -1;
return trailer->prev->data;
}
void LinkedListQueue::enQueue(int data) {
Node *newNode = new Node(data);
newNode->prev = trailer->prev;
newNode->next = trailer;
trailer->prev->next = newNode;
trailer->prev = newNode;
size++;
}
void LinkedListQueue::deQueue() {
if (empty()) return;
printFront();
Node *delNode = header->next;
header->next = delNode->next;
delNode->next->prev = header;
delete delNode;
size--;
}
front, rear 변수가 아니라 header, trailer를 사용한 이유
(next, prev로 front, rear를 가리키게 한 이유)
데이터가 0개 일때, 1개일 때 등 특이 상황에 예외처리 하기 싫어서