반응형
📌 스택 (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() |
반응형
'자료구조 알고리즘 자바' 카테고리의 다른 글
equals()와 ==의 차이는 값 비교 vs 참조 비교 (0) | 2025.06.09 |
---|