2rjswn
293 words
1 minutes
스택 구현

스택 구현#

private static final int Bank = 5; //용량
    private Object[] arr; //값을 받을 배열
    private int top; //스택의 맨 위 요소 체크

    public Main() {
        this.arr = new Object[Bank];// 배열 생성
        this.top = -1;
    }
    public boolean isFull() {
        return top == arr.length -1;
    }
    public boolean isEmpty() {
        return top == -1;
    }
    private void resize() {//메소드 내에서만 사용하므로 private
        int arr_capacity = arr.length - 1;// 배열은 0부터 시작함으로 -1

        if (top == arr_capacity) {// 용량이 꽉찬 경우
            int new_capacity = arr.length * 2;//용량 두배
            arr = Arrays.copyOf(arr, new_capacity ); //배열 new_capacity 용량 설정
        }

        if (top < (arr_capacity / 2)) {
            int half_capacity = arr.length / 2;// 기존 용량의 반
            arr = Arrays.copyOf(arr, Math.max(half_capacity, Bank)); //half_capacity 와 기본 용량 중 큰걸 복사
        }
    }

    public Long push(Long value) {
        //1.배열 용량 검사
        if (isFull())
            resize();

        //2.원소 추가로 top++
        top++;

        //3.원소 추가
        arr[top] = value;   

        return value;
    }

    public Long pop() {
        //1.배열 확인
        if (isEmpty())
            throw new EmptyStackException();
        //2.arr원소 백업
        Long value = (Long) arr[top];
        //3.해당 위치 요소 삭제
        arr[top] = null;
        //4.top 감소
        top--;
        //빈 공간이 많으면 리사이징
        resize();

        return value;
    }

다른 블로그를 참고하며 구현했다 다음에 혼자 다시 만들어볼 예정

스택 구현
https://fuwari.vercel.app/posts/study/
Author
이건주
Published at
2024-07-01