자료구조 중 스택(Stack)이란 무엇인지 알아보자
스택은 LIFO(Last-In-First-Out) 원리를 따르는 선형 데이터 구조
요소를 임시로 저장하는 데 사용되며
가장 최근에 추가된 요소가 가장 먼저 제거
스택에서 이루어지는 작업은 푸시 & 팝
push: 스택의 맨 뒤에 추가
pop: 스택의 맨 앞 제거
import java.util.ArrayList;
public class Stack<T> {
private ArrayList<T> elements;
public Stack() {
elements = new ArrayList<T>();
}
public void push(T element) {
elements.add(element);
}
public T pop() {
if (elements.isEmpty()) {
throw new IllegalStateException("Stack is empty");
}
return elements.remove(elements.size() - 1);
}
public boolean isEmpty() {
return elements.isEmpty();
}
public int size() {
return elements.size();
}
}
스택 예시:
1. 글자 적다가 Ctrl + Z (실행취소할 때)
2. 컴퓨터에서 메모리 관리 관련 (잘 모르겠음..)
Stack은 최근에 입력된 마지막 데이터가 가장 먼저 출력되는 형식으로 데이터를 관리함
스택에 데이터를 삽입하는 push()
스택에서 데이터를 제거하는 pop()
두 가지가 효율적으로 작동
예를 들어,
스택에 [1, 2, 3] 이라는 데이터가 있을 때
push(4)를 수행하면 [1, 2, 3, 4] 가 되고,
이후 pop()을 수행하면 4가 제거되고 [1, 2, 3] 이 됨
Stack은 데이터를 제거할 때 가장 최근에 입력된 데이터부터 제거하는 구조이므로,
스택에서 데이터를 제거할 때 마지막에 입력된 데이터부터 제거하는 것이 효율적임
또 Stack은 마지막에 입력된 데이터부터 검색할 수 있어 데이터를 저장하고 검색하는데 꽤 용이함
하지만
공간 낭비: Stack은 데이터를 위에서 아래로 계속 저장하기 때문에 공간이 낭비될 수 있음
데이터 검색 어려움: LIFO의 특성으로 마지막에 저장한 데이터부터 검색할 수는 있지만, 중간의 데이터에 접근하기 어려움
데이터 삭제 복잡: Stack은 데이터를 저장하고 검색하는 것이 용이하지만, 데이터의 삭제는 까다로움
만약 가장 아래에 저장된 데이터를 삭제하고 싶다면 맨 위의 데이터까지 검색되야함
이상 스택에 대해 알아보았습니다.!