Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

자료구조 스택 ADT(추상 자료형) 개념과 C++ 예제

추상 자료형(Abstract Data Type, ADT)은 값의 집합과 연산의 집합을 통해 동작이 정의되는 특수한 형태의 자료형입니다. '추상'이라는 단어가 붙는 이유는, 개발자가 이 자료형을 활용해 다양한 연산을 수행할 수 있지만 그 연산이 내부에서 어떻게 구현되고 작동하는지는 사용자에게 완전히 숨겨져 있기 때문입니다. 즉, ADT는 기본(primitive) 자료형들로 구성되지만, 실제 연산 로직은 외부로부터 감춰집니다.

스택(Stack)은 대표적인 ADT 중 하나로, LIFO(Last-In, First-Out, 후입선출) 방식으로 데이터를 관리합니다. 즉, 가장 나중에 삽입된 요소가 가장 먼저 제거됩니다. 스택 ADT에서 제공하는 주요 연산은 다음과 같습니다.

  • isFull(): 스택이 가득 찼는지 여부를 확인합니다.
  • isEmpty(): 스택이 비어 있는지 여부를 확인합니다.
  • push(x): 요소 x를 스택에 삽입합니다.
  • pop(): 스택 최상단(top)의 요소를 제거합니다.
  • peek(): 스택 최상단의 요소를 제거하지 않고 조회합니다.
  • size(): 스택에 저장된 요소의 개수를 반환합니다.

C++ 예제

#include<iostream>
#include<stack>
using namespace std;
main(){
    stack<int> stk;
    if(stk.empty()){
        cout << "Stack is empty" << endl;
    } else {
        cout << "Stack is not empty" << endl;
    }
    //스택에 요소 삽입
    stk.push(10);
    stk.push(20);
    stk.push(30);
    stk.push(40);
    stk.push(50);
    cout << "Size of the stack: " << stk.size() << endl;
    //요소를 하나씩 꺼내며 출력
    while(!stk.empty()){
        int item = stk.top(); //peek 연산과 동일
        stk.pop();
        cout << item << " ";
    }
}

실행 결과

Stack is empty
Size of the stack: 5
50 40 30 20 10

위 예제를 살펴보면, 처음에는 스택이 비어 있으므로 "Stack is empty"가 출력됩니다. 이후 10부터 50까지 다섯 개의 정수를 push한 뒤 size()로 크기를 확인하면 5가 출력됩니다. 마지막으로 while 루프를 통해 모든 요소를 pop하면, LIFO 특성에 따라 50부터 10까지 역순으로 출력되는 것을 확인할 수 있습니다. 이처럼 스택 ADT는 내부 구현(배열 또는 연결 리스트 등)과 무관하게 정해진 연산 인터페이스만으로 안전하게 사용할 수 있다는 점이 핵심 장점입니다.