스택 인터페이스
/**
* @author andpact
* @param <E> the type of elements in this stack
*/
public interface StackInterface<E> {
/**
* 지정한 요소를 스택에 삽입합니다.
* @param e 삽입할 요소
*/
void push(E e);
/**
* 최상단의 요소를 반환합니다. 해당 요소는 반환 후 삭제됩니다.
* @return 반환할 요소
*/
E pop();
/**
* 모든 요소를 제거합니다.
*/
void clear();
/**
* 최상단의 요소를 반환합니다.
* @return 반환할 요소
*/
E peek();
/**
* 스택이 비었는지 여부를 확인합니다.
* @return 요소 포함 여부
*/
boolean isEmpty();
/**
* 요소의 개수를 반환합니다.
* @return 요소의 개수
*/
int size();
}
생성자
public class Stack<E> implements StackInterface<E> {
private E[] arr;
private static final int DEFAULT_CAPACITY = 10;
private int size;
public Stack() {
arr = (E[]) new Object[DEFAULT_CAPACITY];
size = 0;
}
}
CREATE 메서드
@Override
public void push(E e) {
resize(); // 요소 삽입 전 배열 크기 확인
arr[size] = e;
size++;
}
READ 메서드
@Override
public E peek() {
return arr[size - 1];
}
@Override
public E pop() {
E element = arr[size - 1];
arr[size - 1] = null;
size--;
resize(); // 요소 삽입 후 배열 크기 확인
return element;
}
DELETE 메서드
@Override
public void clear() {
arr = (E[]) new Object[DEFAULT_CAPACITY];
size = 0;
}
기타 메서드
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public int size() {
return size;
}
private void resize() {
if (size == arr.length)
arr = Arrays.copyOf(arr, arr.length * 2);
else if (size < arr.length / 2)
arr = Arrays.copyOf(arr, Math.max(DEFAULT_CAPACITY, arr.length / 2));
}
Leave a comment