반응형

※ 무엇인가

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

+ Recent posts