p.s.个人收录用
题目描述
假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
输入
一行:表达式
输出
一行:“YES” 或“NO”
样例输入 Copy
【样例输入1】 2*(x+y)/(1-x)@ 【样例输入2】 (25+x)*(a*(a+b+b)@
样例输出 Copy
【样例输出1】 YES 【样例输出2】 NO
提示
表达式长度小于255,左圆括号少于20个
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct sstack {
struct sstack* next;
}mystack;
mystack* init()
{
mystack* s = (mystack*)malloc(sizeof(mystack));
if (s != NULL)
s->next = NULL;
return s;
}
void ppush(mystack* top)
{
mystack* s = (mystack*)malloc(sizeof(mystack));
if (s != NULL)
{
s->next = top->next;
top->next = s;
}
}
void ppop(mystack* top)
{
if (top->next!=NULL)
{
mystack* s = top->next;
top->next = s->next;
s->next = NULL;
free(s);
s = NULL;
}
}
int is(mystack* top)
{
if (top->next == NULL)
return 1;
else
return 0;
}
int main()
{
char n;
mystack* top = init();
while (1)
{
scanf("%c", &n);
if (n == '@')
break;
else if (n == '(')
ppush(top);
else if (n == ')')
{
if (is(top))//判断是否存在(
{
ppush(top);
break;
}
else
ppop(top);
}
}
if (is(top))
printf("YES\n");
else
printf("NO\n");
}