惊鸿之羽 2020-02-11 20:13 采纳率: 100%
浏览 1041
已采纳

c语言栈的应用【括号匹配问题】

代码运行结果永远是正确,弄了好久没解决

#include<stdio.h>
#define MaxSize 50
typedef struct//顺序栈
{
    char data[MaxSize];
    int top;
}SqStack;
bool StackEmpty(SqStack &S)//判断栈空
{
    if(S.top==-1)
        return true;
    else
        return false;
}
bool Push(SqStack &S,char x)//压栈
{
    if(S.top==MaxSize)
        return false;
    S.data[++S.top]=x;
        return true;
}
bool Pop(SqStack &S,char x)//出栈
{
    if(S.top==-1)
        return false;
    x=S.data[S.top--];
        return true;
}
bool GetTop(SqStack &S,char x)//读取栈顶元素
{
    if(S.top==-1)
        return false;
    x=S.data[S.top];
        return true;
}
void InitStack(SqStack &S)//栈的初始化
{
    S.top=-1;
}

void main()
{
    int i,x;
    SqStack S;
    char a[20];
    InitStack(S);
    for(i=0;i<20;i++)
    {
        scanf("%c",&a[i]);
    }
    for(i=0;i<20;i++)
    {
        if(a[i]=='{'||a[i]=='['||a[i]=='(')
            Push(S,a[i]);
        if(a[i]=='}'||a[i]==']'||a[i]==')')
            if(StackEmpty(S))
            {
                printf("右括号比左括号多");
                return;
            }
            else
            {
                GetTop(S,x);
                if(x=='{'&&a[i]=='}'||x=='['&&a[i]==']'||x=='('&&a[i]==')')
                {
                    Pop(S,x);
                    Pop(S,x);
                    continue;
                }
                else
                {
                    printf("左右括号配对次序不正确");
                    return;
                }

            }
    }
    if(StackEmpty(S))
    {
        printf("左右括号配对正确");
        return;
    }

    else
    {
        printf("左括号比右括号多");
        return;
    }
}
  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-02-12 00:23
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器