-
#include <stdio.h> #include <stdlib.h> #include <string.h> #define UF "UNDERFLOW" #define OF "OVERFLOW" /* 경고창을 저장하는 변수 생성 typedef struct { char er_conuter[10][100]; char *of = 'overflow'; char *uf = 'underflow'; } error; 첫 줄 입력 -> 스택의 크기 결정 다음 줄 입력(n) -> push or pop 결정 if push if (n == 0) 다음줄에 값을 입력 후 스택에 넣는다. else (n == 1) if (if_empty면) underflow 저장?? 다음줄에 값을 뺸다 else braak; 데이터 입력이 모두 끝난 후 스택의 상태 (top to bottom) 출력한다. */ typedef int element; typedef struct { element *data; int capacity; int top; } stacktype; void init_stack(stacktype *s,int n) { s->top = -1; s->capacity = n; s->data = (element *)malloc(s->capacity * sizeof(element)); } int is_empty(stacktype *s) { return (s->top == -1); } int is_full(stacktype *s) { return (s->top == (s->capacity - 1)); } void push(stacktype *s, element item, stacktype *error) { if (is_full(s)) { if (is_full(error) != 1) { error->data[++(error->top)] = 1; return; } } else s->data[++(s->top)] = item; } void pop(stacktype *s, stacktype *error) { if (is_empty(s)) { if (is_full(error) != 1) { error->data[++(error->top)] = 0; return; } } else s->data[(s->top)]--; } void error_printf(stacktype *error) { for (int m = 0; m <= error->top; m++) { if (error->data[m] == 1) printf(OF"\n"); else if (error->data[m] == 0) printf(UF"\n"); } } void stack_print(stacktype *s) { for (int i = 0; i <= s->top; i++) { if (i <= s->top) { printf("%d ", s->data[i]); } } } int main() { int n = 0; stacktype s; stacktype error; scanf_s("%d", &n); init_stack(&s, n); init_stack(&error, n); for (int i = 0; i < n; i++) { int m = 0; int r = 0; scanf_s("%d", &m); if (m == 0) { scanf_s("%d", &r); push(&s, r, &error); } else if (m == 1) { pop(&s, &error); } else if (n != 1 && n != 0) break; } error_printf(&error); stack_print(&s); return 0; }