반응형
큐 Queue 는 먼저 들어온 데이터가 먼저 나가는 구조를 가진 자료구조다.
즉, 선입선출 FIFO First In First Out 방식으로 작동한다.
이는 마치 줄을 서서 기다리는 사람들의 행렬과 비슷하다.
먼저 줄을 선 사람이 먼저 서비스를 받고 나가는 것과 같은 원리다.
큐의 주요 연산
- 인큐 Enqueue
큐의 뒤 Rear 에 데이터를 추가한다. - 디큐 Dequeue
큐의 앞 Front 에서 데이터를 꺼내고 제거한다. - 프론트 Front
큐의 맨 앞에 있는 데이터를 확인하되, 제거하지 않는다. - isEmpty
큐가 비어 있는지를 확인한다.
큐의 특징
- 삽입은 뒤쪽에서, 삭제는 앞쪽에서 일어난다.
- 데이터의 순서가 유지된다.
- 순차적인 작업 처리나 버퍼 Buffer 구조에 자주 사용된다.
- 대표적인 예로 프린터 대기열, 프로세스 스케줄링, 네트워크 패킷 처리 등이 있다.
배열을 이용한 큐 구현 예시
#include <iostream>
using namespace std;
#define MAX_SIZE 5 // 큐의 최대 크기
class Queue {
private:
int data[MAX_SIZE];
int front; // 첫 번째 요소의 인덱스
int rear; // 마지막 요소의 인덱스
public:
Queue() {
front = -1;
rear = -1;
}
bool isEmpty() {
return front == rear;
}
bool isFull() {
return rear == MAX_SIZE - 1;
}
void enqueue(int value) {
if (isFull()) {
cout << "큐가 가득 찼다" << endl;
return;
}
data[++rear] = value;
}
int dequeue() {
if (isEmpty()) {
cout << "큐가 비었다" << endl;
return -1;
}
return data[++front];
}
int peek() {
if (isEmpty()) {
cout << "큐가 비었다" << endl;
return -1;
}
return data[front + 1];
}
};
int main() {
Queue q;
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
cout << "맨 앞의 값: " << q.peek() << endl; // 10 출력
cout << "디큐: " << q.dequeue() << endl; // 10 제거
cout << "디큐: " << q.dequeue() << endl; // 20 제거
cout << "현재 맨 앞의 값: " << q.peek() << endl; // 30 출력
return 0;
}
정리
큐는 데이터의 순서를 유지하며, 먼저 들어온 데이터를 먼저 처리해야 하는 상황에서 유용하다.
예를 들어, 프린터 출력 순서, 콜센터의 전화 대기, CPU의 작업 처리 등에서 사용된다.
다만 배열 기반 큐는 삭제 시 빈 공간이 생기므로, 이를 보완하기 위해 원형 큐 Circular Queue나 링 버퍼 Ring Buffer 구조를 사용하기도 한다.
반응형
'DEVELOPMENT > Algorithm' 카테고리의 다른 글
| 그래프(Graph) (0) | 2019.02.07 |
|---|---|
| 정렬(Sorting)의 비교 (0) | 2019.02.07 |
| 스택(Stack) (0) | 2019.02.07 |
| 연결리스트(Linked List) (0) | 2019.02.07 |
| 자료구조 개요 (0) | 2019.02.07 |