1. 소스코드

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

typedef struct stack {
    int size;
    int top;
    int* array;
} stack;

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

int is_full(stack *s) {
    return s->top == s->size-1;
}

void push(int element, struct stack* s) {
    if(is_full(s)) {
        printf("포화 상태\\n");
    } else {
        s->array[++(s->top)] = element;
    }
}

void pop(stack* s) {
    if(is_empty(s)) {
        printf("없는 상태\\n");
    } else {
        printf("뽑힌 원소의 값 : %d\\n", s->array[(s->top)--]);
    }
}

// 스택 생성 및 초기화
void createStack(stack *s, int size) {
    s->top = -1;
    s->array = (int *)malloc(size * sizeof(int));
    s->size = size;
}

void peek(stack *s) {
    if(is_full(s)) {
        printf("포화 상태\\n");
    }
    else {
        printf("제일 마지막에 들어온 값 : %d\\n", s->array[s->top]);
    }
}

void print_stack(stack *s) {
    for(int i=s->top; i!=-1; i--) {
        printf("%d -> ", s->array[i]);
    }
    printf("\\n");
}

int main() {
    // 구조체 사이즈만큼 동적 메모리 할당
    stack* st = (stack *)malloc(sizeof(stack)); 
    int size;

    printf("스택 사이즈를 입력해주세요 >> ");
    scanf("%d", &size);

    createStack(st, size);
    for(int i=1; i<=10; i++) {
        push(i, st);
    }

    peek(st);

    for(int i=0; i<3; i++) {
        pop(st);
    }

    print_stack(st);

    free(st->array);
    free(st);

    return 0;
}

2. 실행결과

Untitled

3. 고찰

없습니다