#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct stack{
char c;
struct stack *next;
}Listack,*pListack;
pListack initStack()
{
pListack p = (pListack)malloc(sizeof(Listack));
if(!p) exit(-1);
p->next = NULL;
return p;
}
void push(pListack S,char t)
{
pListack p = (pListack)malloc(sizeof(Listack));
if(!p) exit(-1);
p->c = t ;
p->next = S->next;
S->next = p;
}
bool pop(pListack S)
{
pListack p = S->next ;
if(!p) return 0;
S->next = p->next;
free(p);
return 1;
}
bool isEmpty(pListack S)
{
if(!S->next) return 1;
else return 0;
}
char top(pListack S)
{
if(!S->next) exit(-1);
else
return S->next->c;
}
int main()
{
pListack S = initStack();
char s[100];
scanf("%s",s);
int len = strlen(s);
for(int i=0;i<len;i++)
{
char t=s[i];
if(t=='(' || t =='[' || t=='{')
{
push(S,t);
}
else
{
if(t==')' || t==']' || t=='}')
{
if(isEmpty(S))
{
printf("no");
return 0;
}
if( (t==')' && top(S)=='(' ) || (t==']'&& top(S) =='[') ||(t=='}'&& top(S)=='{') )
{
pop(S);
}
else
{
printf("no"); return 0;
}
}
}
}
if(isEmpty(S)) printf("yes");
else printf("no");
return 0;
}
数据结构理论课noj(7)表达式括号匹配
于 2022-03-27 10:42:36 首次发布