[c언어] 스택

스택은 후입선출(LIFO, Last In First Out) 방식으로 데이터를 저장하고 처리하는 선형 자료 구조입니다. 새로운 데이터는 항상 스택의 맨 위에 추가되고, 데이터를 꺼낼 때도 마지막에 추가된 데이터가 먼저 꺼내지는 특징을 가지고 있습니다.

스택의 주요 특징

  1. 순서: 데이터가 추가된 순서를 보존합니다.
  2. 연산: 데이터의 추가와 삭제가 맨 위에서만 이루어집니다.
  3. 구현: 배열이나 연결 리스트를 사용하여 구현될 수 있습니다.

스택의 연산

주요 연산으로는 다음과 같은 것들이 있습니다:

스택의 예시

#include <stdio.h>
#define MAX_SIZE 5

typedef struct Stack {
  int arr[MAX_SIZE];
  int top;
} Stack;

void push(Stack *stack, int data) {
  if (stack->top < MAX_SIZE - 1) {
    stack->top++;
    stack->arr[stack->top] = data;
    printf("%d이(가) 스택에 추가되었습니다.\n", data);
  } else {
    printf("스택이 가득 찼습니다.\n");
  }
}

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

int main() {
  Stack stack = {{0}, -1};
  push(&stack, 10);
  push(&stack, 20);
  push(&stack, 30);
  printf("%d를 꺼냈습니다.\n", pop(&stack));
  printf("%d를 꺼냈습니다.\n", pop(&stack));
  printf("%d를 꺼냈습니다.\n", pop(&stack));
  printf("%d를 꺼냈습니다.\n", pop(&stack));
  return 0;
}

위의 예제는 c언어로 스택을 구현한 것입니다.

참고 자료