#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define length 100
#define add 10
typedef struct size
{
char *top;
char *basic;
int stacksize;
}Stacks;
void InitStacks(Stacks &S)
{
S.basic=(char *)malloc(length * sizeof(char));
if(!S.basic)
{
printf("Creat erro!");
exit(0);
}
S.top=S.basic+1;
S.stacksize=length;
printf("Creat succeed!\n");
}
void PushStacks(Stacks &S,char c)
{
if(S.top-S.basic>=length)
{
S.basic = (char *)realloc(S.basic,(S.stacksize+add)*sizeof(char));
if(!S.basic)
{ printf("add failed!\n");exit(0);}
S.stacksize=S.stacksize+add;
S.top=S.basic+S.stacksize;
}
*S.top=c;
S.top++;
}
int EmptyStacks(Stacks S)
{
if(S.top-1==S.basic)
{
//printf("the Stacks is Empty!\n");
return 1;
}
return 2;
}
char PopStacks(Stacks S)
{
if(!EmptyStacks(S))
exit(0);
else
S.top--;
return *S.top;
}
void Juge(char *Str)
{
Stacks S;
InitStacks(S);
int i=0;
while(Str[i]!='\0')
{
if(Str[i]=='('||Str[i]=='['||Str[i]=='{')
{
PushStacks(S,Str[i]);
i++;
}
else if(Str[i]==')')
{
printf("%c",PopStacks(S));
printf("%c",Str[i]);
if(PopStacks(S)=='(')
{
i++;
S.top--;
}
else
{
printf("It`s wrong!");
exit(0);
}
}
else if(Str[i]==']')
{
printf("%c",PopStacks(S));
printf("%c",Str[i]);
if(PopStacks(S)=='[')
{
i++;
S.top--;
}
else
{
printf("It`s wrong!");
exit(0);
}
}
else if(Str[i]=='}')
{
printf("%c",PopStacks(S));
printf("%c",Str[i]);
if(PopStacks(S)=='{')
{
i++;
S.top--;
}
else
{
printf("It`s wrong!");
exit(0);
}
}
else i++;
}
// for(i=0;i<3;i++)
// {
// printf("%c",PopStacks(S));
// S.top--;
// }
//printf("%c",S.top+1);
//printf("%d\n",S.top);
//printf("%d",S.basic);
if(EmptyStacks(S)==1)
printf("JUGE RIGHT\n");
else
printf("WRONG\n");
}
int main()
{
char str[100];
for(int i=0;i<6;i++)
scanf("%c",&str[i]);
Juge(str);
return 0;
}
顺序栈—括号匹配
最新推荐文章于 2019-08-04 14:08:13 发布