[java] 자바에서 정적 스택 구현하기
스택은 데이터를 한쪽 끝에서만 추가하거나 제거할 수 있는 자료구조입니다. 이번에는 자바에서 정적 스택을 구현하는 방법에 대해 알아보겠습니다.
정적 스택 구현하기
public class StaticStack {
private int maxSize; // 스택의 최대 크기
private int[] stackArray; // 스택을 저장할 배열
private int top; // 스택의 맨 위를 가리키는 인덱스
// 생성자
public StaticStack(int size) {
maxSize = size;
stackArray = new int[maxSize];
top = -1;
}
// 스택이 비어있는지 확인하는 메소드
public boolean isEmpty() {
return (top == -1);
}
// 스택이 가득 찼는지 확인하는 메소드
public boolean isFull() {
return (top == maxSize - 1);
}
// 스택에 데이터를 추가하는 메소드
public void push(int data) {
if (isFull()) {
System.out.println("스택이 가득 찼습니다.");
} else {
stackArray[++top] = data;
}
}
// 스택에서 데이터를 제거하고 반환하는 메소드
public int pop() {
if (isEmpty()) {
System.out.println("스택이 비어있습니다.");
return -1;
} else {
return stackArray[top--];
}
}
// 스택의 맨 위에 있는 데이터를 반환하는 메소드
public int peek() {
return stackArray[top];
}
}
예시 사용법
public class Main {
public static void main(String[] args) {
StaticStack stack = new StaticStack(5);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println(stack.pop()); // 5
System.out.println(stack.pop()); // 4
System.out.println(stack.peek()); // 3
}
}
위의 예시 코드에서는 정적 스택을 생성하고 push
메소드로 데이터를 추가하고, pop
메소드로 데이터를 제거하고 반환하며, peek
메소드로 맨 위에 있는 데이터를 확인하는 방법을 보여줍니다.
정적 스택을 사용할 때는 스택의 크기에 주의해야 합니다. 만약 스택이 가득 차 있는 상태에서 데이터를 추가하려고 하면 오류가 발생합니다. 마찬가지로 스택이 비어있는 상태에서 데이터를 제거하려고 하면 역시 오류가 발생합니다.
더 많은 메소드를 추가하거나 스택을 다양하게 활용하려면 해당 클래스를 수정하여 사용할 수 있습니다.
참고 자료
- Data Structures and Algorithms Made Easy in Java: Data Structure and Algorithmic Puzzles, Second Edition by Narasimha Karumanchi
- Introduction to the Design and Analysis of Algorithms by Anany Levitin