CS/자료구조

자료구조 C언어 스택(Stack) 예제

컨설턴트X 2023. 5. 4. 14:53
728x90
반응형

아래는 C 언어로 구현한 스택 예제입니다.

#include <stdio.h>
#include <stdlib.h>

#define MAX_STACK_SIZE 100 // 스택의 최대 크기를 정의합니다.

typedef struct {
  int stack[MAX_STACK_SIZE]; // 스택을 배열로 구현합니다.
  int top; // 스택의 가장 위에 있는 데이터의 인덱스를 저장하는 변수입니다.
} Stack;

// 스택 초기화 함수입니다.
void init_stack(Stack *s) {
  s->top = -1; // 가장 위에 있는 데이터의 인덱스를 -1로 초기화합니다.
}

// 스택이 꽉 차 있는지 확인하는 함수입니다.
int is_full(Stack *s) {
  return s->top == MAX_STACK_SIZE - 1; // 스택이 꽉 차 있다면 1을 반환합니다. 아니라면 0을 반환합니다.
}

// 스택이 비어 있는지 확인하는 함수입니다.
int is_empty(Stack *s) {
  return s->top == -1; // 스택이 비어 있다면 1을 반환합니다. 아니라면 0을 반환합니다.
}

// 스택에 데이터를 추가하는 함수입니다.
void push(Stack *s, int item) {
  if (is_full(s)) { // 스택이 꽉 차 있다면
    printf("Error: Stack is full\n"); // 오류 메시지를 출력합니다.
    return;
  }
  s->top++; // 스택의 가장 위에 있는 데이터의 인덱스를 증가시킵니다.
  s->stack[s->top] = item; // 스택에 데이터를 추가합니다.
}

// 스택에서 데이터를 삭제하고 반환하는 함수입니다.
int pop(Stack *s) {
  if (is_empty(s)) { // 스택이 비어 있다면
    printf("Error: Stack is empty\n"); // 오류 메시지를 출력합니다.
    return -1; // -1을 반환합니다.
  }
  int item = s->stack[s->top]; // 스택의 가장 위에 있는 데이터를 item 변수에 저장합니다.
  s->top--; // 스택의 가장 위에 있는 데이터의 인덱스를 감소시킵니다.
  return item; // 저장된 데이터를 반환합니다.
}

int main() {
  Stack s;
  init_stack(&s); // 스택을 초기화합니다.

  push(&s, 1); // 스택에 1을 추가합니다.
  push(&s, 2); // 스택에 2를 추가합니다.
  push(&s, 3); // 스택에 3을 추가합니다.

  while (!is_empty(&s)) { // 스택이 비어 있지 않다면
    int item = pop(&s); // 스택에서 데이터를 삭제하고 반환합니다.
    printf("%d ", item); // 반환된 데이터를 출력합니다.
  }

  return 0; // 프로그램을 종료합니다.
}



이 코드는 기본적인 스택의 연산들(push, pop, is_full, is_empty)을 구현하고 있습니다. 스택의 크기는 `MAX_STACK_SIZE`로 정의되어 있으며, 스택은 `Stack` 구조체로 표현됩니다. `init_stack()` 함수를 사용하여 스택을 초기화하고, `push()` 함수를 사용하여 스택에 새로운 요소를 추가할 수 있습니다. 마찬가지로, `pop()` 함수를 사용하여 스택에서 가장 위에 있는 요소를 제거하고 반환할 수 있습니다. `is_full()` 함수와 `is_empty()` 함수를 사용하여 스택이 가득 차있는지, 혹은 비어있는지를 확인할 수 있습니다.

위 예제 코드는 스택에 1, 2, 3을 차례로 추가한 뒤, `pop()` 함수를 반복적으로 호출하여 스택의 모든 요소를 출력합니다. 출력 결과는 다음과 같습니다.

```
3 2 1
```

728x90
반응형