Queue란?
Queue의 사전적 의미는 무엇을 기다리는 사람, 차량 등의 줄 혹은 줄을 서서 기다리는 것을 의미하는데 이처럼 줄을 지어 순서대로 처리되는 것이 큐라는 자료구조이다. 큐는 데이터를 일시적으로 쌓아두기 위한 자료구조로 스택과는 다르게 FIFO(First In First Out)의 형태를 가진다. FIFO 형태는 뜻 그대로 먼저 들어온 데이터가 가장 먼저 나가는 구조를 말한다. Queue는 C++ 표준 라이브러리(Standard Template Library)에 있는 정의 되어 있어 필요할 때마다 만들어 사용하지 않고 include 하여 사용하면 된다.
Enqueue : 큐 맨 뒤에 데이터 추가
Dequeue : 큐 맨 앞쪽의 데이터 삭제
Queue의 특징
1. 먼저 들어간 자료가 먼저 나오는 구조 FIFO(First In FIrst Out) 구조
2. 큐는 한 쪽 끝은 프런트(front)로 정하여 삭제 연산만 수행함
3. 다른 한 쪽 끝은 리어(rear)로 정하여 삽입 연산만 수행함
4. 그래프의 넓이 우선 탐색(BFS)에서 사용
5. 컴퓨터 버퍼에서 주로 사용, 마구 입력이 되었으나 처리를 하지 못할 때, 버퍼(큐)를 만들어 대기 시킴
Queue 사용법
Queue 선언
#include <queue> // queue가 들어있는 헤더파일
queue<int> q; //int형 큐 선언
queue<char> q; //char형 큐 선언
queue를 선언하려면 <queue>라는 헤더 파일을 include 한 뒤 queue <type> name과 같은 형식으로 선언하면 된다.
Queue 값 추가
queue<int> q; // int형 스택 선언
q.push(1); // queue에 값 1 추가
q.push(2); // queue에 값 2 추가
q.push(3); // queue에 값 3 추가
queue에 값을 추가하고 싶다면 push(value)라는 메서드를 활용하면 된다. queue에 값을 계속해서 추가해나간다면 아래 그림과 같은 형태로 데이터가 쌓이게 된다.
Queue 값 삭제
queue<int> q; // int형 큐 선언
q.push(1); // queue에 값 1 추가
q.push(2); // queue에 값 2 추가
q.push(3); // queue에 값 3 추가
q.pop(); // queue에 값 제거
queue에서 값을 제거하고싶다면 pop()이라는 메서드를 사용하면 된다. pop을 하면 가장 앞쪽에 있는 원소의 값이 아래 그림과 같이 제거된다. 값을 제거한다기보다는 값을 빼낸다라는 의미에 가깝다고 할 수 있다.
Queue의 기타 메서드
q.size(); // queue의 크기 출력
q.empty(); // queue가 비어있는지 check (비어있다면 true)
q.front(); // queue의 가장 첫번째 원소 출력
q.back(); // queue의 가장 마지막 원소 출력
그 밖에도 queue에는 크기를 구하는 size() 메서드와 queue가 비어있는지 확인하는 empty() 메서드(비어있다면 true, 그렇지 않다면 false를 return) queue의 가장 첫 번째 원소를 출력하는 front() 메서드와 맨 마지막 원소를 출력하는 back() 메서드가 있다.
Queue 전체 출력
우선 Queue는 인덱스 접근이 불가능하다.
이런식으로 해도 출력이 안된다는 것
즉 Queue 전체를 출력하고 싶을땐
while (!q.empty())
{
cout << q.front() << ' ';
q.pop();
}
Queue가 비어있지 않을때 첫번째 원소를 출력(front) 하고 출력한 원소를 빼주면(pop) 되는 것이다.
'Develop > Ps' 카테고리의 다른 글
[C++] STL sort함수 사용법 (0) | 2023.07.18 |
---|---|
[C++] STL 스택(stack) 사용법 (0) | 2023.04.13 |
[CS/C++] STL 덱(Deque) 사용법 (0) | 2023.04.12 |
BOJ(2609).cpp 유클리드 호제법 (0) | 2023.04.05 |
BOJ(1009).cpp 모듈러 연산(나머지 연산) (0) | 2023.03.28 |
댓글