[Java] Stack
What is Stack?
-
먼저 들어간 것이 나중에 나오는 자료구조이다.
-
LIFO : Last In First Out, 후입선출
-
나중에 들어간 것이 먼저 나오기 때문에, 끝에서 부터 삭제하기엔 LinkedList보다 Array가 더 적합하다.
-
Stack으로 구현한 대표적인 프로그램으로는 계산지, redo-undo 등이 있다.
Stack의 클래스

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;
}