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 알고리즘도 재미있게 설명해드릴 수 있어요 😊

댓글

이 블로그의 인기 게시물

자동차 바퀴를 매일 재발명할 거야? 재발명할거냐고 했지만 현실세계에서. 비유적으로 표현한 것이지.

돈벌고싶다, 돈벌자!!!

AI로 인해서 없어지는 일자리와 새로 생기는 일자리의 비율은 어떻게 될까