[java] 자바 스택 구현시 배열 사용하기
스택은 데이터를 일시적으로 저장하는 자료구조로, 후입선출(LIFO) 방식으로 동작합니다. 자바에서 스택을 구현할 때 배열을 사용할 수 있습니다. 이번 글에서는 자바 배열을 이용하여 스택을 구현하는 방법에 대해 알아보겠습니다.
배열을 이용한 스택 구현 방법
public class Stack {
private int[] array; // 스택을 저장할 배열
private int top; // 스택의 가장 상단 위치
// 스택 생성자
public Stack(int size) {
array = new int[size];
top = -1; // 스택이 비어있음을 나타내기 위해 -1로 초기화
}
// 스택이 비어있는지 확인하는 메소드
public boolean isEmpty() {
return top == -1;
}
// 스택이 가득 차 있는지 확인하는 메소드
public boolean isFull() {
return top == array.length - 1;
}
// 스택에 데이터를 추가하는 메소드
public void push(int data) {
if (isFull()) {
System.out.println("스택이 가득 찼습니다.");
} else {
array[++top] = data;
System.out.println(data + "를 스택에 추가했습니다.");
}
}
// 스택에서 데이터를 꺼내는 메소드
public int pop() {
if (isEmpty()) {
System.out.println("스택이 비어있습니다.");
return -1;
} else {
int data = array[top--];
System.out.println(data + "를 스택에서 꺼냈습니다.");
return data;
}
}
// 스택의 가장 상단에 있는 데이터를 확인하는 메소드
public int peek() {
if (isEmpty()) {
System.out.println("스택이 비어있습니다.");
return -1;
} else {
System.out.println("스택의 가장 상단 데이터는 " + array[top] + "입니다.");
return array[top];
}
}
// 스택의 모든 데이터를 출력하는 메소드
public void printStack() {
if (isEmpty()) {
System.out.println("스택이 비어있습니다.");
} else {
System.out.println("스택의 모든 데이터를 출력합니다:");
for (int i = top; i >= 0; i--) {
System.out.println(array[i]);
}
}
}
}
스택 사용 예시
public class Main {
public static void main(String[] args) {
Stack stack = new Stack(5);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.printStack();
stack.pop();
stack.pop();
stack.printStack();
}
}
위의 예시 코드에서는 크기가 5인 스택을 생성하고, 1부터 5까지의 데이터를 순차적으로 스택에 추가한 후, pop 연산을 수행한 결과를 출력합니다. 2개의 데이터를 pop 연산한 후에는 데이터 3, 2, 1이 스택에 남아있음을 확인할 수 있습니다.
이렇게 배열을 이용하여 자바에서 스택을 구현할 수 있습니다. 스택은 데이터를 임시로 저장하거나 역추적이 필요한 상황에서 유용한 자료구조이므로, 응용 프로그램에서 활용할 수 있는 다양한 경우가 있습니다.
참고 자료
- 자바 프로그래밍: 스택(Stack) [https://coding-factory.tistory.com/244]