您的位置:首页 > 理论基础 > 数据结构算法

数据结构上机实践第五周项目3 - 括号的匹配

2017-12-25 08:17 239 查看
4000
括号的匹配
本次实践将用到顺序栈的算法库,点击此处参考。

本次实践要求:

假设表达式中允许三种括号:圆括号、方括号和大括号。编写一个算法,判断表达式中的各种左括号是否与右括号匹配。 

例如,输入2+(3+4)*2+{[3]}-8,输出匹配正确;输入2+(3+4*[2)+{[3]}-8,输出匹配错误。

提示: 

(1)遇到左括号入栈,遇到右括号后,出栈一个符号,看是否配对。若配对,继续,直到读完所有的符号,栈也正好为空。若在中间出现一个不配对的,或者____,则可以得出不配对的结论。 

(2)也可以设计一个返回值为布尔型的函数,参数为要配对的表达式,为一个字符串。

实现源代码如下:

#include <stdio.h>    

#include "sqstack.h"    

    

bool isMatch(char *st)    

{    

    int d=1, i;    

    char c;    

    SqStack *s;    

    InitStack(s);    

    for(i=0; st[i]!='\0'&&d; i++)    

    {    

        switch(st[i])    

        {    

        case'(':    

        case'[':    

        case'{':    

            Push(s, st[i]);    

            break;    

        case')':    

            Pop(s, c);    

            if(c!='(') d=0;    

            c='0';    

            break;    

        case']':    

            Pop(s, c);    

            if(c!='[') d=0;    

            c='0';    

            break;    

        case'}':    

            Pop(s,c);    

            if(c!='{') d=0;    

            c='0';    

            break;    

        }    

    }    

    if(StackEmpty(s)&&d==1)    

        return true;    

    else    

        return false;    

}    

    

int main()    

{    

    

    char st[50];    

    printf("请输入表达式:");    

    scanf("%s", st);    

    if(isMatch(st))    

        printf("配对正确!!\n");    

    else    

        printf("配对错误!!\n");    

    return 0;    

}    

运行结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: