Software Development

자료구조 중 스택(Stack)이란 무엇인지 알아보자

DR BOY 2023. 1. 31. 17:20

스택은 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은 데이터를 저장하고 검색하는 것이 용이하지만, 데이터의 삭제는 까다로움
만약 가장 아래에 저장된 데이터를 삭제하고 싶다면 맨 위의 데이터까지 검색되야함

 

 

이상 스택에 대해 알아보았습니다.!