[C++ 자료 구조와 알고리즘] #6 자료 구조 (6) - std::stack (C++ STL container)

Programming/C++ · 2023. 5. 24. 12:16

안녕하세요. C++을 다루기 위한 기본 적인 자료 구조와 코딩 테스트 등에서 응용될 수 있는 알고리즘을 알아보는 시간을 가지겠습니다.

 

이번 게시물은 std::stack를 간단히 설명해 보려 합니다. 

 

1) 특징

std::stack는 C++ 표준 라이브러리 컨테이너(C++ STL container) 중 하나로, stack 자료 구조를 구현하는데 사용됩니다. Stack은 후입선출(LIFO, Last-In-First-Out)의 원칙에 따라 동작하는 자료 구조로 가장 마지막에 들어간 자료가 가장 먼저 나오는 특징을 가집니다.
 
이와같은 std::stack에 대한 attributes와 관련 메서드 사용 예시를 알아보겠습니다.

 

2) 코딩 테스트 활용 예시

  • 괄호 짝 맞추기: 괄호 (), [], {} 등의 짝을 맞추는 문제는 스택을 활용하여 해결할 수 있는 대표적인 유형입니다. 여는 괄호 (, [, {를 만나면 스택에 넣어주고, 닫는 괄호 ), ], }를 만나면 스택에서 빼내어 짝을 확인할 수 있습니다.
  • 수식 평가: 후위 표기법 혹은 중위 표기법으로 표현된 수식을 계산하는 과정에서 스택을 활용할 수 있습니다. 연산자와 피연산자를 스택에 넣어주고, 연산자 우선순위에 따라 계산을 진행합니다.
  • 함수 호출 스택 추적: 해당 유형은 디버깅이나 코드 분석에 유용한 기능입니다. 함수 호출 시 스택에 정보를 저장하고, 함수가 종료될 때 스택에서 제거하여 함수 호출을 확인할 수 있습니다.

 

3) 속성 (Attributes)

std::stack는 <stack> 헤더를 포함해서 사용할 수 있습니다.

 

우선 다음과 같은 std::stack의 주요 속성과 멤버 함수를 통해 해당 자료 구조를 활용하는 방법을 자세하게 알아보겠습니다.

 

  • push(element)
    : 스택의 맨 위에 요소를 추가합니다.
  • pop()
    : 스택의 맨 위에 있는 요소를 제거합니다.
  • top()
    : 스택의 맨 위에 있는 요소를 반환합니다. 제거하지 않고 조회만 할 때 사용됩니다.
  • empty()
    : 스택이 비어 있는지 여부를 확인합니다. 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • size()
    : 스택에 저장된 요소의 개수를 반환합니다.

 

4) 속성 사용 예시

다음은 std::stack의 속성 사용 예시입니다.

 

  • push(element)
    : 스택의 맨 위에 요소를 추가합니다. 
std::stack<int> stack;
stack.push(10);
stack.push(20);
stack.push(30);
  • pop()
    : 스택의 맨 위에 있는 요소를 제거합니다. 
std::stack<int> stack;
stack.push(10);
stack.push(20);
stack.push(30);
stack.pop();

 

  • top()
    : 스택의 맨 위에 있는 요소를 반환합니다. 제거하지 않고 조회만 할 때 사용됩니다. 
std::stack<int> stack;
stack.push(10);
stack.push(20);
stack.push(30);
int topElement = stack.top();
  • empty()
    : 스택이 비어 있는지 여부를 확인합니다. 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 
std::stack<int> stack;
bool isEmpty = stack.empty();
  • size()
    : 스택에 저장된 요소의 개수를 반환합니다.
std::stack<int> stack;
stack.push(10);
stack.push(20);
stack.push(30);
int stackSize = stack.size();

 

 

반응형