원형 큐(Circular Queue)
원형 큐란?
- 선형 큐의 문제점을 보완하기 위한 자료구조이다.
- Rear가 가르키는 마지막 인덱스가 DeQueue로 발생한 빈 공간을 활용 할 수가 없는걸 사용 할 수 있게 된다.
원형 큐의 주요 기능
- EnQueue
- DeQueue
원형 큐는 % Module연산을 통해서 순환 할 수 있는 구조를 만든다.
이때 중요한점이 위 그림처럼 4의 크기를 가지고는 있지만 실질적인 데이터는 3개뿐이 저장을 못하고
1개는 빈 공간인 구조를 가지게 된다. 이때 빈 공간은 Front의 인덱스가 된다.
원형 큐의 확인
DeQueue를 하다보면 Front와 Rear가 같아지게 되는데 이때 데이터가 비어있는걸 확인 할 수 있다.
또한 (Front + 1) % Capacity 를 해서 Front와 같으면 꽉차있는지 확인 할 수 있다.
bool MyQueue::IsEmpty()
{
return Rear == Front ? true : false;
}
bool MyQueue::IsFull()
{
return (Rear + 1) % Capacity == Front ? true : false;
}
원형 큐의 삽입
삽입은 Front의 공백자리 전까지 삽입이 가능하다.
차례대로 1,2,3을 EnQueue를 해주고 4를 EnQueue를 하게되면 꽉차있는 상태여서 삽입을 할 수 없게 된다.
int MyQueue::DeQueue()
{
if (IsEmpty())
{
return -1;
}
Front = (Front + 1) % Capacity;
int Value = Data[Front];
return Value;
}
원형 큐의 삭제
삭제는 Front를 +1해준 자리의 인덱스 기준으로 삭제를 하게 된다.
void MyQueue::EnQueue(const int& NewData)
{
if (!IsFull())
{
Rear = (Rear + 1) % Capacity;
Data[Rear] = NewData;
}
}
원형 큐의 메인 코드
int main()
{
MyQueue* Queue = new MyQueue();
Queue->CreateQueue(5);
Queue->EnQueue(1);
Queue->EnQueue(2);
Queue->EnQueue(3);
Queue->EnQueue(4);
Queue->EnQueue(5);
Queue->DeQueue();
Queue->DeQueue();
Queue->EnQueue(5);
Queue->EnQueue(6);
Queue->Show();
}
먼저 5개의 사이즈의 큐를 만들어 준다
EnQueue를 통해 1,2,3,4,5를 해주면 Front의 공백이 한개 있기때문에 4개까지만 사용이 가능해진다
이로서 1,2,3,4 만 큐에 담겨지고 DeQueue를 2번해서 앞에있는 데이터 2개를 1,2를 지우고
3,4인상태에서 5,6을 EnQueue를 해주며 출력을 하면
3,4,5,6이 출력됨을 확인 할 수 있다.
'자료구조' 카테고리의 다른 글
[자료구조] 이진 트리(Binary Tree) (0) | 2023.08.07 |
---|---|
[자료구조] 스택 응용 - 미로 찾기 (0) | 2023.07.27 |
[자료구조] 스택 응용 - 사칙연산 계산기 (2) (0) | 2023.07.26 |
[자료구조] 스택 응용 - 사칙연산 계산기 (1) (0) | 2023.07.23 |
[자료구조] 스택(Stack) - 링크드 리스트를 이용한 구현 (0) | 2023.07.21 |