1 minute read

스택 인터페이스

/**
 * @author andpact
 * @param <E> the type of elements in this stack
 */
public interface StackInterface<E> {
    /**
     * 지정한 요소를 스택에 삽입합니다.
     * @param e 삽입할 요소
     */
    void push(E e);

    /**
     * 최상단의 요소를 반환합니다. 해당 요소는 반환 후 삭제됩니다.
     * @return 반환할 요소
     */
    E pop();

    /**
     * 모든 요소를 제거합니다.
     */
    void clear();

    /**
     * 최상단의 요소를 반환합니다.
     * @return 반환할 요소
     */
    E peek();

    /**
     * 스택이 비었는지 여부를 확인합니다.
     * @return 요소 포함 여부
     */
    boolean isEmpty();

    /**
     * 요소의 개수를 반환합니다.
     * @return 요소의 개수
     */
    int size();
}

생성자

public class Stack<E> implements StackInterface<E> {
    private E[] arr;
    private static final int DEFAULT_CAPACITY = 10;
    private int size;

    public Stack() {
        arr = (E[]) new Object[DEFAULT_CAPACITY];
        size = 0;
    }
}

CREATE 메서드

@Override
public void push(E e) {
    resize(); // 요소 삽입 전 배열 크기 확인
    arr[size] = e;
    size++;
}

READ 메서드

@Override
public E peek() {
    return arr[size - 1];
}

@Override
public E pop() {
    E element = arr[size - 1];
    arr[size - 1] = null;
    size--;
    resize(); // 요소 삽입 후 배열 크기 확인
    return element;
}

DELETE 메서드

@Override
public void clear() {
    arr = (E[]) new Object[DEFAULT_CAPACITY];
    size  = 0;
}

기타 메서드

@Override
public boolean isEmpty() {
    return size == 0;
}

@Override
public int size() {
    return size;
}

private void resize() {
    if (size == arr.length)
        arr = Arrays.copyOf(arr, arr.length * 2);
    else if (size < arr.length / 2)
        arr = Arrays.copyOf(arr, Math.max(DEFAULT_CAPACITY, arr.length / 2));
}

Leave a comment