暑假集训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;
}


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

相关文章推荐

暑假集训 8.6 sdutoj2484 算术表达式的转换(模拟栈;前中后缀转换)

算术表达式的转换 Time Limit: 1000MS Memory limit: 65536K 题目描述 小明在学习了数据结构之后,突然想起了以前没有解决的算术表达式转化成后缀式的问...

暑假集训7.29 一般表达式转换后缀表达式(手写模拟栈....)sdutoj2132

#include #include using namespace std; typedef struct Stack { char *top,*base; int Size; ...

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

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

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

数据结构实验之栈四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript...

暑假集训 8.2 双向队列的手写与STL sdutoj1466 双向队列

双向队列 Time Limit: 1000MS Memory limit: 65536K 题目描述       想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队...

暑假集训 8.3 数据结构 串的操作 sdutoj2463学密码学一定得学程序

学密码学一定得学程序 Time Limit: 1000MS Memory limit: 65536K 题目描述 曾经,ZYJ同学非常喜欢密码学。有一天,他发现了一个很长很长的字符...

暑假集训 8.12 sdutoj3375 数据结构实验之查找三:树的种类统计 (简单字符排序二叉树)

数据结构实验之查找三:树的种类统计 Time Limit: 400ms   Memory limit: 65536K  题目描述 随着卫星成像技术的应用,自然资源研究机构可以识别每...

暑假集训 8.22 数据结构实验:哈希表 sdutoj1480

数据结构实验:哈希表 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  在n个数中,找出出现次数最多那个数字,并...

暑假集训 8.16 sdutoj3642 判断给定森林中有多少棵树特别版 (简单考查邻接表)

判断给定森林中有多少棵树特别版 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  众人皆知,在编程领域中,C++...

暑假集训8.10 sdutoj2482 二叉排序树 (是否为同一颗排序树)

二叉排序树 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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