#include;
#include;
#include;
#define TRUE 1
#define FALSE 0
#define MAX_STACK_SIZE 100
typedef char element;
typedef struct{
element stack[MAX_STACK_SIZE];
int top;
}StackType;
void init(StackType *s){
s->top = -1;
}
int is_empty(StackType *s){
return (s->top == -1);
}
int is_full(StackType *s){
return (s->top == (MAX_STACK_SIZE-1));
}
void push(StackType *s,element item){
if( is_full(s)){
fprintf(stderr,"스택포화에러\n");
return;
}
else s->stack[++(s->top)] = item;
}
element pop(StackType *s){
if( is_empty(s)){
fprintf(stderr,"스택공백에러\n");
exit(1);
}
else return s->stack[(s->top)];
}
int check_matching(char *sentence){
StackType s;
char ch, open_ch;
int i, n = strlen(sentence);
init(&s);
for(i=0; i<n; i++){
ch = sentence[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;
}
int main(void){
if( check_matching("{ A[(i+1)]=0; }") == TRUE)
printf("GOOD\n");
else
printf("BAD\n");
return 0;
}
'이전것 > Algorithm' 카테고리의 다른 글
배열 큐 (0) | 2014.05.14 |
---|---|
후위 표기식 계산 (0) | 2014.05.07 |
스택 연결리스트 메모리 누수 (0) | 2014.04.30 |
스택 연결리스트 (0) | 2014.04.30 |
Syntax Highlighter 적용법 (0) | 2014.04.29 |