【算法】括号配对与先输入后打印

括号配对:假设一个数学算式中包括圆括号"()",方括号”[]"和花括号“{}”三种类型,编写一算法判断表达式的括号是否配对。

参考1题目解析:

https://blog.csdn.net/tongxinhaonan/article/details/26596959?utm_source=blogxgwz4

参考2栈讲解,含经典例子和递归汉诺塔:

https://wenku.baidu.com/view/ab87615382c4bb4cf7ec4afe04a1b0717fd5b3db.html

 

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include "string.h"
/*宏定义和链栈类型定义*/
typedef char DataType;
#include "LinkStack.h"    //包括链栈实现文件
int Match(DataType e,DataType ch);    //检验括号是否配对函数
int main()
{
    LinkStack S;
    char *p;
    DataType e;
    DataType ch[60];
    InitStack(&S);    //初始化链栈
    printf("请输入带括号的表达式");
    gets(ch);
    p=ch;
    while(*p)
    {
        switch(*p)
        {
        case '(':
        case '[':
        case '{':
            PushStack(S,*p++);
            break;
        case ')':
        case ']':
        case '}':
            if (StackEmpty(S))
            {
                printf("缺少左括号。\n");
                return 0;
            }
            else
            {
                GetTop(S,&e);
                if (Match(e,*p))
                {
                    PopStack(S,&e);
                }
                else
                {
                    printf("左括号不配对\n");
                    return 0;
                }
            }
        default:    //如果是其他字符,则不处理,直接指向下一个字符
            p++;
        }
    }
    if (StackEmpty(S))
    {
        printf("括号匹配\n");
        return 1;
    } 
    else
    {
        printf("缺少右括号\n");
        return 0;
    }
}
int Match(DataType e,DataType ch)
{
    if (e=='('&&ch==')')
    {
        return 1;
    } 
    else if (e=='['&&ch==']')
    {
        return 1;
    } 
    else if (e=='{'&&ch=='}')
    {
        return 1;
    }
    else
    {
        return 0;
    }
 
}

 

posted on 2019-03-12 14:11  时间静止之湖  阅读(246)  评论(0编辑  收藏  举报

导航