창고 의 응용 - 괄호 일치 - 데이터 구조
1680 단어 데이터 구조
간편 함 을 위해 토론 () []
번 거 로 운 return ERROR 제거 창고 용량 이 처리 하기에 부족 하 다.
예 코드:
#include
#include
#include
#define InitStackSize 1000
typedef struct SqStack
{
char *top,*base;
int stacksize;
}SqStack;
void InitSqStack(SqStack &s)
{
s.base=s.top=(char*)malloc(InitStackSize*sizeof(char));
s.stacksize =InitStackSize;
}
void PushSqStack(SqStack &s,char ch)
{
*s.top=ch;
s.top++;
}
bool EmptyStack(SqStack s)
{
if(s.base==s.top) return true;
else return false;
}
void PopSqStack(SqStack &s)
{
s.top--;
}
char GetStackTop(SqStack s)
{
if(EmptyStack(s)) return '#';
else return *--s.top;
}
int BracketMatch(SqStack &s,char *st)
{
char *p=st;
char ch;
while(*p!='\0')
{
switch(*p)
{
case '(':PushSqStack(s,*p);break;
case '[':PushSqStack(s,*p);break;
case ')':
if(EmptyStack(s)) return 0;
ch=GetStackTop(s);
if(ch=='(') PopSqStack(s);
else return 0;
break;
case ']':
if(EmptyStack(s)) return 0;
ch=GetStackTop(s);
if(ch=='[') PopSqStack(s);
else return 0;
break;
default:break;
}
p++;
}
if(!EmptyStack(s)) return 0;
return 1;
}
int main()
{
SqStack stack;
char str[InitStackSize]; //just including '('')''['']'
printf("Input the bracket string:
");
while(scanf("%s",&str)!=EOF)
{
InitSqStack(stack);
if(BracketMatch(stack,str)) printf("Match success!
");
else printf("Fail to match.
");
}
return 0;
}