CS/알고리즘

[자료구조] 원형 큐

겨울엔군고구마한잔 2024. 11. 4. 00:50
#include <iostream>
#include <vector>
#include <string>

struct Node {
	int Value;
	Node* nextNode = nullptr;

	Node(const int _Value)
		: Value(_Value)
		, nextNode(nullptr)
	{};
};

class Queue
{
public:
	~Queue()
	{
		while (!IsEmpty())
		{
			dequeue();
		}
	}

	Node* front;
	Node* rear;

	bool IsEmpty()
	{
		return front == nullptr && rear == nullptr;
	}

	void enqueue(int _value)
	{
		Node* newNode = new Node(_value);

		front = front == nullptr ? newNode : front;
		rear = rear == nullptr ? front : rear;

		rear->nextNode = newNode;
		rear = newNode;
		rear->nextNode = front;
	}

	void dequeue()
	{
		if (nullptr != rear && nullptr != front)
		{
			std::cout << "Dequeue : " << front->Value << std::endl;

			Node* nextFront = front->nextNode;
			delete front;
			if (rear == front)
			{
				front = nullptr;
				rear = nullptr;
			}
			else
			{
				front = nextFront;
				rear->nextNode = nextFront;
			}
		}
	}

	void peek()
	{
		static Node* value = front;

		if (nullptr != value)
		{
			std::cout << value->Value << std::endl;
			value = value->nextNode;
		}
	}
};

int main()
{
	Queue queue;

	queue.enqueue(1);
	queue.enqueue(2);
	queue.enqueue(3);
	queue.enqueue(4);
	queue.enqueue(5);

	queue.dequeue();

	for (int index = 0; index < 6; index++)
	{
		queue.peek();
	}
	return 0;
}


Node를 활용한 원형 큐 구현

front, rear Node Pointer와 peek을 하기 위한 value Node pointer가 추가로 필요하였음

그리고, dequeue를 해서 제일 마지막에 요소가 한개만 남았을 때에,
해당 요소를 처리해주는 추가적인 로직이 필요했음 ( 관련 로직은 빠질 수 있지 않았을까? )