스택(Stack)
- 스택은 리스트의 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료구조
- 스택은 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO)방식으로 자료를 처리
코드 설계
public E push(E paramE) // 해당 스택의 제일 상단에 전달된 요소를 삽입
public synchronized E pop() // 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환, 해당 요소를 스택에서 제거
public synchronized E peek() // 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환
public boolean empty() // 해당 스택이 비어 있으면 true를, 비어 있지 않으면 false를 반환
// 해당 스택에서 전달된 객체가 존재하는 위치의 인덱스를 반환
// 이때 인덱스는 제일 상단에 있는(제일 마지막으로 저장된) 요소의 위치부터 0이 아닌 1부터 시작
public synchronized int search(Object paramObject)
코드 구현
public class Stack<E> extends Vector<E> {
private static final long serialVersionUID = 1224463164541339165L;
public E push(E paramE) {
addElement(paramE);
return paramE;
}
public synchronized E pop() {
int i = size();
E e = peek();
removeElementAt(i - 1);
return e;
}
public synchronized E peek() {
int i = size();
if (i == 0)
throw new EmptyStackException();
return elementAt(i - 1);
}
public boolean empty() { return (size() == 0); }
public synchronized int search(Object paramObject) {
int i = lastIndexOf(paramObject);
return (i >= 0) ? (size() - i) : -1;
}
}
// solution(new int[] { 6, 9, 5, 7, 4 });
3 7 5 9 6
// solution(new int[] { 3, 9, 9, 3, 5, 7, 2 });
3 7 5 3 9 9 3
// solution(new int[] { 1, 5, 3, 6, 7, 6, 5, 2 });
3 5 6 7 6 3 5 1