📚 Computer Science/Algorithm
[Algorithm] C++ Queue (큐) 클래스 구현
스쳐가는비
2022. 10. 14. 20:12
큐 ( Queue )
- FIFO(First In First Out) - 선입선출 이라고 불린다.
- 삽입연산을 Push라고 하고, 삭제연산을 Pop이라 한다.
- 보통 BFS (너비 우선 탐색)에 쓰인다.
- 나중에 집어넣은 원소가 먼저나오는 스택 (Stack)과는 반대되는 개념이다.
예시
가장 쉽게 이해되는 구문이 위키백과에 잘 설명이 되어있다.
" 영어 단어 queue는 표를 사러 일렬로 늘어선 사람들로 이루어진 줄을 말하기도 하며, 먼저 줄을 선 사람이 먼저 나갈 수 있는 상황을 연상하면 된다. "
아래는 큐의 이해를 돕기위한 예시이다.
- 은행 업무
- 너비 우선 탐색(BFS, Breadth-First Search)
- 캐시(Cache) 구현
- 프로세스 관리
Code
#include <iostream>
using namespace std;
class Queue
{
private:
int _count;
int _size;
short* m_data;
public:
// 생성자
Queue()
{
_count = 0;
_size = 0;
m_data = NULL;
}
// 소멸자
~Queue()
{
if (m_data == NULL)
delete[] m_data;
}
void Create(short m_size)
{
// 크기 체크
if (m_size > 0 && m_size != _size)
{
if (m_data != NULL)
delete[] m_data;
// 새크기 저장 및 메모리 할당
_size = m_size;
m_data = new short[_size];
}
}
void Push(short m_num)
{
// 비어있을경우
if (_count < _size)
{
*(m_data + _count) = m_num;
_count++;
}
else
cout << "Queue is full" << "\n";
}
int Pop(int* p_num)
{
if (_count == 0)
{
cout << "Queue is empty" << "\n";
return 0;
}
_count--;
*p_num = *(m_data);
return 1;
}
void Show()
{
if (_count == 0)
cout << "Queue is empty" << "\n";
else
{
cout << "Queue ob" << "\n";
for (int i = 0; i < _count; i++)
{
cout << i + 1 << " : " << *(m_data + i) << "\n";
}
cout << "층 " << _count << "개의 값이 저장" << "\n";
}
}
};
int main()
{
Queue queue;
int select_index = 0;
int size = 0;
cout << "Queue의 크기를 입력하세요." << "\n";
cin >> size;
queue.Create(size);
while (select_index != 9)
{
cout << "\n\n1. Queue에 값 넣기" << endl;
cout << "2. Queue에서 값 꺼내기" << endl;
cout << "3. Queue 저장된 값 확인" << endl;
cout << "9. 종료" << endl;
cin >> select_index;
switch (select_index)
{
case 1:
cout << "저장할 값 입력 : ";
cin >> size;
queue.Push(size);
break;
case 2:
if (queue.Pop(&size))
cout << "가져온 값 : " << size << endl;
break;
case 3:
queue.Show();
break;
}
}
}