20.有效括号匹配

目录

​编辑

一、题目

二、代码

三、算法思路

四、运行截屏


20.有效括号匹配_第1张图片

一、题目

20.有效括号匹配_第2张图片

二、代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include 
#include
#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.有效括号 

20.有效括号匹配_第3张图片

2.无效括号

20.有效括号匹配_第4张图片

你可能感兴趣的:(力扣(LeetCode)刷题,c++,力扣)