首页 > 其他分享 >括号匹配问题

括号匹配问题

时间:2023-09-11 18:02:12浏览次数:35  
标签:LinkStack 匹配 temp FALSE next 问题 括号 str return

1.题目

设表达式中包含三种括号:圆括号、方括号和花括号,它们可互相嵌套,如({})或({([][()])})等均为正确的格式,而{[])}、{()]或([]}均为不正确的格式。

2.算法分析

3.

//
// Created by trmbh on 2023-09-11.
//
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define FALSE 0
#define TRUE 1
#define StackElementType char

typedef struct Node {
    StackElementType data;
    struct Node *next;
} LinkStackNode, *LinkStack;

/* 初始化栈区 */
void InitLinkStack(LinkStack *l) {
    *l = (LinkStack) malloc(sizeof(LinkStackNode));
    (*l)->next = NULL;
}

/* 入栈操作 */
int Push(LinkStack l, StackElementType x) {
    LinkStackNode *temp;
    temp = (LinkStackNode *) malloc(sizeof(LinkStackNode));
    temp->data = x;
    temp->next = l->next;
    l->next = temp;
    return TRUE;
}

/* 出栈操作 */
int Pop(LinkStack l, StackElementType *x) {
    if (l->next == NULL) return FALSE;
    LinkStackNode *temp;
    temp = l->next;
    l->next = temp->next;
    *x = temp->data;
    free(temp);
    return TRUE;
}

/* 获得栈首数据 */
int GetTop(LinkStack l, StackElementType *x) {
    if (l->next == NULL) return FALSE;
    *x = l->next->data;
    return TRUE;
}

/* 判断链栈是否为空 */
int IsEmpty(LinkStack l) {
    if (!l->next) return TRUE;
    else return FALSE;
}

/* 括号匹配函数 */
int BracketMatch(char *str, LinkStack l) {
    StackElementType x;
    while (*str != '\0') {
        GetTop(l, &x);
        switch (*str) {
            case '{':
            case '[':
            case '(':
                Push(l, *str);
                break;
            case '}':
                if (x == '{') Pop(l, &x);
                else return FALSE;
                break;
            case ']':
                if (x == '[') Pop(l, &x);
                else return FALSE;
                break;
            case ')':
                if (x == '(') Pop(l, &x);
                else return FALSE;
                break;
        }
        str++;
    }
    if (IsEmpty(l)) {
        return TRUE;
    } else return FALSE;
}

int main() {
    LinkStack l;
    char str[100];
    printf("请输入字符串:");
    /* 第二个参数为最大字符数限制, 第三个参数为从标准输入流读入*/
    fgets(str, sizeof(str), stdin); // 使用fgets接收输入

    // 移除输入字符串中的换行符
    size_t len = strlen(str);
    if (len > 0 && str[len - 1] == '\n') {
        str[len - 1] = '\0';
    }
    
    InitLinkStack(&l);
    if (BracketMatch(str, l)) printf("匹配成功");
    else printf("匹配失败");
    return 0;
}

标签:LinkStack,匹配,temp,FALSE,next,问题,括号,str,return
From: https://www.cnblogs.com/trmbh12/p/17694121.html

相关文章

  • 33socket套接字/黏包问题
    socket套接字#需求:编写一个cs架构的程序实现数据交互思考:需要编写代码操作OSI七层相当的复杂由于操作OSI七层是所有cs架构的程序都需要经历的过程所以有固定的模块socket套接字是一门技术socket模块>>>:提供了快捷方式不需要自己处理每一层"""以后我们写......
  • pycharm 远程debug卡住问题解决
     解决方案:1、先注释掉连接debugserversocket代码,启动 2、启动debugserver3、去除注释,热部署自动重启,则能重连 ......
  • 亚马逊云科技与德勤中国推出新工具,有效缓解生成式AI时代下的安全问题
    随着人工智能技术的飞速发展,生成式AI应用越发广泛,在各领域迎来了新的机遇,但同时也在安全层面给企业带来了新的挑战。网络、数据泄露、隐私侵犯等安全威胁,以及法律法规的不断更新,使跨区域运营过程中的网络安全和合规成为企业持续发展不可或缺的一环。 亚马逊云科技与全球核心级咨询......
  • MAVEN中的问题
    MAVEN中的问题1.版本问题Maven3.6.2。解决方法:降低到3.6.1 2.Tomcat闪退3.IDEA中每次都要重复配置Maven在IDEA中的全局默认配置中去配置  4.Maven项目中Tomcat无法配置5.maven默认web项目中的web.xml版本问题 6.替换为webapp4.0版本和tomcat<?xmlversion......
  • 解决Python中的包管理与依赖问题代码实操
    Python的包管理与依赖问题是一个常见的挑战,但通过以下具体的解决方案和步骤,你可以更好地处理和管理项目中的依赖关系,提高开发效率。1.使用虚拟环境进行包管理步骤:a.安装虚拟环境工具,比如venv或者virtualenv。在命令行中输入以下命令安装venv:```$python3-mvenvmyenv```b.创建虚......
  • 【JAVA日常】关于jeecgBoot @Dict注解的使用不生效问题
    项目中后端使用jeecgBoot开发,最近正好遇到一些关于改造和使用@dict字典注解的问题,正好记录一下,以防忘记。1、注解不生效问题1今天公司同事问,说这个注解加上了怎么还不起作用呢。我们就检查了代码中的使用。注解的添加以及使用都正常,然后排查发现接口调用时未执行字典的切面,那么......
  • 直播流IOS无法播放问题排查
     问题:IOS手机无法播放flv协议视频,改为hls协议后,IOS播放H264视频编码格式正常,但是H265无法播放解决:使用花椒播放器,在IOS上通过Webassembly编解码,播放flv协议视频解决此问题。视频插件:花椒播放器https://github.com/ErosZy/WXInlinePlayer示例地址:https://eroszy.github......
  • vue可以使用this.$set()来进行强制更新,进而解决问题
    可以使用this.$set()来进行强制更新,进而解决问题对象操作:三个参数:this.$set("改变的对象","改变的对象属性","值")数组操作: 三个参数:this.$set("数组","下标","值")......
  • AcWing 5. 多重背包问题 II
    题目有$N$种物品和一个容量是$V$的背包。第$i$种物品最多有$s_i$件,每件体积是$v_i$,价值是$w_i$。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,$N,V$,用空格隔开,分别表示物品种数和背包容积。接下来......
  • 想跳出Android内卷困境,简历匹配上大厂你需要做到那些
    内卷化是一个近年来在中文网络上经常出现的词汇,通常用来描述某个领域中过度的竞争和内部消耗。这个概念直观地说就是“向内演化”,更广泛地说,所有没有实质意义的消耗都可以称为内卷。在生活中,许多看似精益求精的重复工作,实际上是在内部范围内施展,而不是向外扩张,这也可以被视为内卷的......