본문 바로가기
자료구조 알고리즘 자바

스택 Stack 접시 쌓기 LIFO 큐 Queue 줄 서기 FIFO 자바 자료구조 알고리즘

by aiyoon 2025. 6. 9.
반응형

📌 스택 (Stack) — "접시 쌓기"

비유

우리가 식당에서 접시를 쌓아두는 모습을 생각해보자.

  • 새 접시는 항상 위에 올려.
  • 꺼낼 때는 위에서부터 꺼내.

이걸 LIFO (Last In, First Out, 마지막에 들어간 것이 먼저 나온다) 라고 해.

예시 상황

  • 웹 브라우저의 "뒤로가기"
  • 프로그램의 함수 호출 (Call Stack)

기본 동작

동작 설명
push() 데이터를 위에 올린다 (넣기)
pop() 위에 있는 데이터를 꺼낸다 (빼기)
peek() 가장 위의 데이터가 뭔지 확인

 

📌 스택 (Stack) — 접시 쌓기 (LIFO)

 
[ Top ]
   ┌───────┐  ← 마지막 넣은 것 (먼저 나온다: pop)
   │ 데이터3 │
   ├───────┤
   │ 데이터2 │
   ├───────┤
   │ 데이터1 │  ← 처음 넣은 것 (나중에 나온다)
   └───────┘
[ Bottom ]

 

  • push() ➔ 위로 쌓아 올림
  • pop() ➔ 위에서 꺼냄

 



📌 스택 (Stack)  예제

import java.util.Stack;

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

        // 데이터 넣기 (push)
        stack.push("접시 1");
        stack.push("접시 2");
        stack.push("접시 3");

        System.out.println("현재 스택: " + stack);

        // 데이터 꺼내기 (pop)
        String item = stack.pop();
        System.out.println("꺼낸 데이터: " + item);
        System.out.println("스택 상태: " + stack);

        // 가장 위 확인 (peek)
        System.out.println("가장 위 데이터: " + stack.peek());
    }
}

실행결과 예시

현재 스택: [접시 1, 접시 2, 접시 3]
꺼낸 데이터: 접시 3
스택 상태: [접시 1, 접시 2]
가장 위 데이터: 접시 2




📌 큐 (Queue) — "줄 서기"

비유

우리가 놀이공원에서 놀이기구 타려고 줄을 서는 모습.

  • 먼저 온 사람이 먼저 탄다.
  • 새로 온 사람은 줄 뒤에 선다.

이걸 FIFO (First In, First Out, 먼저 들어간 것이 먼저 나온다) 라고 해.

예시 상황

  • 은행 대기 줄
  • 프린터 출력 순서
  • CPU 작업 스케줄링

기본 동작

동작 설명
enqueue() 줄 맨 뒤에 새 사람을 넣는다 (넣기)
dequeue() 줄 맨 앞 사람을 내보낸다 (빼기)
peek() 줄 맨 앞 사람이 누군지 확인

📌 큐 (Queue) — 줄 서기 (FIFO)

[ Front ]                          [ Rear ]
   ┌───────┐ ┌───────┐ ┌───────┐ 
   │ 데이터1 │ │ 데이터2 │ │ 데이터3 │
   └───────┘ └───────┘ └───────┘ 

(먼저 들어간 데이터1이 먼저 나감)
  • enqueue() ➔ 뒤에 넣음
  • dequeue() ➔ 앞에서 꺼냄

📌 큐 (Queue) 예제

import java.util.LinkedList;
import java.util.Queue;

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

        // 데이터 넣기 (enqueue)
        queue.add("사람 1");
        queue.add("사람 2");
        queue.add("사람 3");

        System.out.println("현재 큐: " + queue);

        // 데이터 꺼내기 (dequeue)
        String item = queue.poll();
        System.out.println("꺼낸 데이터: " + item);
        System.out.println("큐 상태: " + queue);

        // 가장 앞 확인 (peek)
        System.out.println("가장 앞 데이터: " + queue.peek());
    }
}

실행결과 예시

현재 큐: [사람 1, 사람 2, 사람 3]
꺼낸 데이터: 사람 1
큐 상태: [사람 2, 사람 3]
가장 앞 데이터: 사람 2

🔧 초간단 비교표

비교 스택
순서 LIFO FIFO
넣기 push() enqueue()
빼기 pop() dequeue()
예시 뒤로가기, 함수호출 줄 서기, 프린터
 

🔑 한 문장 정리

  • 스택은 "나중에 넣은 게 먼저 나온다"
  • 는 "먼저 넣은 게 먼저 나온다"
구분 스택
클래스 Stack Queue (보통 LinkedList 이용)
넣기 push() add()
빼기 pop() poll()
보기 peek() peek()

 

반응형