暑假集训7.28 各种模拟栈 sdutoj2134 括号匹配

原创 2016年07月28日 20:35:05

数据结构实验之栈四:括号匹配

Time Limit: 1000MS Memory limit: 65536K

题目描述

 给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。

输入

 输入数据有多组,处理到文件结束。

输出

 如果匹配就输出“yes”,不匹配输出“no”

示例输入

sin(20+10)
{[}]

示例输出

yes
no

///模拟栈.....

///注意gets()函数在最新的标准里已经没有了....强行gets()....主要是怕没有结束标志而无限输入....

///题目很好理解 碰见左半部分入栈 碰见右半部分 比较栈顶元素,for循环之后判断栈是否为空就好了

///Accode

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
#define maxsize 100
#define ll long long
typedef struct Stack
{
    int Size;
    char *top,*base;///equal  int base[]
} Stack;


bool Empty(Stack &s)
{
    if (s.top == s.base)
    {
        return 1;
    }
    return 0;
}


void Creat(Stack &s)
{
    s.base=new char[maxsize];///?
    s.top=s.base;
    s.Size=maxsize;
}


void push(Stack &s,char e[])
{
    if (s.top-s.base >= s.Size)
    {
        s.base=(char *)realloc(s.base,2*maxsize*sizeof(Stack));
        s.Size+=maxsize;
        ///s.top=s.base+s.Size;
    }
    s.top++;
    *s.top=e[0];
}


void pop(Stack &s)
{
    if (s.top != s.base)
    {
        s.top--;
    }
}


void print(Stack &s)
{
    while (!Empty(s))
    {
        cout<<*s.top;
        pop(s);
    }
    cout<<endl;
}


void Clear(Stack &s)
{
    while (!Empty(s))
    {
        pop(s);
    }
}

int check(Stack &s,char str[])
{
    int i;
    for (i=0; str[i]; i++)
    {
        if (str[i]=='{')
        {
            push(s,"{");
        }
        else  if (str[i]=='[')
        {
            push(s,"[");
        }
        else  if (str[i]=='(')
        {
            push(s,"(");
        }
        else if (str[i]=='}')
        {
            if (*s.top!='{')
            {
                return 0;
            }
            else
            {
                pop(s);
            }
        }
        else if (str[i]==']')
        {
            if (*s.top!='[')
            {
                return 0;
            }
            else
            {
                pop(s);
            }
        }
        else if (str[i]==')')
        {
            if (*s.top!='(')
            {
                return 0;
            }
            else
            {
                pop(s);
            }
        }
    }
    if (Empty(s))
    {
    return 1;
    }
    return 0;
}
int main()
{


    char str[55];
    while (gets(str)!=NULL)
    {
        Stack s;
        Creat(s);
        if (check(s,str)==1)
        {
            cout<<"yes"<<endl;
        }
        else cout<<"no"<<endl;
    }
    return 0;
}


版权声明:有错误麻烦赐教,感激不尽~~~(转载留言哦~)

括号匹配问题,用栈实现

用栈实现括号匹配其实是一个很简单的问题,思路在代码注释里面写的很清楚了,只是接口设置的好像不太好。 如果在main里面设置的str不是动态分布的,在linux下就会出错,不知道windows会不会出问...
  • guang_jing
  • guang_jing
  • 2014年05月06日 14:31
  • 2312

数据结构实验之栈四:括号匹配(栈的运用)

数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给你一串字符,不超过50个字符,...
  • jert159
  • jert159
  • 2014年08月11日 21:26
  • 1163

利用栈实现括号匹配算法!

#include #include //malloc,realloc #include //含有overflow #include //exit() #define S_SIZE...
  • Sun19910114
  • Sun19910114
  • 2014年09月12日 08:41
  • 2152

数据结构——栈——括号匹配(c++)

同样是用栈模板写的,实现上比慕课网上讲的简单一些,没有定义两个栈,而是直接判断是否是左括号,是的话就在MyStack中push另一半括号;如果是右括号且又不是需要的括号,就直接打印不匹配,如果是需要的...
  • ricefrant
  • ricefrant
  • 2016年10月07日 17:55
  • 1278

利用栈判断括号是否匹配

1.利用栈判断括号是否匹配 2.源码 /* 1.判断表达式中的括号是否匹配 */ #include #include #define maxSize 1000 typedef struc...
  • liu16659
  • liu16659
  • 2017年04月17日 21:10
  • 816

【数据结构】用栈实现括号匹配的检验

用栈实现括号匹配的检验.cpp #include #include using namespace std; typedef char SElemType; typedef struct {  S...
  • qq_32353771
  • qq_32353771
  • 2015年11月10日 14:53
  • 3165

c语言栈实现括号匹配

在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个表达式中的括号是否相匹配? 匹配思想:从左至右扫描一个字符串(或表达式),则每个右括号将与最近遇到的那个左括号相匹配。则可以在从左至右扫描...
  • lym152898
  • lym152898
  • 2016年08月12日 03:02
  • 5342

【数据结构栈应用系列】括号匹配

括号匹配算法在各种编程的IDE工具中都会用到,用来检测关于括号匹配的语法错误,括号匹配实际上不复杂,主要就是利用栈这个数据结构,扫描输入的字符串,若遇到左括号则直接入栈,若遇到右括号则弹出栈顶括号,看...
  • htq__
  • htq__
  • 2016年03月26日 16:59
  • 11937

Java 用栈解决括号匹配问题

在南阳理工ACM看到的一道题 问题描述:问题描述 : 输入一个字符串 里面只含有 [ , ] , ( , ) 四种括号 ; 现要求判断这个字符串 是否满足括号匹配  如    ([])()    ...
  • qq_26331127
  • qq_26331127
  • 2015年12月08日 17:55
  • 3772

链栈的简单实现及括号匹配问题的链栈解决方法

链栈的简单实现及括号匹配问题的链栈解决方法
  • zuiailongkui_yanghl
  • zuiailongkui_yanghl
  • 2015年04月03日 20:39
  • 836
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:暑假集训7.28 各种模拟栈 sdutoj2134 括号匹配
举报原因:
原因补充:

(最多只允许输入30个字)