其他分享
首页 > 其他分享> > 数据结构 (实验三 括号匹配)

数据结构 (实验三 括号匹配)

作者:互联网

文章目录

数据结构


前言

博主介绍:

本人是一个不知名的二本院校计科专业大二学生,每天除了上课就是在学校里的一个小组学习,之前学习了JAVA后学了Python如今在专注于学习Golang语言,每天总是很多胡思乱想,想一些不着调的想法,想做很多很多的软件让很多朋友们使用,但如今的技术还不到家,希望可以做出很多很多的APP给大家一起用,现仍需继续努力!一起加油!


文章目录


头文件

#include <cstdio>
#include <cstring>

空栈初始化状态

int top = -1; //初始状态的空栈,或者说栈顶元素所在位置

入栈操作

void push(char *a, int elem) {//入栈操作
    a[++top] = elem;
}

出栈操作

void pop(char *a) {//出栈操作
    if (top == -1) {
        return;//空栈返回
    }
    top--;
}

辅助函数

char visit(char *a) {
    //调取栈顶元素,不等于出栈,如果栈为空,为使程序不发生错误,返回空字符
    if (top != -1) {
        return a[top];
    }
    else
    {
        return ' ';
    }
}

主函数

int main() {
    char a[80];//定义了一个数组,长度80
    char bracket[100];
    printf("请输入括号序列:");
    scanf("%s", bracket);
    getchar();
    int  length = (int)strlen(bracket);
    for (int i = 0; i < length; i++) {
        //如果是左括号,直接压栈
        if (bracket[i] == '(' || bracket[i] == '{') {
            push(a, bracket[i]);
        }
        else
        {
            //右边括号的话要判断与栈顶元素是否匹配,若匹配则出栈运行,反之退出
            if (bracket[i] == ')') {
                if (visit(a) == '(') {
                    pop(a);
                }
                else
                {
                    printf("括号不匹配");
                    return 0;
                }
            }
            else
            {
                if (visit(a) == '{') {
                    pop(a);
                }
                else
                {
                    printf("括号不匹配");
                    return 0;
                }
            }
        }
    }
    //如果所有括号匹配完成,栈内为空,说明所有括号全部匹配成功
    if (top != -1) {
        printf("括号不匹配");
    }
    else {
        printf("括号匹配");
    }
}

所有代码

#include <cstdio>
#include <cstring>
int top = -1; //初始状态的空栈,或者说栈顶元素所在位置
void push(char *a, int elem) {//入栈操作
    a[++top] = elem;
}
void pop(char *a) {//出栈操作
    if (top == -1) {
        return;//空栈返回
    }
    top--;
}
char visit(char *a) {
    //调取栈顶元素,不等于出栈,如果栈为空,为使程序不发生错误,返回空字符
    if (top != -1) {
        return a[top];
    }
    else
    {
        return ' ';
    }
}
int main() {
    char a[80];//定义了一个数组,长度80
    char bracket[100];
    printf("请输入括号序列:");
    scanf("%s", bracket);
    getchar();
    int  length = (int)strlen(bracket);
    for (int i = 0; i < length; i++) {
        //如果是左括号,直接压栈
        if (bracket[i] == '(' || bracket[i] == '{') {
            push(a, bracket[i]);
        }
        else
        {
            //右边括号的话要判断与栈顶元素是否匹配,若匹配则出栈运行,反之退出
            if (bracket[i] == ')') {
                if (visit(a) == '(') {
                    pop(a);
                }
                else
                {
                    printf("括号不匹配");
                    return 0;
                }
            }
            else
            {
                if (visit(a) == '{') {
                    pop(a);
                }
                else
                {
                    printf("括号不匹配");
                    return 0;
                }
            }
        }
    }
    //如果所有括号匹配完成,栈内为空,说明所有括号全部匹配成功
    if (top != -1) {
        printf("括号不匹配");
    }
    else {
        printf("括号匹配");
    }
}

标签:匹配,int,top,else,char,括号,bracket,数据结构
来源: https://blog.csdn.net/weixin_45765795/article/details/116894328