-
stack 괄호 짝 맞추기C연습 2021. 1. 17. 11:39
#include <stdio.h> #include <stdlib.h> #include <string.h> 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) { if (is_full(s)) { fprintf(stderr, "스택 공백 에러\n"); } else s->data[++(s->top)] = item; } void pop(stacktype *s) { if (is_empty(s)) { fprintf(stderr, "스택 공백 에러\n"); } else s->data[--(s->top)]; } int check_matching(stacktype *s, char *ch) { int n; n = strlen(ch); char check_ch; for (int i = 0; i < n; i++) { check_ch = ch[i]; switch (check_ch) { case '(': case '{': case '[': push(s, check_ch); break; case ')': case '}': case ']': if (is_empty(s)) { return 0; } else if ((s->data[s->top] == '(' && check_ch == ')') || (s->data[s->top] == '{' && check_ch == '}') || (s->data[s->top] = '[' && check_ch == ']')) { pop(s); } } } if (!is_empty(s)) return 0; return 1; } int main() { char ch[30]; stacktype stack_ch; scanf("%s", ch); init_stack(&stack_ch, strlen(ch)); if (check_matching(&stack_ch, ch) == 1) printf("True\n"); else if ((check_matching(&stack_ch, ch) == 0)) { printf("False\n"); } return 0; }