자료구조 / Stack

박민수·2023년 12월 16일

자료구조

목록 보기
2/9
post-thumbnail

Stack 이란?

스택은 데이터를 저장하고 접근하는 방법 중 하나로, 후입선출(LIFO, Last In, First Out)의 원칙을 따른다. 가장 최근에 삽입된 데이터가 가장 먼저 제거되는 구조를 갖는다.


Stack의 특징

  1. LIFO 구조: 가장 최근에 추가된 항목이 가장 먼저 제거됨.

  2. 한 쪽 끝에서만 삽입과 삭제: 데이터의 삽입과 삭제는 스택의 한 쪽 끝에서만 이루어짐.

  3. 제한된 접근: 스택은 주로 push(삽입)과 pop(삭제) 두 가지 기본 연산으로 조작되며, 일반적으로 중간의 특정 원소에 직접 접근하는 것은 허용되지 않음.


Stack의 장점

  • 간결한 구현: 간단하며 구현이 쉽다.

  • 메모리 효율: 스택은 일반적으로 배열 또는 연결 리스트를 사용하며, 특정 연산들이 상수 시간에 이루어지므로 메모리를 효율적으로 활용할 수 있다.


Stack의 선언과 활용

선언 :

import java.util.Stack;
Stack<자료형> stack = new Stack<>();

사용 예시 :

import java.util.Stack;
import java.util.EmptyStackException;

public class Main {
    public static void main(String[] args) {
        // 스택 생성
        Stack<Integer> stack = new Stack<>();

        // 1. 삽입 (Push)
        stack.push(42);
        stack.push(15);
        stack.push(7);

        // 2. 삭제 (Pop)
        try {
            int deletedValue = stack.pop();
            System.out.println("Deleted Value: " + deletedValue);
        } catch (EmptyStackException e) {
            System.out.println("Stack is empty.");
        }

        // 3. 삭제 (Remove)
        try {
            int removedValue = stack.remove(1);
            System.out.println("Removed Value: " + removedValue);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Invalid index.");
        }

        // 4. 스택의 Top에 있는 원소 반환
        try {
            int topValue = stack.peek();
            System.out.println("Top Value: " + topValue);
        } catch (EmptyStackException e) {
            System.out.println("Stack is empty.");
        }

        // 5. 크기
        int size = stack.size();
        System.out.println("Stack Size: " + size);

        // 6. 스택이 비어있는가?
        boolean isEmpty = stack.isEmpty();
        System.out.println("Is Stack Empty? " + isEmpty);

        // 7. 스택 안에 해당 원소가 있는가?
        int position = stack.search(15);
        System.out.println("Position of 15: " + position);

        // 8. 스택 값 변경
        try {
            int oldValue = stack.set(0, 99);
            System.out.println("Old Value: " + oldValue);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Invalid index.");
        }

        // 9. 해당 인덱스에 존재하는 값 반환
        try {
            int valueAtIndex = stack.elementAt(2);
            System.out.println("Value at Index 2: " + valueAtIndex);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Invalid index.");
        }

        // 10. 스택 초기화 (공백 스택 만들기)
        stack.clear();
        System.out.println("Stack Cleared. Is Stack Empty? " + stack.isEmpty());
    }
}

Stack 구현

profile
머릿속에 떠도는 방대한 개발 지식

0개의 댓글