자료구조
Queue는 선형 자료구조(FIFO-First in First Out)이며 한쪽에서는 입력이 한쪽에서는 출력이 이루어지는 자료구조이다.
Stack과는 반대 개념의 자료구조이며 프린터의 출력 처리나 윈도 시스템의 메시지 처리기, 프로세스 관리 등 데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용된다. Key 입력 등
소스코드
#pragma once
#include<iostream>
/*--
Queue method
push()
pop()
empty()
front()
size()
Custom method;
DisplayAll();
clear();
capacity()
--*/
typedef bool BOOL;
template<class T>
class pQueue;
template<class T>
class Node {
private:
Node* next_;
T value_;
public:
friend pQueue<T>;
Node(const T& lhs) :value_(lhs), next_(nullptr) {}
};
template<class T>
class pQueue {
private:
Node<T>* head_;
Node<T>* tail_;
size_t size_;
public:
pQueue() {
head_ = new Node<T>{ 0 };
tail_ = new Node<T>{ 0 };
head_->next_ = nullptr;
tail_->next_ = nullptr;
size_ = 0;
}
void Push(const T& lhs) {
Node<T>* node = new Node<T>{ lhs };
if (Empty())
head_ = node;
tail_->next_ = node;
tail_ = node;
++size_;
}
void Push(const T&& lhs) {
Node<T>* node = new Node<T>{ lhs };
if (Empty())
head_ = node;
tail_->next_ = node;
tail_ = node;
++size_;
}
T Pop() {
//Not Safety Pop
Node<T>* node = nullptr;
T value = head_->value_;
head_ = head_->next_;
if (node != nullptr)
delete node;
--size_;
return value;
}
BOOL Empty()const {
return (0xFFFFFFFF & size_) == 0 ? true : false;
}
T Front()const {
return head_->value_;
}
size_t Size()const { return size_; }
void DisplayAll()const {
Node<T>* curr = nullptr;
curr = head_;
std::cout << "Display ALL: ";
while (curr != nullptr) {
std::cout << curr->value_ << ", ";
curr = curr->next_;
}
std::cout << std::endl;
}
void Clear() {
Node<T>* curr = nullptr;
curr = head_;
while (curr != nullptr) {
Node<T>* deleteNode = nullptr;
deleteNode = curr;
curr = curr->next_;
if (deleteNode != nullptr) {
delete deleteNode;
--size_;
}
}
}
size_t Capacity()const {
return sizeof(this) * size_;
}
};
후기
두 번째로 구현해본 자료구조 Queue이다. Stack과 다르게 포인터가 두 개로 구성되어 있으며 책이나 인터넷을 안 보고 혼자 생각하면서 구현하다 보니 생각보다 시간이 걸렸는데 다음 자료구조부터가 걱정이다.
이번에도 Template을 사용해서 어떤 자료 형태에서도 돌아갈 수 있게 만들었으며 R-value에 대응할 수 있게 생성자 또한 추가하였다. 그리고 기존 queue에 없는 Method를 3개 추가하였다.
Method 이름 | 용도 |
DisplayAll() | Node의 모든 value 출력 |
Clear() | 모든 Node 삭제 |
Capacity() | 현재 Queue의 메모리 크기 출력 |
출처 및 레퍼런스
Wiki: https://ko.wikipedia.org/wiki/큐_(자료_구조)
'자료구조 알고리즘 > 큐(Queue)와 스택(Stack)' 카테고리의 다른 글
[자료구조] 우선 순위 큐(Priority Queue) (0) | 2020.01.30 |
---|---|
[자료구조] 간단한 Stack 구현 (1) | 2019.12.15 |