자료구조 및 알고리즘/기본 자료구조

[Java] 스택(Stack)과 큐(Queue): 사용법과 차이점 비교

CodeCaine Explorer 2024. 12. 18. 09:22
728x90
반응형
SMALL

스택(Stack)과 큐(Queue)의 차이를 쉽게 이해해보자!


1. 스택(Stack)

스택은 접시를 쌓는 것과 같아요.

  • 새 접시는 위에 올리고, 꺼낼 때도 위에서부터 꺼내요.
  • 이 방식을 LIFO (Last In, First Out)라고 불러요.
    • 마지막에 넣은 게 가장 먼저 나간다는 뜻이에요.

스택의 특징

  • 넣기(push): 새로운 데이터를 위에 쌓아요.
  • 빼기(pop): 맨 위에 있는 데이터를 꺼내요.
  • 가장 위 확인(peek): 맨 위에 있는 게 뭔지 확인만 해요(꺼내지는 않아요).

2. 큐(Queue)

큐는 줄 서는 것과 같아요.

  • 먼저 온 사람이 먼저 나가요.
  • 이 방식을 FIFO (First In, First Out)라고 불러요.
    • 먼저 들어간 게 먼저 나온다는 뜻이에요.

큐의 특징

  • 넣기(enqueue): 줄 끝에 새로운 데이터를 추가해요.
  • 빼기(dequeue): 줄 맨 앞에 있는 데이터를 꺼내요.

쉽게 비유해보기

  1. 스택(Stack)
    • 예: 접시를 쌓을 때 맨 위에서만 추가하거나 꺼낼 수 있음.
    • "접시 하나 더 올려!" → Push
    • "맨 위 접시 꺼내!" → Pop
  2. 큐(Queue)
    • 예: 영화표 줄에서 먼저 선 사람이 먼저 들어감.
    • "새로운 사람 줄에 추가!" → Enqueue
    • "맨 앞 사람 입장!" → Dequeue

3. 스택(Stack)과 큐(Queue)의 Java와 Python 예제

스택(Stack) 예제

Java 코드
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        // Push: 스택에 값 추가
        stack.push(10);
        stack.push(20);
        stack.push(30);

        // Peek: 스택의 맨 위 값 확인
        System.out.println("Top of Stack: " + stack.peek());

        // Pop: 스택의 맨 위 값 꺼내기
        System.out.println("Popped: " + stack.pop());
        System.out.println("Popped: " + stack.pop());

        // 남은 값 출력
        System.out.println("Stack: " + stack);
    }
}
Python 코드
# 스택은 리스트로 구현
stack = []

# Push: 스택에 값 추가
stack.append(10)
stack.append(20)
stack.append(30)

# Peek: 스택의 맨 위 값 확인
print("Top of Stack:", stack[-1])

# Pop: 스택의 맨 위 값 꺼내기
print("Popped:", stack.pop())
print("Popped:", stack.pop())

# 남은 값 출력
print("Stack:", stack)

큐(Queue) 예제

Java 코드
import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();

        // Enqueue: 큐에 값 추가
        queue.add(10);
        queue.add(20);
        queue.add(30);

        // Peek: 큐의 맨 앞 값 확인
        System.out.println("Front of Queue: " + queue.peek());

        // Dequeue: 큐의 맨 앞 값 꺼내기
        System.out.println("Dequeued: " + queue.poll());
        System.out.println("Dequeued: " + queue.poll());

        // 남은 값 출력
        System.out.println("Queue: " + queue);
    }
}
Python 코드
from collections import deque

# 큐 생성
queue = deque()

# Enqueue: 큐에 값 추가
queue.append(10)
queue.append(20)
queue.append(30)

# Peek: 큐의 맨 앞 값 확인
print("Front of Queue:", queue[0])

# Dequeue: 큐의 맨 앞 값 꺼내기
print("Dequeued:", queue.popleft())
print("Dequeued:", queue.popleft())

# 남은 값 출력
print("Queue:", list(queue))

실행 결과

스택(Stack)

Top of Stack: 30
Popped: 30
Popped: 20
Stack: [10]

큐(Queue)

Front of Queue: 10
Dequeued: 10
Dequeued: 20
Queue: [30]

이 코드를 보면서 스택은 맨 위에 넣고 빼는 구조이고, 큐는 줄을 서고 맨 앞부터 나가는 구조라는 점을 확인할 수 있어요! 😊

728x90
반응형
SMALL