# 배열 스택을 이용한 괄호검사
CheckMaching.cpp
괄호검사에 필요한 조건
① 왼쪽 괄호의 갯수와 오른쪽 괄호의 갯수가 같아야 한다.
② 같은 타입의 괄호에서 왼쪽 괄호는 오른쪽 괄호보다 먼저 나와야 한다.
③ 서로 다른 타입의 왼쪽 괄호와 오른쪽 괄호 쌍은 서로를 교차하면 안된다.
CheckMaching.cpp
괄호검사에 필요한 조건
① 왼쪽 괄호의 갯수와 오른쪽 괄호의 갯수가 같아야 한다.
② 같은 타입의 괄호에서 왼쪽 괄호는 오른쪽 괄호보다 먼저 나와야 한다.
③ 서로 다른 타입의 왼쪽 괄호와 오른쪽 괄호 쌍은 서로를 교차하면 안된다.
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
typedefstruct STACK
{
int data[MAX_SIZE];
int top;
}STACK;
void Init(STACK *p)
{
p->top=-1;
}
int Is_empty(STACK *p)
{
return (p->top == -1);
}
void Push(STACK *p,int data)
{
if(Is_full(p))
{
printf("스택이 꽉찼습니다\n"); return ;
}
else
{
p->data[++(p->top)]=data;
}
}
int Pop(STACK *p)
{
if(Is_empty(p))
{
printf("스택이 비어있습니다\n");
return -1;
}
return p->data[(p->top)--];
}
int CheckMaching(char *str)
{
STACK t;
int i,len=strlen(str);
char ch,open_ch;
Init(&t);
for(i=0;i<len;i++)
{
ch=str[i];
switch(ch)
{
case'(':
case'[':
case'{':
Push(&t,ch);
break;
case')':
case']':
case'}':
if(Is_empty(&t)) return false;
else
{
open_ch=Pop(&t);
if((open_ch == '(' && ch !=')') ||
(open_ch == '[' && ch !=']') ||
(open_ch == '{' && ch !='}'))
{
return false ;
}
}
break;
}
}
if(!Is_empty(&t)) return false;
return true;
}
int main()
{
char str[50];
if(CheckMaching(gets(str)))
printf("괄호 검사 성공\n");
else
printf("괄호 검사 실패\n");
return0;
}
'컴퓨터 기술 > 자료구조' 카테고리의 다른 글
자료구조 :: 스택(5) 스택을 이용한 미로찾기 (0) | 2010.06.22 |
---|---|
자료구조 :: 스택(4) 스택을 이용한 표기식 변환과 연산 (0) | 2010.06.22 |
자료구조 :: 스택(2) 연결리스트를 이용한 스택 (0) | 2010.06.22 |
자료구조 :: 스택(1) 배열을 이용한 스택 (0) | 2010.06.22 |
자료구조 :: 리스트(5) 연결리스트를 이용한 다항식 (0) | 2010.06.22 |
댓글 로드 중…