1οΈβ£ μ€ν(Stack).
μ€ν(Stack)μ μλ£κ΅¬μ‘°μ ν μ’ λ₯λ‘, λ°μ΄ν°κ° μΌλ ¬λ‘ μμ΄λ ꡬ쑰λ₯Ό κ°μ§κ³ μμ΅λλ€.
1οΈβ£ μ€ν(Stack)μ νΉμ§.
βνμ μ μΆ(LIFO, Last In First Out)βλ‘, κ°μ₯ λμ€μ μ½μ λ λ°μ΄ν°κ° κ°μ₯ λ¨Όμ κΊΌλ΄μ§λ€λ μ μ΄ νΉμ§μ λλ€.
2οΈβ£ μ€ν(Stack)μ κΈ°λ³Έ μ°μ°.
-
νΈμ(Push) : μ€νμ 맨 μμ λ°μ΄ν°λ₯Ό μ½μ νλ μ°μ°.
-
ν(Pop) : μ€νμ 맨 μμ μλ λ°μ΄ν°λ₯Ό μ κ±°νκ³ λ°ννλ μ°μ°.
3οΈβ£ μ€ν(Stack)μ λΆκ°μ μΈ μ°μ°.
-
νΌν¬(peek) λλ ν(top) : μ€νμ 맨 μμ μλ λ°μ΄ν°λ₯Ό μ κ±°νμ§ μκ³ λ°ννλ μ°μ°.
-
isEmpty : μ€νμ΄ λΉμ΄ μλμ§ μ¬λΆλ₯Ό νμΈνλ μ°μ°.
-
size : μ€νμ μλ λ°μ΄ν°μ κ°μλ₯Ό λ°ννλ μ°μ°.
4οΈβ£ μ€ν(Stack)μ μ€μ μμ© μ¬λ‘.
- μΉ λΈλΌμ°μ μ λ°©λ¬Έ κΈ°λ‘(λ€λ‘ κ°κΈ° κΈ°λ₯)
- ν¨μ νΈμΆμμ νΈμΆ μ€ν
- μν΄λλ νκΈ°λ² κ³μ° λ±
5οΈβ£ μ€ν(Stack)μ ꡬν.
μ€νμ λ°°μ΄μ΄λ μ°κ²° 리μ€νΈλ₯Ό μ΄μ©νμ¬ κ΅¬νν μ μμ΅λλ€.
λ°°μ΄μ μ΄μ©ν μ€ν ꡬνμ κ³ μ λ ν¬κΈ°λ₯Ό κ°μ§λ©°, μ°κ²° 리μ€νΈλ₯Ό μ΄μ©ν μ€ν ꡬνμ λμ μΌλ‘ ν¬κΈ°λ₯Ό μ‘°μ ν μ μμ΅λλ€.
-
λ°°μ΄μ μ΄μ©ν μ€ν : κ³ μ λ ν¬κΈ°μ λ°°μ΄μ μ¬μ©νμ¬ μ€νμ ꡬνν μ μμ΅λλ€. μ΄ κ²½μ° μ€νμ ν¬κΈ°κ° μ΄κ³Όλλ©΄ λ ν° λ°°μ΄λ‘ 볡μ¬νλ μΆκ° μμ μ΄ νμν μ μμ΅λλ€.
-
μ°κ²° 리μ€νΈλ₯Ό μ΄μ©ν μ€ν : λμ μΌλ‘ ν¬κΈ°λ₯Ό μ‘°μ ν μ μλ μ°κ²° 리μ€νΈλ₯Ό μ¬μ©νμ¬ μ€νμ ꡬνν μ μμ΅λλ€. μ°κ²° 리μ€νΈμ λ Έλ μ½μ λ° μμ λ O(1)μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λ―λ‘, μ€ν μ°μ°μ ν¨μ¨μ μΌλ‘ μνν μ μμ΅λλ€.
6οΈβ£ μκ° λ³΅μ‘λ
μ€νμ κ° μ°μ°μ μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λλ€.
-
Push : O(1)
- λ°μ΄ν°λ₯Ό μ€νμ 맨 μμ μΆκ°νλ μ°μ°μ νμ μΌμ ν μκ° λ΄μ μλ£λ©λλ€.
-
Pop : O(1)
- λ°μ΄ν°λ₯Ό μ€νμ 맨 μμμ μ κ±°νλ μ°μ°λ νμ μΌμ ν μκ° λ΄μ μλ£λ©λλ€.
-
Peek λλ Top : O(1)
- μ€νμ 맨 μμ μλ λ°μ΄ν°λ₯Ό νμΈνλ μ°μ°μ λ°μ΄ν° μ κ·Όλ§ νμνκΈ° λλ¬Έμ μΌμ ν μκ° λ΄μ μλ£λ©λλ€.
-
isEmpty : O(1)
- μ€νμ΄ λΉμ΄ μλμ§ νμΈνλ μ°μ°μ μ€νμ ν¬κΈ°λ§ νμΈνλ©΄ λνλ‘ μΌμ ν μκ° λ΄μ μλ£λ©λλ€.
-
Size : O(1)
- μ€νμ μλ λ°μ΄ν°μ κ°μλ₯Ό λ°ννλ μ°μ°μ μ€νμ ν¬κΈ° μ 보λ₯Ό μ μ§νκ³ μμΌλ©΄ μΌμ ν μκ° λ΄μ μλ£λ©λλ€.
7οΈβ£ μ€ν ꡬν.
// Stack
public class Stack {
private int maxSize; // μ€νμ μ΅λ ν¬κΈ°
private int top; // μ€νμ 맨 μλ₯Ό κ°λ¦¬ν€λ μΈλ±μ€
private int[] stackArray; // μ€νμ μ μ₯ν λ°°μ΄
// μμ±μ
public Stack(int size) {
maxSize = size;
stackArray = new int[maxSize];
top = -1; // μ€νμ΄ λΉμ΄μμμ λνλ
}
// μ€νμ κ°μ νΈμνλ λ©μλ
public void push(int value) {
if (isFull()) {
System.out.println("μ€νμ΄ κ°λ μ°Όμ΅λλ€.");
return;
}
stackArray[++top] = value;
}
// μ€νμμ κ°μ ννλ λ©μλ
public int pop() {
if (isEmpty()) {
System.out.println("μ€νμ΄ λΉμ΄μμ΅λλ€.");
return -1; // μλ¬λ₯Ό λνλ΄κΈ° μν΄ -1 λ°ν
}
return stackArray[top--];
}
// μ€νμ λ§₯ μ κ°μ λ°ννλ λ©μλ
public int peek() {
if (isEmpty()) {
System.out.println("μ€νμ΄ λΉμ΄μμ΅λλ€.");
return -1; // μλ¬λ₯Ό λνλ΄κΈ° μν΄ -1 λ°ν
}
return stackArray[top];
}
// μ€νμ΄ λΉμ΄μλμ§ νμΈνλ λ©μλ
public boolean isEmpty() {
return (top == -1);
}
// μ€νμ΄ κ°λ μ°Όλμ§ νμΈνλ λ©μλ
public boolean isFull() {
return (top == maxSize -1);
}
// μ€νμ ν¬κΈ°λ₯Ό λ°ννλ λ©μλ
public int size() {
return top + 1;
}
}
// Main
public class Main {
public static void main(String[] args) {
Stack stack = new Stack(5); // ν¬κΈ°κ° 5μΈ μ€ν μμ±
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println("μ€νμ 맨 μ κ° : " + stack.peek());
System.out.println("μ€νμ ν¬κΈ° : " + stack.size());
while (!stack.isEmpty()) {
System.out.println("ν : " + stack.pop());
}
System.out.println("μ€νμ ν¬κΈ° : " + stack.size());
}
}
/*
===μΆλ ₯===
μ€νμ 맨 μ κ° : 5
μ€νμ ν¬κΈ° : 5
ν : 5
ν : 4
ν : 3
ν : 2
ν : 1
μ€νμ ν¬κΈ° : 0
*/
μ£Όμ λ©μλ μ€λͺ
- push(int value) : μ€νμ 맨 μμ κ°μ μΆκ°ν©λλ€. μ€νμ΄ κ°λ μ°Όμ κ²½μ°, μλ¬ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
- pop() : μ€νμ 맨 μ κ°μ μ κ±°νκ³ λ°νν©λλ€. μ€νμ΄ λΉμ΄ μμ κ²½μ°, μλ¬ λ©μμ§λ₯Ό μΆλ ₯νκ³ -1μ λ°νν©λλ€.
- peek() : μ€νμ 맨 μ κ°μ λ°ννμ§λ§, μ€νμμ μ κ±°νμ§λ μμ΅λλ€. μ€νμ΄ λΉμ΄ μμ κ²½μ°, μλ¬ λ©μμ§λ₯Ό μΆλ ₯νκ³ -1μ λ°νν©λλ€.
- isEmpty() : μ€νμ΄ λΉμ΄ μλμ§ μ¬λΆλ₯Ό νμΈν©λλ€.
- isFull() : μ€νμ΄ κ°λ μ°Όλμ§ μ¬λΆλ₯Ό νμΈν©λλ€.
- size() : μ€νμ νμ¬ μ μ₯λ λ°μ΄ν°μ κ°μλ₯Ό λ°νν©λλ€.