[Java] Stack

What is Stack?

  • 먼저 들어간 것이 나중에 나오는 자료구조이다.

  • LIFO : Last In First Out, 후입선출

  • 나중에 들어간 것이 먼저 나오기 때문에, 끝에서 부터 삭제하기엔 LinkedList보다 Array가 더 적합하다.

  • Stack으로 구현한 대표적인 프로그램으로는 계산지, redo-undo 등이 있다.

Stack의 클래스

image

push() : 추가

  • Stack의 가장 위에 item을 추가한다.

  • 추가한 item을 반환한다.

public E push(E item) {
    addElement(item);

    return item;
}

pop() : 삭제

  • stack의 가장 위의 값을 삭제한다.

  • 삭제한 값을 반환한다.

  • 만약 stack이 비어있으면 EmptyStackException을 발생시킨다.

public synchronized E pop() {
    E       obj;
    int     len = size();

    obj = peek();
    removeElementAt(len - 1);

    return obj;
}

peek() : 가장 위의 값 들여다보기

  • 삭제하지 않고, 가장 위의 값을 들여다보는 메소드이다.

  • 들여다본 값을 반환한다.

  • pop()과 마찬가지로 stack이 비어있으면 EmptyStackException을 발생시킨다.

public synchronized E peek() {
    int     len = size();

    if (len == 0)
        throw new EmptyStackException();
    return elementAt(len - 1);
}

empty() : 초기화

  • stack을 비울 때 사용한다.
public boolean empty() {
    return size() == 0;
}

search() : 위치 반환

  • 인자값으로 받은 데이터의 위치를 반환한다.

  • index를 반환한는 것이 아니다.

public synchronized int search(Object o) {
    int i = lastIndexOf(o);

    if (i >= 0) {
        return size() - i;
    }
    return -1;
}

isEmpty() : 비어있는지 확인

public boolean isEmpty() {

    return top == null && size == 0;
}

size() : size를 반환

public int size() {

    return size;
}

출처