20.有效括号匹配

目录

​编辑

一、题目

二、代码

三、算法思路

四、运行截屏


一、题目

二、代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
#define MaxSize 100 

struct SqStack
{
    char* top;
    char* base;
};

struct SqStack S;

void Create()
{
    S.base = (char*)malloc(sizeof(char) * MaxSize);
    if (S.base == NULL)
    {
        printf("内存分配失败!");
        exit(1);
    }
    S.top = S.base;
}

int Push(char s)
{
    if (S.top - S.base == MaxSize) 
    {
        printf("栈满!");
        exit(1);
    }
    else
    {
        *S.top++ = s;
        return 1;
    }
}

int Pop(char* y)
{
    if (S.top == S.base)
        return 0;
    else
    {
        *y = *(--S.top);
        return 1;
    }
}

int Empty()
{
    if (S.top == S.base)
        return 1;
    else
        return 0;
}

int Compare()
{
    char s;
    Create();
    while ((s = getchar()) != '\n')
    {
        if (s == '(' || s == '[' || s == '{')
            Push(s);
        if (s == ')' || s == ']' || s == '}')
        {
            if (Empty())
            {
                return 0;
            }
            char* temp = S.top - 1;
            if (((*temp == '(') && s == ')') || ((*temp == '[') && s == ']') || ((*temp == '{') && s == '}'))
            {
                Pop(temp);
            }
            else
                return 0;
        }
    }
    if (Empty())
        return 1;
    else
        return 0;
}

int main(void)
{
    printf("请输入括号串:");
    int temp = Compare();
    if (temp == 1)
        printf("有效括号!");
    else
        printf("无效括号!");
    free(S.base);
    return 0;
}

三、算法思路

使用一个栈来存储左括号,只有遇到左括号,就压入栈中,当遇到一个右括号时,需要从栈中弹出一个括号进行比较,如果能够匹配,则弹出该括号,否则表示不是有效的括号匹配。当栈空时,说明全部括号匹配。

四、运行截屏

1.有效括号 

2.无效括号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑子不好真君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值