#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를 해서 제일 마지막에 요소가 한개만 남았을 때에,
해당 요소를 처리해주는 추가적인 로직이 필요했음 ( 관련 로직은 빠질 수 있지 않았을까? )
'CS > 알고리즘' 카테고리의 다른 글
[알고리즘] 0.5 연결리스트 (0) | 2022.04.16 |
---|---|
[알고리즘] 0.4 은행 대기번호 관리 (0) | 2022.04.16 |
[알고리즘] 0.3 배열 회전 (0) | 2022.04.16 |
[알고리즘] 0.2 두 변수의 값 바꾸기 (0) | 2022.04.16 |
[알고리즘] 0.1 최대와 최소 (0) | 2022.04.16 |