C연습
stack 괄호 짝 맞추기
CMS419
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;
}