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와 비교하세요.