[자료구조/Java] Stack 클래스

현굥·2024년 8월 16일

자료구조

목록 보기
2/3

Stack

특징

  • LIFO : Last In First Out
    즉, 가장 나중에 들어온 데이터가 가장 먼저 빠져나가는 후입선출 구조로 되어있습니다.
  • 단방향 입출력 구조 : 데이터의 들어오는 방향과 나가는 방향이 같습니다.
  • 데이터를 하나씩만 넣고 뺄 수 있습니다.
  • DFS에 이용됩니다.

Java에서 Stack 선언

자바에서 Stack 은 아래와 같이 선언할 수 있습니다.

Stack<Element> stack = new Stack<>();

Stack 클래스 메서드

  • 스택은 add()메서드 또는 push()메서드를 통해 값을 추가할 수 있습니다.
    추가된 메서드는 pop()메서드를 사용해서 하나씩 뺼 수 있습니다.

Push(T t)

데이터를 스택에 추가하고, 해당 값을 반환합니다.

Peek()

스택의 마지막 요소를 반환하며, 스택에는 변화를 주지 않습니다. 즉, 스택에 가장 먼저 사용될 요소를 반환합니다. 만약, 스택이 비어있을 경우 peek()메서드 호출 시 NoSuchElementException예외가 발생합니다.

pop()

스택의 마지막 요소를 제거함과 동시에 해당 값을 반환합니다.

empty()

스택이 비어있는지의 여부를 반환합니다. 비어있을 경우, true 비어있지 않을 경우 false를 반환합니다.

메서드의 인자를 스택에서 검색해서 해당 위치를 반환합니다. 만약 해당인자가 여러 개일 경우, 마지막 위치를 반환합니다. 여기서 위치는 인덱스가 아닌 빠져나오는 순서를 뜻합니다.
찾는 값이 스택에 없을 경우 , -1를 반환합니다.

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        // Stack 선언
        Stack<Integer> stack = new Stack<>();

        // Push() 메서드를 이용해 스택에 값 추가
        stack.push(10);
        stack.push(20);
        stack.push(30);
        System.out.println("Stack after push operations: " + stack);

        // Peek() 메서드를 이용해 스택의 마지막 요소 조회 (스택에서 제거하지 않음)
        System.out.println("Peek at top element: " + stack.peek());
        System.out.println("Stack after peek operation: " + stack);

        // Pop() 메서드를 이용해 스택의 마지막 요소 제거 및 반환
        System.out.println("Pop the top element: " + stack.pop());
        System.out.println("Stack after pop operation: " + stack);

        // Empty() 메서드를 이용해 스택이 비어있는지 확인
        System.out.println("Is the stack empty? " + stack.empty());

        // Search() 메서드를 이용해 특정 요소의 위치 찾기
        int position = stack.search(20);
        if (position != -1) {
            System.out.println("Element 20 found at position (from top): " + position);
        } else {
            System.out.println("Element 20 not found in the stack.");
        }

        // 마지막으로 스택이 비어있는지 확인
        stack.pop(); // 남은 요소 제거
        stack.pop(); // 남은 요소 제거
        System.out.println("Is the stack empty after popping all elements? " + stack.empty());
    }
}

0개의 댓글