zoukankan      html  css  js  c++  java
  • YTU 3003: 括号匹配(栈和队列)

    3003: 括号匹配(栈和队列)

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 2  解决: 2
    [提交][状态][讨论版]

    题目描述

    假设一个表达式中只允许包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用如:(…[{… …[]}[]()…]…)。设计一个算法,判断表达式中的括号是否正确配对。输出结果为Yes或者No。

     

    顺序栈的定义为

    typedef struct
    {
        char date[Max];
        int top;
    } Spstack;
      
     
    需编写的算法为int solve(char *a,Spstack *st);
     
    可使用的函数有:
    1、bool Pop(Spstack *&s,char &e);    //出栈
    2、bool GetTop(Spstack *s,char &e); //取栈顶元素
    3、bool Push(Spstack *&s,char e);     //入栈
    4、bool StackEmpty(Spstack *s);        //判断是否为空栈
      
    括号匹配正确返回1,否则返回0。其中a为该表达式,st为一个空栈。

    输入

    {[][]()([])}[]()

    输出

    Yes

    样例输入

    {[()[]][}]

    样例输出

    No

    提示

    1、注意括号匹配问题


    2、只需提交你所编写的算法


    迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……

    #include <stdio.h>
    #define Max 105
    typedef struct
    {
        char date[Max];
        int top;
    } Spstack;
    void InitStack(Spstack *&s)
    {
        s= new Spstack;
        s->top=-1;
    }
    bool StackEmpty(Spstack *s)
    {
        return(s->top==-1);
    }
    bool Push(Spstack *&s,char e)
    {
        if(s->top==Max-1)return false;
        s->top++;
        s->date[s->top]=e;
        return true;
    }
    bool GetTop(Spstack *s,char &e)
    {
        if(s->top==-1)return false;
        e=s->date[s->top];
        return true;
    }
    bool Pop(Spstack *&s,char &e)
    {
        if(s->top==-1)return false;
        e=s->date[s->top];
        s->top--;
        return true;
    }
    void DestroyStack(Spstack * &s)
    {
        delete(s);
    }int solve(char *a,Spstack *st)
    {
        int i=0,match=1;
        char e;
        while(a[i]!=''&&match)
        {
            if(a[i]=='('||a[i]=='{'||a[i]=='[')Push(st,a[i]);
            else if(a[i]==')'||a[i]=='}'||a[i]==']')
            {
                if(a[i]==')'&&GetTop(st,e)==true)
                {
                    if(e!='(') match=false;
                    else Pop(st,e);
                }
                else if(a[i]=='}'&&GetTop(st,e)==true)
                {
                    if(e!='{') match=false;
                    else Pop(st,e);
                }
                else if(a[i]==']'&&GetTop(st,e)==true)
                {
                    if(e!='[') match=false;
                    else Pop(st,e);
                }
                else  match=false;
            }
            i++;
        }
        if(!StackEmpty(st))match=false;
        return match;
    }
    int main()
    {
        char a[100];
        bool match;
        Spstack *st;
        InitStack(st);
        gets(a);
        match=solve(a,st);
        DestroyStack(st);
        if(match)printf("Yes
    ");
        else printf("No
    ");
        return 0;
    }

  • 相关阅读:
    Apache安装与属性配置
    Web服务及http协议
    转-httpd 2.4.4 + mysql-5.5.28 + php-5.4.13编译安装过程
    LAMP理论整理
    Rhel6-csync配置文档
    转载Eclipse中Maven WEB工程tomcat项目添加调试
    转载--eclipse git插件安装
    l连接远程桌面
    Aphache VFS
    JMS-activeMQ
  • 原文地址:https://www.cnblogs.com/im0qianqian/p/5989393.html
Copyright © 2011-2022 走看看