Stack과 Queue
물론이죠! Stack과 Queue는 자료구조의 기본 중 기본이면서도 매우 중요한 개념이에요. 아래에서 개념 설명과 함께 Python과 Java로 각각 구현 예시를 보여드릴게요.
📚 Stack (스택)
✅ 개념
- 후입선출 (LIFO: Last In, First Out) 구조
- 가장 마지막에 들어온 데이터가 가장 먼저 나감
- 예시: 접시 쌓기, 웹 브라우저의 뒤로 가기
🔧 주요 연산
push: 데이터를 스택에 추가pop: 가장 위의 데이터를 제거하고 반환peek: 가장 위의 데이터를 확인 (제거하지 않음)isEmpty: 스택이 비어있는지 확인
🐍 Python 구현 (리스트 활용)
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
return None
def peek(self):
if not self.is_empty():
return self.items[-1]
return None
def is_empty(self):
return len(self.items) == 0
# 사용 예시
stack = Stack()
stack.push(10)
stack.push(20)
print(stack.pop()) # 20
print(stack.peek()) # 10
☕ Java 구현
import java.util.*;
public class StackExample {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(10);
stack.push(20);
System.out.println(stack.pop()); // 20
System.out.println(stack.peek()); // 10
}
}
📚 Queue (큐)
✅ 개념
- 선입선출 (FIFO: First In, First Out) 구조
- 먼저 들어온 데이터가 먼저 나감
- 예시: 줄 서기, 프린터 작업 대기열
🔧 주요 연산
enqueue: 데이터를 큐에 추가dequeue: 가장 앞의 데이터를 제거하고 반환peek: 가장 앞의 데이터를 확인isEmpty: 큐가 비어있는지 확인
🐍 Python 구현 (collections.deque 활용)
from collections import deque
class Queue:
def __init__(self):
self.items = deque()
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
if not self.is_empty():
return self.items.popleft()
return None
def peek(self):
if not self.is_empty():
return self.items[0]
return None
def is_empty(self):
return len(self.items) == 0
# 사용 예시
queue = Queue()
queue.enqueue(10)
queue.enqueue(20)
print(queue.dequeue()) # 10
print(queue.peek()) # 20
☕ Java 구현
import java.util.*;
public class QueueExample {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.offer(10);
queue.offer(20);
System.out.println(queue.poll()); // 10
System.out.println(queue.peek()); // 20
}
}
🎯 Stack vs Queue 비교
| 항목 | Stack (스택) | Queue (큐) |
|---|---|---|
| 구조 | LIFO (후입선출) | FIFO (선입선출) |
| 주요 연산 | push, pop, peek | enqueue, dequeue, peek |
| 사용 예시 | 웹 브라우저, 재귀 | 작업 스케줄링, 메시지 처리 |
궁금한 점이나 응용 예제가 더 필요하면 언제든지 말해주세요! 예를 들어, 스택을 활용한 괄호 검사나 큐를 활용한 BFS 알고리즘도 재미있게 설명해드릴 수 있어요 😊
댓글
댓글 쓰기