[Data Structure] #Stack - C언어

mechaniccoder·2021년 4월 17일
0

Data Structure

목록 보기
8/12

안녕하세요. 이번 시간에는 그 동안 배운 c언어를 활용해서 스택을 구현해보겠습니다. c언어의 구조체와 동적할당을 활용해서 스택을 구현해봤습니다.

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

// 구조체를 활용해 스택에 관한 정보를 저장합시다.
typedef struct {
  int *data;
  int capacity;
  int top;
} StackType;



void init_stack(StackType *s) {
  s->top = -1;
  s->capacity = 1;
  
  // 메모리 동적할당
  s->data = (int *)malloc(s->capacity * sizeof(int));
}

int is_empty(StackType *s) {
  return s->top == -1;
}

int is_full(StackType *s) {
  return s->top == s->capacity - 1;
}

void push(StackType *s,int item) {
  if (is_full(s)) {
    s->capacity *= 2;
    
    // 스택이 가득찼을 경우 메모리를 재할당해줍니다.
    s->data = (int *)realloc(s->data, s->capacity * sizeof(int));
    s->data[++(s->top)] = item;
  } else {
    s->data[++(s->top)] = item;
  }
}

int pop(StackType *s) {
  if (is_empty(s)) {
    printf("스택이 비었습니다.");
    exit(1);
  } 
  return s->data[(s->top)--];
}

int main(void) {
  StackType *s;
  init_stack(s);

  push(s, 1);
  push(s, 2);
  push(s, 3);

  printf("%3d", pop(s));
  printf("%3d", pop(s));
  printf("%3d", pop(s));

  return 0;
}





profile
세계 최고 수준을 향해 달려가는 개발자입니다.

0개의 댓글