[c언어] 스택의 구현

스택은 후입선출(LIFO, Last In First Out) 구조를 가진 자료구조로, 데이터를 쌓아 올리고(push) 꺼내기(pop) 용이한 특징을 갖고 있습니다. C 언어를 사용하여 스택을 구현하는 방법에 대해 알아보겠습니다.

스택의 구조

스택은 배열을 기반으로 구현할 수 있습니다. 간단한 방식으로 스택을 구현해 보겠습니다.

  1. 스택의 크기를 정의합니다.
  2. 스택에 들어갈 데이터 형식을 정의합니다.
  3. 스택의 top(꼭대기)을 가리킬 변수를 정의합니다.
  4. 스택을 초기화합니다.
  5. push와 pop 함수를 작성합니다.
#define MAX_SIZE 100
typedef int Item;

typedef struct {
    Item data[MAX_SIZE];
    int top;
} Stack;

void init(Stack *stack) {
    stack->top = -1;
}

void push(Stack *stack, Item data) {
    if (stack->top < MAX_SIZE - 1) {
        stack->data[++stack->top] = data;
    } else {
        printf("스택이 가득 찼습니다.");
    }
}

Item pop(Stack *stack) {
    if (stack->top >= 0) {
        return stack->data[stack->top--];
    } else {
        printf("스택이 비었습니다.");
        return -1;
    }
}

사용 예제

int main() {
    Stack stack;
    init(&stack);
    push(&stack, 10);
    push(&stack, 20);
    push(&stack, 30);

    printf("%d\n", pop(&stack));  // 30
    printf("%d\n", pop(&stack));  // 20
    printf("%d\n", pop(&stack));  // 10
    printf("%d\n", pop(&stack));  // 스택이 비었습니다.
    return 0;
}

이처럼 C 언어를 사용하여 스택을 간단하게 구현할 수 있습니다. 스택을 활용하면 다양한 자료구조와 알고리즘을 구현할 수 있어 유용합니다.

참고 자료