public class ArrayStack {
private int top;
private int maxSize;
private Object[] stackArray; // Object == 어떤 클래스든 다 담을 수 있음
// 생성자 (배열 크기 -> 배열 초기화, top은 비어있음)
public ArrayStack (int maxSize) {
this.maxSize = maxSize;
stackArray = new Object[maxSize];
top = -1;
}
// 스택 공간이 비어 있는지
public boolean isEmpty() {
return (top == -1); // -1이면 true고, -1이 아니면 false
}
// 스택 공간이 가득 차 있는지
public boolean isFull() {
return (top == maxSize -1); // 배열 사이즈가 10이면 top은 0~9번지 -> 9
}
// 추가 -- push
public void push(Object item) {
if (isFull()) {
System.out.println("스택 공간이 가득 차 있음");
return; // break
}
top++; // top은 -1 에서 0
stackArray[top] = item; // 0번지에 item 삽입
}
// 삭제 -- pop
public Object pop() { // 삭제된 데이터를 Return -- 반환타입 Object
Object item = peek(); // top 위치의 아이템을 일단 확인
if (item == null) {
System.out.println("스택 공간이 비어 있음");
return null;
}
top--; // top은 n에서 n-1
return item;
}
// top(최상단)에 해당되는 데이터 (반환)
public Object peek() {
if (isEmpty()) {
System.out.println("스택 공간이 비어 있음");
return null;
}
return stackArray[top];
}
}
메인함수 코드
public class MainClass {
public static void main(String[] args) {
/*
Stack
First in last out = FILO
push, pop, peek
isEmpty, isFull
*/
// 크기가 5로 Stack 초기화
ArrayStack stack = new ArrayStack(5);
// 1번째 요소 삽입
String str = "AAA";
stack.push(str);
// 2번째 요소 삽입
str = "BBB";
stack.push(str);
// 3번째 요소 삽입
str = "CCC";
stack.push(str);
// 최상단 데이터 확인
String peek = (String) stack.peek();
System.out.println(peek);
// 최상단 데이터 삭제
stack.pop();
// 최상단 데이터 확인
peek = (String) stack.peek();
System.out.println(peek);
}
}