ABOUT ME

  • 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;
    }

    'C연습' 카테고리의 다른 글

    이진 검색 트리  (0) 2021.01.17
    원형큐_소수고리  (0) 2021.01.17
    연결 리스트  (0) 2021.01.17
    stack  (0) 2021.01.17
    수열의 합  (0) 2021.01.17

    댓글

Designed by Tistory.