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 |