[자료구조] 스택 (Stack)

2024. 5. 23. 13:44Backend/Data Structure

728x90

🎯 스택 (Stack)

 

1. 스택이란 무엇일까요?

스택은 LIFO(Last In, First Out) 방식을 기반으로 데이터를 쌓아 관리하는 자료 구조입니다. 쉽게 말해,

접시를 쌓듯이 데이터를 차곡차곡 쌓아 올리는 방식이라고 생각하면 됩니다.

스택의 가장 큰 특징은 마지막에 들어온 데이터가 가장 먼저 나온다는 것입니다. 마치

음식 쟁반에서 가장 위에 있는 음식부터 먹는 것과 같다고 볼 수 있습니다.

이러한 특징 때문에 선택적 삽입 및 추출이 불가능하며, 처리 순서가 중요한 작업에 적합하게 활용됩니다.

2. 스택의 주요 특징

  • LIFO (Last In, First Out): 마지막에 들어온 데이터가 가장 먼저 나옵니다.
  • 선택적 삽입 및 추출 불가능: 이미 저장된 데이터를 건너뛰고 특정 데이터를 삽입하거나 추출할 수 없습니다.
  • 처리 순서 보장: 데이터가 입력된 순서대로 처리되지 않고, 마지막에 들어온 데이터부터 처리됩니다.

3. 스택의 주요 연산

스택을 사용하기 위해서는 다음과 같은 주요 연산들을 이해해야 합니다.

  • push(item): 스택의 가장 위에 item 데이터를 추가합니다. 마치 접시를 쌓듯이 데이터를 쌓아 올리는 연산입니다.
  • pop(): 스택의 가장 위에 있는 데이터를 꺼내서 반환합니다. 마치 가장 위에 있는 접시를 내려오듯이 데이터를 꺼내는 연산입니다.
  • peek(): 스택의 가장 위에 있는 데이터를 확인합니다. 꺼내지는 않고 그 값을 조사하는 연산입니다. 마치 가장 위에 있는 접시의 음식을 확인하는 것과 같습니다.
  • isEmpty(): 스택이 비어있는지 확인하는 연산입니다.
  • size(): 스택에 저장된 데이터의 개수를 반환하는 연산입니다.
MyStack stack = new MyStack();

stack.push(1);
stack.push(2);
stack.push(3);

System.out.println(stack); // [1, 2, 3] 출력
System.out.println(stack.peek()); // 3 출력
System.out.println(stack.pop()); // 3 출력 하고 stack에서 3삭제
System.out.println(stack); // [1, 2] 출력
System.out.println(stack.pop()); // 2 출력
System.out.println(stack.pop()); // 1 출력

System.out.println(stack.isEmpty()); // true 출력

 

4. 스택의 활용 예시

스택은 다양한 분야에서 활용되고 있습니다. 대표적인 예시로는 다음과 같은 것들이 있습니다.

  • 브라우저 히스토리 관리: 웹 브라우저에서 뒤로 가기/앞으로 가기 버튼을 사용할 때 방문했던 페이지들을 스택을 사용하여 관리합니다.
  • 계산식 처리: 수식 계산 시, 중위 표기법을 후위 표기법으로 변환하고 계산하는 과정에서 스택을 사용합니다.
  • 표현식 평가: 괄호와 연산자의 우선순위를 처리하는 데 스택을 사용합니다. 예를 들어, 3 + 4 * 2를 계산할 때, 먼저 4와 2를 곱한 후 3을 더하는 순서로 계산해야 합니다. 이러한 계산 순서를 스택을 이용하여 처리합니다.
  • 함수 호출 관리: 함수 호출 시, 각 함수의 지역 변수와 임시 데이터를 저장하는 데 스택을 사용합니다.
  • 텍스트 편집기의 되돌리기/다시 실행 기능: 텍스트 편집기에서 이전 작업을 취소하거나 다시 실행할 때 스택을 사용하여 이전 작업들을 저장하고 관리합니다.

'Backend > Data Structure' 카테고리의 다른 글

[자료구조] 연결리스트 (LinkedList)  (0) 2024.05.26
[자료구조] HashMap  (0) 2024.05.26
[자료구조] 큐 (Queue)  (0) 2024.05.23
[자료구조] 배열(Array)  (0) 2024.05.23
[자료구조] 자료구조 소개  (0) 2024.05.23