# μ€ν (Stack)
written by sohyeon, hyemin π‘
# 1. μ€νμ΄λ?
μ€ν
μ λ°μ΄ν°λ₯Ό μΌμμ μΌλ‘ μ μ₯νκΈ° μν μλ£κ΅¬μ‘°μ΄λ€.
μ
μΆλ ₯ μμλ κ°μ₯ λμ€μ λ£μ λ°μ΄ν°λ₯Ό κ°μ₯ λ¨Όμ κΊΌλ΄λ νμ
μ μΆ
μ μμλ₯Ό λ°λ₯Έλ€.
μλ° νλ‘κ·Έλ¨μμ λ©μλλ₯Ό νΈμΆνκ³ μ€νν λ νλ‘κ·Έλ¨ λ΄λΆμμ μ€νμ μ¬μ©νλ€.
# 2. μ€ν λ§λ€κΈ°
intν μλ£λ₯Ό μ μ₯νλ μ€νμ λ§λλ μμμ΄λ€.
# 2-1. μ€ν 본체
μ€ν 본체μ λ°°μ΄μ΄λ€.
μΈλ±μ€κ° 0μΈ μμκ° μ€νμ bottom
μ΄λ€.
κ°μ₯ λ¨Όμ push
λ λ°μ΄ν°λ₯Ό μ μ₯νλ κ³³μ stk[0]
μ΄λ€.
class IntStack{
int max; // μ€ν μ©λ
int ptr; // μ€ν ν¬μΈν°
int[] stk; // μ€νμ 본체
}
max : μ€νμ μ©λ, μ€νμ μμ μ μλ μ΅λ λ°μ΄ν° μλ₯Ό λνλ΄λ νλ
ptr : μ€νμ μμ¬ μλ λ°μ΄ν° μλ₯Ό λνλ΄λ νλ, μ€ν ν¬μΈν°
# 2-2. μμ±μ
public class IntStack{
private int max;
private int ptr;
private int[] stk;
// μ€ν μ μμΈ: μ€νμ΄ λΉμ΄ μμ
public class EmptyIntStackException extends RuntimeException{
public EmptyIntStackException(){}
}
// μ€ν μ μμΈ: μ€νμ΄ κ°λ μ°Έ
public class OverflowIntStackException extends RuntimeException{
public OverflowIntStackException(){}
}
// μμ±μ
public IntStack(int capacity){
ptr = 0;
max = capacity;
try{
stk = new int[max];
}catch(OutOfMemoryError e){
max = 0;
}
}
}
μμ± μ μ€νμ λΉμ΄ μμΌλ―λ‘ μ€ν ν¬μΈν° ptrκ°μ 0μΌλ‘ νλ€.
맀κ°λ³μ capacityλ‘ μ λ¬λ°μ κ°μ μ€ν μ©λμ λνλ΄λ maxμ 볡μ¬νκ³
μμμκ° maxμΈ λ°°μ΄ stkμ 본체λ₯Ό μμ±νλ€.
# 2-3. λ©μλ
# 1) push
μ€νμ΄ κ°λμ°¨μ νΈμν μ μλ κ²½μ° μμΈ OverflowIntStackException
μ throwνλ€.
μ λ¬λ°μ λ°μ΄ν°λ₯Ό λ£μ μ μμΌλ©΄ stk[ptr]
μ μ μ₯νκ³ , μ€ν ν¬μΈν°λ₯Ό μ¦κ° μμΌμ€λ€.
λ©μλμ λ°νκ°μ pushν κ°μ΄λ€.
public int push(int x) throws OverflowIntStackException{
if(ptr>=max)
throw enw OverflowIntStackException();
return stk[ptr++] = x;
}
# 2) pop
μ€νμ κΌλκΈ° κ°μ μ κ±°νκ³ κ·Έ κ°μ λ°ννλ€.
μ€νμ΄ λΉμ΄ μμ κ²½μ° μμΈ EmptyIntStackException
μ throwνλ€.
public int pop() throws EmptyIntStackException{
if(ptr<=0)
throw new EmptyIntStackException();
return stk[--ptr];
}
# 3) peek
μ€νμ κΌλκΈ°μ μλ κ°μ 보λ λ©μλμ΄λ€.
μ€νμ΄ λΉμ΄ μμ κ²½μ° μμΈ EmptyIntStackException
μ throwνλ€.
λ°μ΄ν°μ μ
λ ₯κ³Ό μΆμ
μ΄ μμΌλ―λ‘ μ€ν ν¬μΈν°λ λ³ννμ§ μλλ€.
public int peek() throws EmptyIntStackException{
if(ptr<=0)
throw enw EmptyIntStackException();
return stk[ptr - 1];
}
# 4) indexOf
μ€ν 본체μ λ°°μ΄ stkμ xμ κ°μ κ°μ λ°μ΄ν°κ° ν¬ν¨λμ΄ μλμ§,
ν¬ν¨λμ΄ μλ€λ©΄ λ°°μ΄μ μ΄λμ λ€μ΄ μλμ§λ₯Ό μ‘°μ¬νλ λ©μλμ΄λ€.
κΌλκΈ° μͺ½μμ λ°λ₯ μͺ½μΌλ‘ μ ν κ²μμ μννλ€.
κ²μμ μ±κ³΅νλ©΄ μ°ΎμλΈ μμμ μΈλ±μ€λ₯Ό λ°ν, μ€ν¨νλ©΄ -1μ λ°ννλ€.
public int indexOf(int x){
for(int i=ptr-1; i>=0; i--){
if(stk[i] == x)
return i
}
return -1
}
# 5) dump
μ€νμ μμ¬ μλ λͺ¨λ λ°μ΄ν°λ₯Ό λ°λ₯μμ κΌλκΈ° μμΌλ‘ νμνλ λ©μλ
public void dump(){
if(ptr<=0)
System.out.println("μ€νμ΄ λΉμ΄ μμ΅λλ€.");
else{
for(int i=0; i<ptr; i++)
System.out.println(skt[i]+" ");
System.out.println();
}
}
# 6) κ·Έ μΈ
clear : μ€νμ λͺ¨λ λ°μ΄ν°λ₯Ό μμ νλ λ©μλ
capacity : μ©λμ νμΈνλ λ©μλ
size : νμ¬ μ€νμ μμ¬μλ λ°μ΄ν° μλ₯Ό λ°ννλ λ©μλ
isEmpty : μ€νμ΄ λΉμ΄ μλμ§ κ²μ¬νλ λ©μλ
isFull : μ€νμ΄ κ°λ μ°Όλμ§ κ²μ¬νλ λ©μλ
public void clear(){
ptr=0;
}
public int capacity(){
return max;
}
public int size(){
return ptr;
}
public boolean isEmpty(){
return ptr<=0;
}
public boolean isFull(){
return ptr >= max;
}
β ν (Queue) νΈλ¦¬(Tree) β