- μ ν μλ£κ΅¬μ‘°μ μΌμ’ μΌλ‘ Last In First Out(LIFO) μ¦ λ§μ§λ§μ μ½μ λ λ°μ΄ν°κ° κ°μ₯ λ¨Όμ νΈμΆλλλ‘ νλ€λ νΉμ§μ κ°λλ€.
- κΈ°λ³Έμ μΈ μ¬μ©λ²μ λ€μκ³Ό κ°λ€.
public static void main(String[] args) {
int[] arr = {10,20,30,40,50,60};
Stack<Integer> stk = new Stack<>();
for(int x : arr) stk.push(x); // Stackμ κ° μΆκ°νκΈ°
System.out.println(stk.pop()); // Stack κ°μ²΄μμ κ°μ₯ μλ¨μ μμΉνκ³ μλ κ°μ μμ νκ³ κ·Έ κ°μ λ°ννλ€.
System.out.println(stk.peek()); // Stack κ°μ²΄μμ νμ¬ κ°μ₯ μλ¨μ μμ°¨νκ³ μλ κ°μ λ°ννλ€. pop()κ³Ό λ¬λ¦¬ μ€μ κ°μ Stackμμ μμ νμ§λ μλλ€.
System.out.println(stk.size()); // Stack κ°μ²΄μ μ μ₯λ λ°μ΄ν°μ μ
System.out.println(stk.empty()); // Stack κ°μ²΄μ λ°μ΄ν°κ° μ‘΄μ¬νλμ§ μ¬λΆλ₯Ό νμΈ, isEmpty()λ₯Ό μ¬μ©ν΄λ κ²°κ³Όκ°μ λμΌ.
System.out.println(stk.contains(20)); // Stack κ°μ²΄κ° ν΄λΉ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μλμ§ νμΈ.
}-
stackμ νμ©μ²
- μΉ λΈλΌμ°μ μ λ°©λ¬ΈκΈ°λ‘ (λ€λ‘ κ°κΈ°) : κ°μ₯ μ΅κ·Όμ λ°©λ¬Ένλ νμ΄μ§ μμλλ‘ λ³΄μ¬μ€λ€.
- μμ λ¬Έμμ΄ λ§λ€κΈ° : κ°μ₯ λμ€μ μ λ ₯λ λ¬ΈμλΆν° μΆλ ₯νλ€.
- μμμ κ΄νΈ κ²μ¬ : μ¬λ κ΄νΈμ λ«λ κ΄νΈμ κ°μλ₯Ό κ²μ¬νλλ°μ μ¬μ©λλ€.
- ν¨μ μ½ μ€ν : νλ‘κ·Έλ¨μ΄ ν¨μ νΈμΆ(Function Call)μ μΆμ ν λ μ¬μ©νλ€.
-
Stack Overflow & Underflow
- μλ¬΄λ° λ°μ΄ν° μ½μ μ΄ μμλ μ€νμ λν΄ pop μ°μ°μ μννλ €κ³ ν μ λ°μνλ μλ¬λ₯Ό UnderflowλΌκ³ νλ€.
- μ ν΄μ§ μ€ν μ©λμ΄ κ½ μ°¬ μνμμ λ°μ΄ν°λ₯Ό μΆκ°λ‘ μ μ₯νλ €κ³ ν μ λ°μνλ μλ¬λ₯Ό OverflowλΌκ³ νλ€.
- νλ‘κ·Έλ¨μ΄ μ€νλλ©΄μ νΈμΆνλ ν¨μλ€μ μ 보λ₯Ό μ μ₯νλ€.
- ν¨μκ° νλ νΈμΆλλ©΄ ν΄λΉ νΈμΆμ λν μ€νμ΄ μμ±λμ΄ μ½ μ€νμ μμΈλ€.
import java.util.Random;
public class CallStack {
private int rollDice(){
Random randomDice = new Random();
return randomDice.nextInt(6)+1; // 1~6κΉμ§μ μ«μλ€μ΄ 무μμλ‘ λ°νλλ€.
}
private void rollDiceTwiceAndAddSum(){
int sum = 0;
sum += rollDice();
sum += rollDice();
System.out.println(sum);
}
public static void main(String[] args) {
CallStack T = new CallStack();
T.rollDiceTwiceAndAddSum();
}
}- μ½ μ€νμλ μ΄λ€ μ 보λ€μ΄ μ μ₯λλκ°?
- ν¨μ λ΄ μ§μ λ³μ
- ν¨μμ λ§€κ°λ³μ(Arguments)
- νΈμΆν ν¨μ(Caller)μ μ€νμ λν μ 보 (Caller ν¨μμ μ½ μ€ν μ£Όμκ°)
- λ°ν κ° μ£Όμ(Return Address)μ λν μ 보 (νΈμΆλ λ€λ₯Έ ν¨μλ₯Ό μ²λ¦¬ν λ€ μ΄λλ‘ λ³΅κ·ν΄μΌ νλμ§μ λν μ 보)
- stackκ³Ό λ§μ°¬κ°μ§λ‘ μ ν μλ£κ΅¬μ‘°μ μΌμ’ μ΄λ€. First in First Out(FIFO)μ ꡬ쑰λ₯Ό κ°μ§λ©° λ¨Όμ μ μ₯λ λ°μ΄ν°λ₯Ό λ¨Όμ λ°ννλ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ€.
- κΈ°λ³Έμ μΈ μ¬μ©λ°©μμ μλμ κ°λ€.
public static void main(String[] args) {
int[] arr = {10,20,30,40,50,60};
Queue<Integer> q = new LinkedList<>(); //μλ°μμ Queueλ LinkedList κ°μ²΄λ‘ μμ±ν΄μ£Όμ΄μΌ νλ€.
for(int x : arr) q.offer(x); // μμ±λ Queue κ°μ²΄μ λ°μ΄ν° μ½μ
(enqueue)
for(int x : q){
System.out.print(x + " ");
}
System.out.println();
System.out.println(q.peek()); // Queue κ°μ²΄μμ κ°μ₯ μμ μλ κ°μ 리ν΄. Queueμμ ν΄λΉ κ°μ μμ νμ§λ μλλ€.
System.out.println(q.poll()); // Queue κ°μ²΄μμ κ°μ₯ μμ μλ κ°μ 리ν΄. Queueμμ ν΄λΉ κ°μ μμ νλ€. (dequeue)
System.out.println(q.contains(20)); // Queue κ°μ²΄μμ ν΄λΉ κ°μ΄ μ μ₯λμ΄ μλμ§ νμΈνλ€.
System.out.println(q.size()); // Queue κ°μ²΄κ° νμ¬ μ μ₯νκ³ μλ κ°μ κ°μλ₯Ό 리ν΄
System.out.println(q.isEmpty()); // Queue κ°μ²΄κ° νμ¬ λΉμ΄μλ μνμΈμ§ μ¬λΆλ₯Ό νμΈν΄μ 리ν΄
}- queueμ νμ©μ² : μ£Όλ‘ λ°μ΄ν°κ° μ
λ ₯λ μκ° μμλλ‘ μ²λ¦¬ν΄μΌ ν νμκ° μλ μν©μ μ΄μ©νλ€.
- μ°μ μμκ° λμΌν μμ λ€μ μμ½
- μλΉμ€ μ΄μ©μ λκΈ° 리μ€νΈ
- μΊμ ꡬν
