본문 바로가기
자료구조/C++ 자료구조

Queue

by 후야- 2024. 6. 27.
Queue

1. 가시성 확보하기
2. 클래스 선언 후 안에 값들 선언하기
3. 큐생성자 만든 후 큐값 초기화
4. 큐 소멸자 만들기
5. enqueue, dequeue, print, clear 구현하기

 

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

class Queue
{
private:
	int* arr;
	int front;
	int rear;
	int cnt;
	int maxSize;
public:
	Queue(int size)
	{
		arr = (int*)malloc(sizeof(int) * size);
		rear = 0;
		front = 0;
		cnt = 0;
		maxSize = size;
	}
	~Queue()
	{
		free(arr);
	}

	void Enqueue(int element);
	int Dequeue();
	void Print();
	void Clear();
};

int PrintMenu();

int main(void)
{
	int choice = 0, value = 0;
	Queue que(5);
	while ((choice = PrintMenu()) != 0)
	{
		switch (choice)
		{
		case 1:
			cin >> value;
			que.Enqueue(value);
			break;
		case 2:
			value = que.Dequeue();
			if (value == 999999999)
				cout << "underflow\n" << endl;
			else
				cout << "dequeue : " << value << endl;
			break;
		case 3:
			que.Print();
			break;
		case 4:
			que.Clear();
			break;
		}
		system("pause");
	}
	cout << "\nBye~" << endl;
	return 0;
}

int PrintMenu()
{
	system("cls");
	int choice = 0;
	cout << "======================================================" << endl;
	cout << "===================== STACK ==========================\n" << endl;
	cout << "[1] enqueue [2] dequeue [3] print [4] clear [0] exit" << endl;
	cout << "> ";
	cin >> choice;
	return choice;
}

void Queue::Enqueue(int element)
{
	if (cnt == maxSize)
	{
		cout << "overflow" << endl;
		return;
	}

	arr[rear] = element;
	rear++;
	cnt++;

	if (rear == maxSize)
		rear = 0;
}

int Queue::Dequeue()
{
	if (cnt == 0)
		return 999999999;

	int value = arr[front++];
	cnt--;

	if (front == maxSize)
		front = 0;
	return value;
}

void Queue::Print()
{
	if (cnt == 0)
	{
		cout << "큐가 비어있습니다!\n" << endl;
		return;
	}

	for (int i = front; i < front + cnt; i++)
	{
		cout << arr[i % maxSize] << " ";
	}
}

void Queue::Clear()
{
	if (front == 0 && rear == 0 && cnt == 0)
	{
		cout << "큐가 없습니다!\n" << endl;
		return;
	}
	else
	{
		front = 0;
		rear = 0;
		cnt = 0;
		cout << "초기화" << endl;
	}
}

'자료구조 > C++ 자료구조' 카테고리의 다른 글

Stack  (0) 2024.06.27
[자료구조] 벡터 (vector)  (0) 2024.03.01
[자료구조] 배열과 리스트  (1) 2024.02.29
[자료구조] 자료구조란 무엇인가?  (0) 2024.02.29