반응형
FIFO Queue 예제 (First In, First Out Queue)
FIFO Queue는 데이터 구조 중 하나로, "먼저 들어온 데이터가 먼저 나간다"는 원칙을 따릅니다. 줄을 서는 것처럼, 큐의 앞부분에서 데이터를 제거하고, 새로운 데이터는 뒤에 추가됩니다.
특징
- 순서 유지:
데이터가 추가된 순서대로 처리됩니다. - 기본 연산:
- Enqueue: 큐의 끝에 데이터를 추가합니다.
- Dequeue: 큐의 앞에서 데이터를 제거하고 반환합니다.
- 접근 제한:
큐의 중간에 있는 데이터는 직접 접근할 수 없으며, 오직 앞(front)과 뒤(rear)에서만 작업이 가능합니다.
구현 방식
FIFO Queue는 배열(Array), 링크드 리스트(Linked List), 또는 원형 큐(Circular Queue)로 구현할 수 있습니다.
1. 배열을 사용한 구현
- 장점: 구현이 간단하고 이해하기 쉽습니다.
- 단점: 고정된 크기의 배열에서는 크기 제한이 있어 효율성이 떨어질 수 있습니다.
Python 예제:
class FIFOQueue:
def __init__(self):
self.queue = []
def enqueue(self, item):
self.queue.append(item) # 뒤에 추가
def dequeue(self):
if not self.is_empty():
return self.queue.pop(0) # 앞에서 제거
else:
raise IndexError("Queue is empty")
def is_empty(self):
return len(self.queue) == 0
def peek(self):
if not self.is_empty():
return self.queue[0] # 큐의 첫 번째 요소 반환
else:
raise IndexError("Queue is empty")
2. 링크드 리스트를 사용한 구현
- 장점: 동적으로 크기를 조정할 수 있어 메모리 효율성이 높습니다.
- 단점: 구현이 다소 복잡합니다.
Python 예제:
class Node:
def __init__(self, data):
self.data = data
self.next = None
class FIFOQueue:
def __init__(self):
self.front = None # 큐의 첫 번째 노드
self.rear = None # 큐의 마지막 노드
def enqueue(self, item):
new_node = Node(item)
if self.rear is None: # 큐가 비어있을 때
self.front = self.rear = new_node
else:
self.rear.next = new_node
self.rear = new_node
def dequeue(self):
if self.front is None:
raise IndexError("Queue is empty")
removed_data = self.front.data
self.front = self.front.next
if self.front is None: # 큐가 비어 있다면 rear도 None으로 설정
self.rear = None
return removed_data
def is_empty(self):
return self.front is None
def peek(self):
if self.front is None:
raise IndexError("Queue is empty")
return self.front.data
FIFO Queue의 활용 사례
- 운영체제:
- 작업 스케줄링(예: 프린터 작업 큐)에서 사용됩니다.
- 네트워크:
- 데이터 패킷 전송 순서를 유지하기 위한 버퍼링.
- 웹 서버:
- 요청 처리 대기열.
- 게임 개발:
- 이벤트 큐를 관리.
장점과 단점
장점 | 단점 |
데이터 처리 순서를 명확히 유지 | 중간 데이터에 직접 접근 불가 |
구현이 단순하고 직관적 | 배열 기반 큐는 크기 제한으로 비효율적일 수 있음 (재배열이 필요) |
메모리를 효율적으로 사용할 수 있음 (링크드 리스트 사용 시) | 큐의 크기가 커지면 시간 및 메모리 오버헤드 증가 가능 |
FIFO Queue는 간단하면서도 강력한 데이터 구조로, 다양한 상황에서 데이터를 순차적으로 처리해야 할 때 유용합니다. 필요에 따라 구현 방식을 선택하여 활용하면 됩니다.
반응형
'Program > Language' 카테고리의 다른 글
shivers 뜻과 사용법 (0) | 2024.11.20 |
---|---|
[Python] PIL 이미지 Text 생성 가운데 정렬 (0) | 2021.07.18 |
[Python] 코딩 스타일 가이드 #1 (0) | 2021.02.10 |
[C#] 쿠팡파트너스 API 사용 예제 search (0) | 2020.12.29 |
[Python] 네이버 번역 API 예제 (0) | 2020.12.03 |
댓글