공부기록

Stack 본문

CS/Data Structure

Stack

코타쿠 2021. 5. 29. 22:14

Stack?

구현

먼저 stack에서 구현해야 하는 기능은 다음과 같다.

public interface Stack<E> {

    int size();

    boolean isEmpty();

    void push(E e);

    E top();

    E pop();

}

stack을 구현하는 방법은 배열을 사용하는 방법과 linked list를 사용하는 방법이 있다.

배열을 사용한 Stack, ArrayStack

배열을 사용하여 구현한 stack을 ArrayStack이라 칭한다. 구현한 코드는 아래와 같다.

public class ArrayStack <E> implements Stack<E>{
    public static final int CAPACITY = 1000;
    private E[] data;
    private int t = -1;

    public ArrayStack(){
        this(CAPACITY);
    }

    public ArrayStack(int capacity){
        data = (E[]) new Object[capacity];
    }

    public int size(){
        return (t+1);
    }

    public boolean isEmpty(){
        return (t == -1);
    }

    public void push(E e) throws IllegalStateException{
        if(size() == data.length)
            throw new IllegalStateException("Statck is full");
        data[++t] = e;
    }

    public E top(){
        if(isEmpty())
            return null;
        return data[t];
    }

    public E pop(){
        if(isEmpty())
            return null;
        E answer = data[t];
        data[t] = null;
        t--;
        return answer;
    }

}

linked list를 사용한 Stack, Linked Stack

linked list를 사용하여 구현한 stack을 linked stack이라 칭한다. 구현한 코드는 아래와 같다.

public class LinkedStack<E> implements Stack<E> {

    private SinglyLinkedList<E> list = new SinglyLinkedList<>();
    public LinkedStack(){}
    public int size(){
        return list.size();
    }

    public boolean isEmpty(){
        return list.isEmpty();
    }

    public void push(E element){
        list.addFirst(element);
    }

    public E top(){
        return list.first();
    }

    public E pop(){
        return list.removeFirst();
    }

}

linked list를 구현한 코드는 여기서 볼 수 있다.

'CS > Data Structure' 카테고리의 다른 글

Queue  (0) 2021.05.29
Linked List  (0) 2021.05.29
Hash  (0) 2021.05.28
Heap  (0) 2021.05.28
Tree  (0) 2021.05.28