스택(Stack)

  • 스택은 리스트의 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료구조
  • 스택은 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO)방식으로 자료를 처리

코드 설계

  • Stack 클래스의 핵심 메서드 확인
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) 

코드 구현

  • Stack 클래스 확인
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    

+ Recent posts