반응형
(1) 큐(Queue) 자료구조란?
큐(Queue)는 먼저 들어온 데이터가 먼저 나가는 선입선출(FIFO, First In First Out) 방식으로 동작하는 데이터 구조입니다. 이러한 특성 때문에 대기열, 작업 스케줄링, 메시지 처리 등 다양한 응용 분야에서 활용됩니다.
(2) 큐의 기본 동작
- 삽입(Enqueue): 큐의 끝(Rear)에 데이터를 추가.(예를들어 50을 큐에 추가할 경우 40에 위치한 rear를 한칸 오른쪽으로 밀고 그 칸에 추가)
- 삭제(Dequeue): 큐의 앞(Front)에서 데이터를 제거.(현재 front가 위치한 10을 빼내고 deque 후 front는 20을 가리킴)
- 보기(Peek): 큐의 앞에 있는 데이터를 제거하지 않고 확인.(단순히 현재 front가 가리키고 있는 값이 뭔지만 확인)
(3) 큐의 주요 특징
- 선입선출(FIFO): 먼저 삽입된 데이터가 먼저 제거됩니다.
- 단방향 흐름: 데이터는 Rear에서 들어오고 Front에서 나갑니다.
- 구현 방식: 배열 또는 연결 리스트로 구현 가능하며, 구현 방식에 따라 성능 차이가 있습니다.
(참고) 큐의 종류
- 일반 큐: 기본적인 FIFO로 동작하는 큐
- 원형 큐(Circular Queue): Rear가 끝에 도달하면 다시 처음으로 연결.(사용할 수 있는 메모리에 제한이 있는 경우 사용)
- 우선순위 큐(Priority Queue): 데이터의 우선순위에 따라 처리 순서 결정. 일반적으로 Heap으로 구현함.
- 이중 끝 큐(Deque): 양쪽 끝에서 삽입과 삭제가 가능.
반응형
(4)큐 구현 예시
C언어로 구현한 큐
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
int queue[SIZE];
int front = -1, rear = -1;
void enqueue(int data) {
if (rear == SIZE - 1) {
printf("Queue is full!\n");
return;
}
if (front == -1) front = 0;
queue[++rear] = data;
}
int dequeue() {
if (front == -1 || front > rear) {
printf("Queue is empty!\n");
return -1;
}
return queue[front++];
}
void display() {
if (front == -1 || front > rear) {
printf("Queue is empty!\n");
return;
}
for (int i = front; i <= rear; i++) {
printf("%d ", queue[i]);
}
printf("\n");
}
int main() {
enqueue(10);
enqueue(20);
enqueue(30);
display();
printf("Dequeued: %d\n", dequeue());
display();
return 0;
}
Java로 구현한 큐
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.add(10);
queue.add(20);
queue.add(30);
System.out.println("Queue: " + queue);
int removed = queue.poll();
System.out.println("Dequeued: " + removed);
System.out.println("Queue after dequeue: " + queue);
int front = queue.peek();
System.out.println("Front element: " + front);
}
}
Python으로 구현한 큐
from collections import deque
queue = deque()
queue.append(10)
queue.append(20)
queue.append(30)
print("Queue:", list(queue))
removed = queue.popleft()
print("Dequeued:", removed)
print("Queue after dequeue:", list(queue))
front = queue[0]
print("Front element:", front)
(5) 큐의 활용 사례
- 운영체제의 작업 스케줄링: 프로세스 대기열 관리.
- 프린터 대기열: 요청된 인쇄 작업을 순서대로 처리.
- 네트워크 패킷 처리: 데이터를 순서대로 처리.
- BFS(너비 우선 탐색): 그래프 탐색에서 사용.
큐는 간단하지만 강력한 자료구조로, 프로그래밍에서 다양한 문제를 해결하는 데 중요한 역할을 합니다.
반응형
'자료구조' 카테고리의 다른 글
트리 (1) - 이진 트리(Binary Tree)의 모든 것: 원리, 구조, 예제 코드(C언어 Java, Python), 장단점, 사용 사례 (1) | 2024.12.18 |
---|---|
스택(Stack) 자료구조란? (C언어, Java, Python 예시코드 포함) (0) | 2024.12.18 |
링크드 리스트(2) - 성능 개선 (0) | 2023.04.21 |
링크드 리스트(Linked List)(1) - 더블 링크드 리스트(메모리 풀 방식) (0) | 2023.04.20 |
HEAP (2) - 업그레이드 된 HEAP 힙 (특정원소 삭제, 업데이트 O(logN)만에 가능) (0) | 2023.03.12 |
댓글