μ΄ κΈμ Stackμ μ€μ§μ μ¬μ©λ³΄λ€λ μλ°μμ μ€νμ ꡬννλ κ²μ λͺ©μ μ λμμ΅λλ€. λ§μ½ μλ°μμ μ΄λ»κ² μ€νμ΄ μ¬μ©λλμ§ κΆκΈνλ€λ©΄ λ³μκ° λ©λͺ¨λ¦¬μ λ΄κΈ°λ κ³Όμ μ€ν νλ μ λλ JREμ JVMμ΄ μ΄λ»κ² μ€νλ κΉ?μ κΈμ κ°λ³κ² μ½κ³ μ μ£Όμλ κ²μ μΆμ²λ립λλ€.
μ€ν Stack
κΈ°μ μ€ν (λͺ©μ μ λ¬μ±νκΈ° μν΄μ μ΅λνκΈ° μν κΈ°μ μ λ¨κ³μ μΌλ‘ μμ μ¬λ¦¬λ κ²) λ±μ μ°μ΄λ λ§μΈ μ€νμ 무μΈκ°λ₯Ό μμ μ¬λ¦°λ€ λΌλ ννμΌλ‘ μ΄ν΄ν΄λ 무방νλ€.
μ€νμ λ°μ΄ν°λ₯Ό μΌμμ μΌλ‘ μ μ₯νκΈ° μν΄ νμν μλ£κ΅¬μ‘°λ‘, κ°μ₯ λμ€μ λ£μ λ°μ΄ν°λ₯Ό κ°μ₯ λ¨Όμ κΊΌλΈλ€.
μ΄λ₯Ό μ λ¬Έ μ©μ΄λ‘ νμ μ μΆ (LIFO, Last In First Out) μ΄λΌκ³ νλ€.
νΈμ (PUSH)
μ€νμ λ°μ΄ν°λ₯Ό λ£λ μμ μ λ» νλ€.
ν (POP)
μ€νμ λ°μ΄ν°λ₯Ό κΊΌλ΄λ μμ μ λ» νλ€.
Topμ Bottom
Topλ μ€νμμ νΈμμ νμ μννλ κ°μ₯ κΌλκΈ°λ₯Ό λ» νλ©°, Bottomμ μ€νμ κ°μ₯ μλ«λΆλΆ λ°λ₯μ λ»νλ€.
Int λ°μ΄ν°λ₯Ό μ μ₯νλ Stack λ§λ€κΈ°
κ°λ¨νκ² Int
ν λ°μ΄ν°λ₯Ό μ μ₯νλ μ€νμ λ§λ€μ΄λ³΄μ.
κ°λ¨νκ² ν΄λμ€ νλλ₯Ό μμ±νμ¬ μΈ κ°μ§μ private
νλλ₯Ό λ§λ€μ΄ μ£Όμ.
int ptr
: μ€νμ μμΉλ₯Ό κ°λ¦¬ν¬ ν¬μΈν°int max
: μ€νμ μ΅λ μ©λint[] stack
: μ€νμ λͺΈν΅ μν μ μνν λ°°μ΄
μμ±μ λ§λ€κΈ°
맀κ°λ³μλ‘ μ€νμ μ©λμ λ°μ μ€νμ μμ±νλ μμ±μλ₯Ό λ§λ€μ΄ 보μ
μμ±μλ₯Ό λ§λ€μλ€λ©΄ μμ±μμ capacity
λΌλ 맀κ°λ³μκ° max
μ λ€μ΄κ° μ€νμ μ΅λ μ©λμ λ§λ€μ΄μ€λ€. λν ptrμ 0μΌλ‘ μ΄κΈ°ν μ겨 μ€ν ν¬μΈν°μ μμΉλ₯Ό μ€νμ Bottomμ μμΉνκ² νλ€.
μμΈ μ²λ¦¬
νΉμλ μ€νμ ν¬μΈν°κ° μ λͺ»λ κ³³μ κ°λ₯΄ν€κ³ μλ€κ±°λ μ€νμ΄ κ½ μ°¨μ λ μ΄μ μ μ₯μ΄ λμ§ μμ λλ₯Ό μν΄μ μμΈλ₯Ό λ€λ€μ€λ€.
Pushμ POP
Pushμ Popμ μν΄ stack[]
λ°°μ΄μ ptr
μΈλ±μ€λ₯Ό μ΄μ©νμ¬ κ°μ λμ νΉμ λμ μν€λ λ©μλλ₯Ό λ€μκ³Ό κ°μ΄ λ§λ€μ΄ μ€λ€.
μ 체 μμ€ μ½λ
package chapter02_Stack;
public class Stack01_IntStack {
public static void main(String[] args) {
}
}
class IntStack{
private int max;
private int ptr;
private int[] stack;
// constructor
public IntStack (int capacity){
ptr = 0;
max = capacity;
try {
stack = new int[max];
} catch (OutOfMemoryError e) {
max = 0;
}
}
// push
public int push(int x) throws OverflowStackException{
if (ptr <= max){
throw new OverflowStackException();
}
return stack[ptr++] = x;
}
// pop
public int pop() throws EmptyStackException{
if(ptr <= 0){
throw new EmptyStackException();
}
return stack[--ptr];
}
// indexOf
public int indexOf(int x) {
for (int i = ptr-1; i >= 0 ; i--) {
if(stack[i] == x){
return i;
}
}
return -1;
}
// Exception
public class EmptyStackException extends RuntimeException {
public EmptyStackException(){}
}
public class OverflowStackException extends RuntimeException {
public OverflowStackException(){}
}
}
λκΈ