수업시간에 배운 내용입니다^^
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 |