题目如下
简单分析题目,我们知道需要用到栈结构,在这里我以定长的顺序栈来实现
#include<stdio.h>
#define StackSize 20
#define TRUE 1
#define FALSE 0
typedef char StackElementType;
typedef struct SeqStack
{
StackElementType elem[StackSize];
int top;
}SeqStack;
void InitStack(SeqStack* S)//对栈的初始化
{
S->top = -1;
}
int Push(SeqStack* S, StackElementType x)
{
if (S->top == StackSize - 1)
return(FALSE);
S->top++;
S->elem[S->top] = x;
return (TRUE);
}
int Pop(SeqStack* S, StackElementType *x)
{
if (S->top == -1)
return(FALSE);
else
{
*x = S->elem[S->top];
S->top--;
return(TRUE);
}
}
int GetTop(SeqStack* S, StackElementType *x)//获取栈顶元素
{
if (S->top == -1)
{
return(FALSE);
}
else
{
*x = S->elem[S->top];
return(TRUE);
}
}
int isempty(SeqStack* S)//检测栈是否为空,空返回TRUE,非空返回FALSE
{
if (S->top == -1)
return(TRUE);
else
return(FALSE);
}
int main()
{
SeqStack s;
InitStack(&s);
bool flag = TRUE;
StackElementType c,d;
StackElementType* x=&d;
while ((c = getchar()) != '\0' && c != '\r' && c != EOF && c != '\n')
{
if ((c == '(') || (c == '[') || (c == '{'))
Push(&s, c);
else if ((c == ')') || (c == ']') || (c == '}'))
{
if (isempty(&s))
{
flag = false;
break;
}
else
{
GetTop(&s, x);
Pop(&s, x);
if ((*x == '(' && c != ')') || (*x == '[' && c != ']') || (*x == '{' && c != '}'))
{
flag = false;
break;
}
}
}
}
if (!isempty(&s))
flag = false;
if (flag)
printf("yes\n");
else
printf("no\n");
return 0;
}
实测已AC