스택(Stack) 구현해보기
배열을 구현한 MyArray 클래스를 이용하여 스택을 구현해본다. 스택의 연산에는 top에 자료를 삽입하는 push(), top-1의 자료를 반환하여 제거하는 pop(), 값을 반환만 해주는 peek() 메서드가 있다.
MyArrayStack.java
- 연결 리스트는 메모리를 그때그때 할당받기 때문에 꽉 찼는지 여부를 확인해주지 않아도 되지만 배열은 체크해주어야 한다.
package ch04;
import ch02.MyArray;
public class MyArrayStack {
MyArray arrayStack;
int top;
public MyArrayStack() {
top = 0;
arrayStack = new MyArray();
}
public MyArrayStack(int size) {
top = 0;
arrayStack = new MyArray(size);
}
public void push(int data) {
if(isfull()) { // 스택이 꽉 찼으면 에러메세지 출력
System.out.println("Stack is full");
return;
}
arrayStack.addElement(data);
top++;
}
public int pop() {
if( isEmpty() ) { // 스택이 비었으면 에러 메세지 출력
System.out.println("Error");
return MyArray.ERROR_NUM;
}
return arrayStack.removeElement(--top); // top-1 번째 요소 반환하고 제거
}
public int peek() {
if( isEmpty() ) {
System.out.println("Error");
return MyArray.ERROR_NUM;
}
return arrayStack.getElement(top-1); // top-1 번째 요소 반환만
}
public boolean isfull() {
if(top == arrayStack.ARRAY_SIZE) {
return true;
}
else return false;
}
public boolean isEmpty() {
if(top == 0) {
return true;
}
else return false;
}
public void printAll() {
arrayStack.printAll();
}
}
MyArrayStackTest.java
package ch04;
public class MyArrayStackTest {
public static void main(String[] args) {
MyArrayStack stack = new MyArrayStack(3);
stack.push(10);
stack.push(20);
stack.push(30);
stack.push(40); // 실행되지 않음
stack.printAll();
System.out.println("==================");
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.peek());
}
}
수행 결과
Stack is full
10
20
30
==================
30
20
10
'Java & Kotlin' 카테고리의 다른 글
[Java 자료구조] 큐 구현해보기 (0) | 2022.02.07 |
---|---|
[Java 자료구조] 연결 리스트 구현해보기 (0) | 2022.02.07 |
[Java 자료구조] 배열 구현해보기 (0) | 2022.02.07 |