C/C++ 자료 구조

Stack 자료 구조

Stack은 top에서만 push, pop, peek합니다.

Stack 자료 구조이란?

Stack은 top에서만 push, pop, peek합니다.

Last-in-first-out 연산을 구현합니다.

중요한 점

  • 연산 전에 invariant를 정의하세요.
  • 비어 있음, 가득 참, 할당 실패를 처리하세요.
  • 시간 복잡도와 ownership을 함께 평가하세요.

C와 C++ 코드 예제

C
실행 →
main.c
#include <stdio.h>

typedef struct {
    int data[8];
    int size;
} Stack;

int push(Stack *stack, int value) {
    if (stack->size == 8) return 0;
    stack->data[stack->size++] = value;
    return 1;
}

int pop(Stack *stack, int *value) {
    if (stack->size == 0) return 0;
    *value = stack->data[--stack->size];
    return 1;
}

int main(void) {
    Stack stack = {{0}, 0};
    int value;
    push(&stack, 10);
    push(&stack, 20);
    pop(&stack, &value);
    printf("%d\n", value);
}
예상 출력
20
C++
실행 →
main.cpp
#include <iostream>
#include <stack>

int main() {
    std::stack<int> values;
    values.push(10);
    values.push(20);
    std::cout << values.top() << '\n';
    values.pop();
}
예상 출력
20

C와 C++ 비교

고정 용량 C 버전은 overflow와 underflow를 검사하고 std::stack은 내부 container로 용량을 관리합니다.

C

구조체와 연산이 분리되고 할당이 명시적입니다.

C++

Class와 container가 invariant와 resource를 관리합니다.

연습 문제

두 버전을 실행하고 수정하여 각 언어의 보장을 관찰하세요.

  • 빈 상태와 용량 경계를 테스트하세요.
  • Cleanup을 구현하고 leak을 확인하세요.
  • Standard container와 비교하세요.