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

C++ STL을 활용한 스택(Stack) 구현 프로그램

스택(Stack)은 데이터의 삽입과 삭제가 정해진 순서에 따라 수행되는 선형(linear) 자료구조입니다. 이 순서는 LIFO(Last In First Out, 후입선출) 또는 FILO(First In Last Out, 선입후출) 방식으로 설명되며, 쉽게 말해 가장 나중에 들어간 데이터가 가장 먼저 꺼내지는 구조입니다.

STL stack의 주요 멤버 함수

C++ 표준 라이브러리(STL)의 stack 컨테이너 어댑터는 다음과 같은 핵심 멤버 함수를 제공합니다.

  • s.size() : 스택에 저장된 요소의 개수를 반환합니다.
  • s.push(x) : 스택의 맨 위에 요소 x를 삽입합니다.
  • s.pop() : 스택의 맨 위 요소를 제거합니다. (반환값 없음)
  • s.top() : 스택 최상단 요소에 대한 참조를 반환합니다.
  • s.empty() : 스택이 비어 있으면 true를 반환합니다.

알고리즘

시작
   스택(stack) 컨테이너를 선언한다.
   사용자의 선택에 따라 입력을 받는다.
   switch 문 안에서 아래 함수들을 호출한다:
      s.size()  → 스택의 크기를 반환한다.
      s.push()  → 스택에 요소를 삽입한다.
      s.pop()   → 스택에서 값을 꺼내 제거한다.
      s.top()   → 스택 최상단 요소의 참조를 반환한다.
끝.

예제 코드

아래 예제는 메뉴 기반으로 스택의 삽입, 삭제, 크기 확인, 최상단 요소 조회를 수행하는 콘솔 프로그램입니다.

#include <iostream>
#include <stack>
#include <cstdlib>
using namespace std;

int main() {
    stack<int> s;
    int c, i;
    while (1) {
        cout<<"1.스택 크기 확인"<<endl;
        cout<<"2.스택에 요소 삽입"<<endl;
        cout<<"3.스택에서 요소 삭제"<<endl;
        cout<<"4.스택의 최상단 요소 확인"<<endl;
        cout<<"5.종료"<<endl;
        cout<<"메뉴를 선택하세요: ";
        cin>>c;
        switch(c) {
            case 1:
                cout<<"스택의 크기: "<<s.size()<<endl;
                break;
            case 2:
                cout<<"삽입할 값을 입력하세요: ";
                cin>>i;
                s.push(i);
                break;
            case 3:
                if (!s.empty()) {
                    i = s.top();   // pop()은 값을 반환하지 않으므로 top()으로 먼저 확인
                    s.pop();
                    cout<<i<<" 삭제됨"<<endl;
                } else {
                    cout<<"스택이 비어 있습니다."<<endl;
                }
                break;
            case 4:
                if (!s.empty()) {
                    cout<<"스택의 최상단 요소: "<<s.top()<<endl;
                } else {
                    cout<<"스택이 비어 있습니다."<<endl;
                }
                break;
            case 5:
                exit(1);
            default:
                cout<<"잘못된 선택입니다."<<endl;
        }
    }
    return 0;
}

실행 결과

1.스택 크기 확인
2.스택에 요소 삽입
3.스택에서 요소 삭제
4.스택의 최상단 요소 확인
5.종료
메뉴를 선택하세요: 1
스택의 크기: 0
...(이하 메뉴 반복)...
메뉴를 선택하세요: 2
삽입할 값을 입력하세요: 1
메뉴를 선택하세요: 2
삽입할 값을 입력하세요: 7
메뉴를 선택하세요: 2
삽입할 값을 입력하세요: 6
메뉴를 선택하세요: 2
삽입할 값을 입력하세요: 10
메뉴를 선택하세요: 2
삽입할 값을 입력하세요: 4
메뉴를 선택하세요: 1
스택의 크기: 5
메뉴를 선택하세요: 3
4 삭제됨
메뉴를 선택하세요: 4
스택의 최상단 요소: 10
메뉴를 선택하세요: 5

Exit code: 1

핵심 포인트

  • pop()은 단순히 요소를 제거만 하고 값을 반환하지 않으므로, 삭제되는 값을 확인하려면 top()을 먼저 호출해야 합니다.
  • 빈 스택에 대해 top()이나 pop()을 호출하면 정의되지 않은 동작(undefined behavior)이 발생할 수 있으므로, 반드시 empty()로 검사한 뒤 사용하는 것이 안전합니다.
  • 프로그램은 exit(1)로 종료되며, 이 경우 운영체제에 종료 코드 1이 반환됩니다.