FILO(LILO)구조
구현한 함수(다형성을 위해 템플릿 사용)
void Enqueue(T _value);
T Dequeue(); 가장 먼져 들어간 값을 반환하고 큐에서 지움
bool empty(); 비어있는지 확인하는 함수
/* 싱글링크드 리스트를 이용해 실제 사용되는 자료구조 큐와 동일하게 구현 - 2019/12/23 xtar.tistory */
#include <iostream>
using namespace std;
template <typename T>
class Node
{
public:
T value;
Node* next;
Node() :value(0), next(nullptr) {};
~Node() {};
};
template <typename T>
class Queue
{
public:
Queue() :head(nullptr), tail(nullptr), size(0) {};
~Queue() {};
void Enqueue(T _vaule);
T Dequeue();
bool empty();
private:
Node<T>* head;
Node<T>* tail;
int size;
};
int main()
{
Queue<int> queue;
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Enqueue(4);
queue.Enqueue(5);
cout << queue.Dequeue()<<endl;
cout << queue.Dequeue()<<endl;
cout << queue.Dequeue()<<endl;
cout << queue.Dequeue()<<endl;
cout << queue.Dequeue()<<endl;
cout << queue.Dequeue()<<endl;
return 0;
}
template<typename T>
void Queue<T>::Enqueue(T _vaule)
{
Node<T>* newNode = new Node<T>;
newNode->value = _vaule;
size++;
if (head == nullptr)
{
head = newNode;
tail = newNode;
}
else
{
tail->next = newNode;
tail = tail->next;
}
}
template<typename T>
T Queue<T>::Dequeue()
{
size--;
if (empty())
return -1;
else
{
Node<T>* ptr = head;
T vaule = head->value;
if (head == tail)
{
head =nullptr;
tail= nullptr;
delete(head);
}
else
{
ptr = ptr->next;
delete(head);
head = ptr;
}
return vaule;
}
}
template<typename T>
bool Queue<T>::empty()
{
if (tail == nullptr)
return true;
else
return false;
}
'Algorithm (알고리즘) > 자료구조' 카테고리의 다른 글
C++ 스택을 이용한 트리 전위순회 (Tree C++ with Stack) (0) | 2019.12.29 |
---|---|
C++ 이진 탐색 트리 구현 ( Binary Search Tree C++) (0) | 2019.12.28 |
C++ 포인터를 이용한 트리 구현 (Pointer Binary Tree C++) (0) | 2019.12.24 |
C++ 링크드 리스트를 이용한 스택 구현 (Single Linked List Stack C++) (0) | 2019.05.18 |
C++ 싱글 링크드 리스트 구현 (Singly Linked List C++) (2) | 2019.04.21 |