프로그래밍

[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;
}

반응형