반응형
※ 무엇인가
FIFO 선입선출
종류로
peekMessage, getMessage, 버퍼링 등이 있음
렌더링(우선순위 큐)
순서보장! (스택은 역순서보장!)
이는 멀티 스레드 상황에서 더 중요해짐
게임프로그래밍에서 가장 많이 사용하는 구조 >> 트리
std큐 >> 단순큐
※ 코드
front와 rear 비교만으로 크기 반환, 비어있는지, 가득찼는지 확인하는 함수를
구현 가능함
<Queue.h>
#pragma once
template<typename T>
class Queue
{
public:
Queue(int capacity)
:capacity(capacity)
{
datas = new T[capacity + 1];
}
~Queue()
{
delete[] datas;
datas = NULL;
}
void Enqueue(T data)
{
int position = 0;
if (rear == capacity)
{
position = rear;
rear = 0;
}
else
{
position = rear++;
}
datas[position] = data;
}
T Dequeue()
{
int position = front;
if (front == capacity)
{
front = 0;
}
else
{
front++;
}
return datas[position];
}
int Size()
{
if (front <= rear)
return rear - front;
return (capacity - front) + rear + 1;
}
bool IsEmpty()
{
return front == rear;
}
bool IsFool()
{
if (front < rear)
return (rear - front) == capacity;
return (rear + 1) == front;
}
int Capacity() { return capacity; }
int Front() { return front; }
int Rear() { return rear; }
private:
T* datas;
int capacity;//사이즈
int front = 0;
int rear = 0;
};
<main.cpp>
#include <stdio.h>
#include "CircularQueue.h"
int main()
{
Queue<int>queue(10);
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Enqueue(4);
for (int i = 0; i < 3; i++)
{
printf("Dequeue: %d ", queue.Dequeue());
printf("Front: %d, Rear : %d \n", queue.Front(), queue.Rear());
}
int count = 100;
while (queue.IsFool() == false)
queue.Enqueue(count++);
printf("Capacity : %d, ", queue.Capacity());
printf("Front : %d, Rear : %d ", queue.Front(), queue.Rear());
while (queue.IsEmpty() == false)
{
printf("Dequeue: %d ", queue.Dequeue());
printf("Front: %d, Rear: %d\n", queue.Front(), queue.Rear());
}
return 0;
}
반응형
'프로그래밍' 카테고리의 다른 글
[C] 2D 배열을 매개변수로 가지는 함수 (0) | 2021.02.18 |
---|---|
[C++] Queue By Linked List (0) | 2021.02.17 |
[C++] Stack (0) | 2021.02.16 |
[C++] Double Linked List (0) | 2021.02.16 |
[C++] LinkedList (0) | 2021.02.15 |