공부/자료구조

스택 괄호검사

choryDev 2019. 5. 24. 11:10
수업시간에 배운 내용입니다^^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <stdio.h>
#include <string.h>
#define MAX_STACK_SIZE 100
#define TRUE 1
#define FALSE 0
 
typedef int element;
 
typedef struct {
    element stack[MAX_STACK_SIZE];
    int top;
} StackType;
 
void init(StackType *s){
    s->top = -1;
};
 
int is_full(StackType *s){
    if (s->top == (MAX_STACK_SIZE - 1))
        return TRUE;
    else
        return FALSE;
};
 
int is_empty(StackType *s){
    if (s->top == -1)
        return TRUE;
    else
        return FALSE;
};
 
void push(StackType *s,element x){
    if (is_full(s)){
        printf("error overflow");
    }else{
        s->top = s->top + 1;
        s->stack[s->top] = x;
    };
};
 
element pop(StackType *s){
    element e;
    if (is_empty(s)){
        printf("error underflow");
    }
    else{
        e = s->stack[s->top];
        s->top = s->top - 1;
        return e;
    };
};
 
int check_matching(char *in)
{
    StackType s;
    char ch, open_ch;
    int i, n = strlen(in);
    init(&s);
 
    for (i = 0; i < n; i++) {
        ch = in[i];
        switch (ch){
        case '(':   case '[':    case '{':
            push(&s, ch);
            break;
        case ')':   case ']':    case '}':
            if (is_empty(&s))  return FALSE;
            else {
                open_ch = pop(&s);
                if ((open_ch == '(' && ch != ')'|| (open_ch == '[' && ch != ']'||
                    (open_ch == '{' && ch != '}')) {
                    return FALSE;
                }
                break;
            }
        }
    }
    if (!is_empty(&s)) return FALSE;
    return TRUE;
}
 
void display(a){
    if (check_matching(a) == TRUE)
        printf("괄호검사성공\n");
    else
        printf("괄호검사실패\n");
}
int main()
{
    display("{ A[(i+1)]=0}(()); ");
}
cs

'공부 > 자료구조' 카테고리의 다른 글

큐~  (0) 2019.05.31
더블링크드 리스트 c 언어  (0) 2019.05.17
링크드 리스트 2개 오름차순으로 병합하기  (0) 2019.05.10
C로 리스트 구현하기~  (0) 2019.05.03