SMALL
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100
/* 스택 구현 부분 */
typedef char element; //------------->char형으로 구현
typedef struct{
element data[MAX_STACK_SIZE];
int top;
} StackType;
void init_stack(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->data[++(s->top)]=item;
}
//삭제
element pop()
{
if(is_empty(s)){
fprintf(stderr, "스택 공백 에러\n");
exit(1);
}
else return s->data[(s->top)--];
}
//피크
element peek()
{
if(is_empty(s)){
fprintf(stderr, "스택 공백 에러\n");
exit(1);
}
else return s->data[s->top];
}
-----------------------------------------------------------------
int check_matching(const char *in)
{
StackType s;
char ch, open_ch;
int i, n = strlen(in); // n=문자열의 길이
init_stack(&s); // 스택의 초기화
for(i=0 ; i<n ; i++){
ch = in[i]; // ch=다음문자
switch(ch){
case '(': case '[': case '{':
push(&s, ch);
break;
case ')': case ']': case '}':
if (is_empty(&s)) return 0;
else{
open_ch = pop(&s);
if((open_ch=='(' && ch!=')') ||
(open_ch=='[' && ch!=']') ||
(open_ch=='{' && ch!='}')) {
return 0;
}
break;
}
}
}
if(!is_empty(&s)) return 0; // 스택에 남아있으면 오류
return 1;
}
int main(void)
{
char *p = "{ A[(i+1)]=0; }";
if(check_matching(p) == 1)
printf("%s 괄호검사 성공\n", p);
else
printf("%s 괄호검사 실패\n", p);
reutrn 0;
}
* 실행결과 *
{ A[(i+1)]=0; } 괄호검사 성공
LIST
'기초 > 자료구조' 카테고리의 다른 글
[014]선형큐 (0) | 2022.04.05 |
---|---|
[013]스택을 이용한 미로탐색 프로그램 (0) | 2022.04.03 |
[011]스택(동적할당) (0) | 2022.04.03 |
[010]스택(구조체) (0) | 2022.04.03 |
[009]스택(전역변수) (0) | 2022.04.03 |