프로그래밍
[C++] Queue By Linked List
yscho22
2021. 2. 17. 20:55
반응형
※무엇인가
연결리스트로 구현한 큐
스택에서 pop부분만 바꿔주면 됨
※코드
<Queue.h>
#pragma once
#include <stdio.h>
template<typename T>
class Queue
{
public:
struct Node;
public:
Queue()
{
}
~Queue()
{
while (IsEmpty() == false)
{
Node* node = Dequeue();
DestroyNode(&node);
}
}
void Enqueue(Node* node)
{
if (front == NULL)
{
front = node;
rear = node;
count++;
return;
}
rear->Next = node;
rear = node;
count++;
}
bool IsEmpty()
{
return front == NULL;
}
Node* Dequeue()
{
Node* node = front;
if (front->Next == NULL)
front = rear = NULL;
else
front = front->Next;
count--;
return node;
}
int Size() { return count; }
public:
static Node* CreateNode(T data)
{
Node* node = new Node();
node->Data = data;
node->Next = NULL;
return node;
}
static void DestroyNode(Node** node)
{
delete *node;
*node = NULL;
}
public:
struct Node
{
T Data;
Node* Next;
};
private:
int count = 0;
Node* front = NULL;
Node* rear = NULL;
};
<main.cpp>
#include <stdio.h>
#include <queue>
#include "CircularQueue.h"
int main()
{
Queue<int> queue;
queue.Enqueue(Queue<int>::CreateNode(10));
queue.Enqueue(Queue<int>::CreateNode(20));
queue.Enqueue(Queue<int>::CreateNode(30));
printf("Size : %d\n", queue.Size());
while (queue.IsEmpty() == false)
{
Queue<int>::Node* node = queue.Dequeue();
printf("Dequeue : %d\n", node->Data);
Queue<int>::DestroyNode(&node);
}
std::queue<int> q;
return 0;
}
반응형