[CS] μŠ€νƒ(Stack)

giggleΒ·2023λ…„ 8μ›” 21일
0

πŸ“Œ μŠ€νƒ(Stack)μ΄λž€?

μŠ€νƒμ˜ 사전적 μ˜λ―ΈλŠ” β€˜μŒ“λ‹€β€™μž…λ‹ˆλ‹€. μŒ“μ—¬μžˆλŠ” λ°•μŠ€μ™€ 같이 차곑차곑 μŒ“μ•„ 올린 ν˜•νƒœμ˜ ꡬ쑰λ₯Ό μŠ€νƒ(stack)이라 λΆ€λ¦…λ‹ˆλ‹€. μ΄λŸ¬ν•œ μŠ€νƒμ˜ κ°œλ…μ„ μΆ”μƒν™”ν•˜μ—¬ 자료ꡬ쑰둜 λ§Œλ“  것이 μŠ€νƒ μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€.

νŠΉμ§•

  • λ°μ΄ν„°μ˜ μ‚½μž…κ³Ό μ‚­μ œλŠ” top이라고 μΌμ»«λŠ” ν•œ μͺ½ λμ—μ„œλ§Œ 이루어지도둝 μ œν•œν•˜μ—¬ λ§Œλ“  μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€. 즉, 톡과할 수 μžˆλŠ” 문이 ν•˜λ‚˜ 뿐인 μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€.
  • LIFO(Last In Firtst Out, ν›„μž…μ„ μΆœ) : λ¨Όμ € λ“€μ–΄κ°„ 것이 밑에 μœ„μΉ˜ν•˜κΈ° λ•Œλ¬Έμ— λ‚˜μ€‘μ— λ‚˜μ˜€κ²Œ 되고 λ‚˜μ€‘μ— λ“€μ–΄κ°„ 것이 μœ„μ— μœ„μΉ˜ν•˜κΈ° λ•Œλ¬Έμ— λ¨Όμ € λ‚˜μ˜€λŠ” ν˜•νƒœμ˜ 자료ꡬ쑰

κ΄€λ ¨ μš©μ–΄

  • Top(peek): μŠ€νƒμ˜ μ΅œμƒλ‹¨μ„ 의미, κ°€μž₯ μ΅œκ·Όμ— λ“€μ–΄μ˜¨ 데이터
  • Push: μŠ€νƒμ— top에 데이터λ₯Ό λ„£λŠ” ν–‰μœ„
  • Pop: μŠ€νƒμ˜ topμ—μ„œ 데이터λ₯Ό λΉΌλŠ” ν–‰μœ„
  • empty/full: μŠ€νƒμ΄ λΉ„μ—ˆλŠ”μ§€ 가득 μ°ΌλŠ”μ§€ 검사
  • size(level): μŠ€νƒμ˜ 크기 리턴

μ‹œκ°„λ³΅μž‘λ„

  • μ‚½μž…: Insertion O(1)
  • μ‚­μ œ: Deletion O(1) (pop) / O(N) (remove)
  • 검색: Search O(N)

πŸ“Œ μŠ€νƒ(Stack) κ΅¬ν˜„

public class ArrayStack {
    int top;    //인덱슀
    int size;    //μŠ€νƒ λ°°μ—΄μ˜ 크기
    int [] stack;
    public ArrayStack(int size) {
        this.size = size;
        stack = new int[size];
        top = -1;
    }

    public void push(int item) {
        stack[++top] = item;
        System.out.println(stack[top] + " Push!");
    }
    public void pop() {
        System.out.println(stack[top] + " Pop!");
        int pop = stack[top];
        stack[top--] = 0;
    }
    public void peek() {
        System.out.println(stack[top] + " Peek!");
    }
}

πŸ“Œ μŠ€νƒ(Stack) μ‚¬μš©

Stack<Integer> stack = new Stack<>(); //intν˜• μŠ€νƒ μ„ μ–Έ
stack.push(1);     // stack에 κ°’ 1 μΆ”κ°€
stack.push(2);     // stack에 κ°’ 2 μΆ”κ°€
stack.push(3);     // stack에 κ°’ 3 μΆ”κ°€
stack.peek();     // stack의 κ°€μž₯ μƒλ‹¨μ˜ κ°’ 좜λ ₯
stack.size();      // stack의 크기 좜λ ₯ : 2
stack.empty();     // stack이 λΉ„μ–΄μžˆλŠ”μ œ check (λΉ„μ–΄μžˆλ‹€λ©΄ true)
stack.contains(1) // stack에 1이 μžˆλŠ”μ§€ check (μžˆλ‹€λ©΄ true)
stack.pop();       // stack에 κ°’ 제거
stack.clear();     // stack의 전체 κ°’ 제거 (μ΄ˆκΈ°ν™”)

μ°Έκ³ 


ν”Όλ“œλ°± 및 κ°œμ„ μ μ€ λŒ“κΈ€μ„ 톡해 μ•Œλ €μ£Όμ„Έμš”πŸ˜Š

profile
배움을 κΈ€λ‘œ κΈ°λ‘ν•˜λŠ” κ°œλ°œμžκ°€ λ˜κ² μŠ΅λ‹ˆλ‹€.

0개의 λŒ“κΈ€