Stack

이용만·2023년 3월 16일
0

Stack 의 정의 : 데이터를 순서대로 쌓는 자료 구조


Stack 구조

차를 자료구조 stack, 아이들을 데이터로 비유해보자면
가장 먼저 들어간 아이는 가장 나중에 나올 수 있고, 가장 나중에 들어간 아이가 가장 먼저 나온다.
이런 자료구조 정책을 LIFO(Last In First OUT) 혹은 FILO(First In Last Out)이라고 부른다.
그래서 stack에 데이터를 넣는 것을 'push', 데이터를 꺼내는 것을 'pop'이라고 한다.


Stack의 특징

1. LIFO

  • 먼저 들어간 데이터는 제일 나중에 나오는 후입 선출의 구조.
public class stackEx {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
//        ---------------------------
//                1<-2<-3<-4<-<5
//        ---------------------------

        System.out.println(stack.pop()); // 5
        System.out.println(stack.pop()); // 4
        System.out.println(stack.pop()); // 3
        System.out.println(stack.pop()); // 2
    }
}

2. 데이터는 하나씩 넣고 뺄 수 있다.
Stack 자료 구조는 데이터가 아무리 많이 있어도 하나씩 데이터를 넣고 뺀다.

3. 하나의 입출력 방향을 가지고 있다.


Stack의 실사용 예로는 브라우저의 뒤로 가기, 앞으로 가기 기능을 구현할 때이다.

- ArrayList로 자료 구조 stack 구현하기.

ArrayListStack stack = new ArrayListStack()

stack.push(1); // [1]
stack.push(2); // [1, 2]
stack.push(3); // [1, 2, 3]
stack.push(4); // [1, 2, 3, 4]
stack.push(5); // [1, 2, 3, 4, 5]

System.out.println(stack.show()); // [1, 2, 3, 4, 5]

stack.pop(); // [1, 2, 3, 4]
stack.pop(); // [1, 2, 3]

System.out.println(stack.show()); // [1, 2, 3]
  • 🔻ArrayList로 Stack을 사용할 때 주의해야 할 사항
    ArrayList 클래스를 포함한 모든 자료구조 클래스에는 래퍼런스 타입의 데이터만 저장할 수 있다.
  • 🔻ArrayList로 Stack을 사용할 때 push, pop 이외에 필요한 메서드를 어떻게 구현할 수 있는가?
    size(), peek(), show(), clear()
  • 🔻Java의 배열로 Stack을 구현했을때 어떤 단점이 존재하는가?
    항상 최대 개수를 정해놔야지 사용이 가능하다. List는 개수에 한정되지 않아서 이러한 단점을 커버할 수 잇다.

0개의 댓글