判断括号字符串是否为合法+求n对括号的所有组
发布网友
发布时间:2022-07-14 11:08
我来回答
共1个回答
热心网友
时间:2023-09-22 11:11
老铁,读你的问题真煎熬。世事纷繁,能帮助就帮助,可也希望你把问题写清除。没什么其它意思。这是一个判断括号匹配的程序,需要一点栈基础。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 80
typedef char datatype;
typedef struct node{
datatype elements[MAX];
int top;
}stack;
stack *S;
stack *SetNull(stack*S)
{
S->top=-1;
return S;
}
bool IsEmptyS(stack *s)
{
if(s->top==-1)
return true;
else return false;
}
stack *PushL(stack *S,datatype e){
if(S->top>=MAX-1)
return NULL;
else{
S->top++;
S->elements[S->top]=e;
}
return S;
}
datatype GetTopS(stack*s)
{
datatype ret;
if(IsEmptyS(s))
return NULL;
else{
ret=s->elements[s->top];
return ret;
}
}
datatype *PopL(stack *s){
datatype *ret;
if(IsEmptyS(s))
return NULL;
else{
s->top--;
ret=(datatype*)malloc(sizeof(datatype));
*ret=s->elements[s->top+1];
return ret;
}
}
bool bracket(char a[]){
datatype x;
stack *L;
int i=0;
L=(stack*)malloc(sizeof(stack));
SetNull(L);
while(a[i])/////////
{
switch(a[i])
{
case '(':
case '[':
case '{':PushL(L,a[i]);break;
case')':x=GetTopS(L);
if(x=='(')
PopL(L);
else return false;break;
case']':x=GetTopS(L);
if(x=='[')
PopL(L);
else return false;break;
case'}':x=GetTopS(L);
if(x=='{')
PopL(L);
else return false;break;
default:break;
}
i++;;
}
if(L->top!=-1)
return false;
return true;
}
int main()
{
int m,i,a[MAX]={-1};
datatype str[MAX];
printf("请输入判断组数:\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%s",str);
a[i]=bracket(str);
}
for(i=0;i<m;i++)
{
if(a[i]==1)
printf("YES\n");
else printf("NO\n");
}
return 0;
}