【问题描述】
假设一算术表达式中包括三种括号:圆括号“(”和“)”,方括号“[”和“]”,花括号“{”和“}”,且三种括号可按意次序嵌套使用,试编写程序判定输入的表达式所含的括号是否正确配对出现。若匹配,则返回1,否则返回0。
【输入形式】
含括号的算数表达式
【输出形式】
若表达式中的括号正确配对,则输出1。否则,输出0。
【样例输入】
3+(44*[5-{6*[7*(45-10)]}])
【样例输出】
1
【样例说明】
判断括号是否匹配涉及两方面的问题,一是对左右括号的出现次数的判定,二是对不同括号的出现次序的判定。
实现:利用栈的特性来实现
错误点:注意括号的匹配问题
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
char signal;
struct Node* next;
}Node;
typedef struct Stack
{
Node*top;
Node*base;
}Stack;
void PushStack(Stack *s,char c)
{
Node*n=(Node*)malloc(sizeof(Node));
n->signal=c;
n->next=s->top->next;
s->base->next=n->next;
}
char PopStack(Stack*s)
{
Node*n=s->top->next;
s->top=n;
free(n);
return s->top->signal;
}
int main()
{
char c='c';
Stack*s=(Stack*)malloc(sizeof(Stack));
s->base=(Node*)malloc(sizeof(Node));
s->top=(Node*)malloc(sizeof(Node));
s->base->next=NULL;
s->top->next=s->base;
while(c!='\n')
{
c=getchar();
if((c=='{') || (c=='[') || (c=='('))
{
PushStack(s,c);
}
if((c=='}') || (c==']') || (c==')'))
{
if(s[i]==']'&& com=='[')
continue;
else if(s[i]=='}'&& com=='{')
continue;
else if(s[i]==')'&& com=='(')
continue;
else
{
printf("0");
return 0;
}
}
}
printf("1");
return 0;
}