括号匹配问题

【问题描述】
 假设一算术表达式中包括三种括号:圆括号“(”和“)”,方括号“[”和“]”,花括号“{”和“}”,且三种括号可按意次序嵌套使用,试编写程序判定输入的表达式所含的括号是否正确配对出现。若匹配,则返回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;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值