当前位置:主页 > 查看内容

西北工业大学noj数据结构表达式括号匹配(严3.19)

发布时间:2021-05-27 00:00| 位朋友查看

简介:这道题要求我们判断输出的一个字符串中的括号是否符合运算规律。可以运用栈的思想。如果一个括号是左括号就入栈如果输出一个右括号就将它和栈头的左括号对比符合就出栈相当于消掉。最后如果还有没消掉的括号就是不符合规定。 话不多说上代码 # include stdio……

在这里插入图片描述
在这里插入图片描述
这道题要求我们判断输出的一个字符串中的括号是否符合运算规律。可以运用栈的思想。如果一个括号是左括号就入栈,如果输出一个右括号就将它和栈头的左括号对比,符合就出栈(相当于消掉)。最后如果还有没消掉的括号就是不符合规定。
话不多说上代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 1000
#define ok 1
#define error 0
typedef struct
{
    char a[max];
    int top;
}seq;
void InitStack(seq *s)//初始化
{
    s->top=-1;
}
int Push(seq*s,char x)//元素入栈
{
    if(s->top==max-1) return (error);
    s->top++;
    s->a[s->top]=x;
    return (ok);
}
int Pop(seq *s,char* x)//元素出栈
{
    if(s->top==-1) return(error);
    else
        {
          *x=s->a[s->top] ;
          s->top--;
          return(ok);
        }
}
int GetTop(seq*s,char*x)//将栈顶元素读取到x中
{
    if(s->top==-1) return (error);
    else
        {
            *x=s->a[s->top];
    return (ok);
        }
}
int Match(char a,char b)//检测两个括号是否匹配
{
    if((a=='('&&b==')')||(a=='['&&b==']')||(a=='{'&&b=='}')) return (ok);
    else return 0;
}
int IsEmpty(seq *s)//检测栈是否为空
{
    if(s->top==-1) return (ok);
    else return(error);
}
void BracketMatch(char *str)
{
    seq s;int i;char ch;
    InitStack(&s);
    for(i=0;str[i]!='\0';i++)
    {
        switch(str[i])
        {
        case'(':
        case'[':
        case'{':
            Push(&s,str[i]);break;//如果是前括号,就入栈
        case')':
        case']':
        case'}':
            if(IsEmpty(&s)) {printf("no");return;}//空表no右括号多余
            else
            {
                GetTop(&s,&ch);
                if(Match(ch,str[i]))  Pop(&s,&ch);//匹配的括号消掉
                else{printf("no");return;}//括号不同类
            }
        }
    }
    if(IsEmpty(&s)) printf("yes");
    else  printf("no");//左括号多余
}
int main()
{
    char str[max];
    scanf("%s",str);
    BracketMatch(str);
    return 0;
}
;原文链接:https://blog.csdn.net/noj_h/article/details/115534845
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐