안녕하세요. 이번 시간에는 그 동안 배운 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;
}