NYOJ 2 括号配对问题 模拟栈【解析算法】

原创 2015年11月18日 10:55:27

括号配对问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No

Yes

来源
网络
上传者
naonao

模拟栈
 
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct Sstack
{
    char sign[10010];
    int top;
};
void initstack(Sstack &s)
{
    s.top=-1;
}
bool isemptystack(Sstack &s)
{
    return s.top==-1?1:0;
}
int pushstack(Sstack &s,char c)
{
    s.sign[++s.top]=c;
    return 1;
}
int popstack(Sstack &s)
{  if(isemptystack(s))
   return 0;
    s.top--;
    return 1;

}
char topstack(Sstack &s)
{
    if(isemptystack(s))
    return 0;
    return s.sign[s.top];
}
int main()
{
    Sstack s;
    char a[10010];
    int n,i,bj,len;
    scanf("%d",&n);
    while(n--)
    {   bj=1;
        initstack(s);
        memset(a,0,sizeof(a));
        scanf("%s",a);
        len=strlen(a);
        for(i=0;i<len;i++)
        {
            if(a[i]=='['||a[i]=='(')
               pushstack(s,a[i]);
            else if(a[i]==']')
            {
                if(isemptystack(s)||topstack(s)!='[') bj=0;
                else popstack(s);
            }
            else if(a[i]==')')
            {
                if(isemptystack(s)||topstack(s)!='(') bj=0;
                else popstack(s);

            }
        }
        if(!isemptystack(s))
        bj=0;
        if(bj==1)
        printf("Yes\n");
        else
        printf("No\n");
    }
}
        



版权声明:本文为博主原创文章,未经博主允许不得转载。

NYOJ2 括号配对问题(栈的运用)

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(...
  • xky140610205
  • xky140610205
  • 2016年09月20日 19:59
  • 302

nyoj括号配对问题

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0输出每组...
  • qq_28175337
  • qq_28175337
  • 2015年07月27日 10:01
  • 562

栈用于解决括号匹配问题

在编写程序的过程中,我们经常需要对一串括号是否匹配进行判断。如何判断呢?我们可以借助栈来进行判断。基本思路是:遍历字符串,当发现有右括号而此时的栈顶元素又恰好是与之匹配的左括号时,则栈顶元素出栈;其余...
  • kelvinmao
  • kelvinmao
  • 2016年04月07日 23:01
  • 1333

括号匹配问题(不用栈,用数组)

不用模板栈的话,就是建立一个数组,输入若是左括号,则入栈,stack[++top]=a[i],top为栈顶元素的指针,若是右括号,则出栈,stack[top--]。 此处关键是自增符号的顺序,为什么...
  • Scarlett_geng
  • Scarlett_geng
  • 2016年05月11日 21:07
  • 1018

关于用栈解决ACM括号配对问题

关于括号配对问题: 解题思路: 1)采用顺序栈先把接收字符串,然后从字符串第一个开始入栈,当遇到‘(’‘【’‘{’这三种括号时入栈 2)当遇到另外三边括号时,依次把栈顶元素弹出与之配对,是否配对...
  • ckkboy
  • ckkboy
  • 2016年04月18日 17:19
  • 251

nyoj 2 括号配对 栈

#include #include #include using namespace std; char a; int main() { int n; scanf("%d",&n); getch...
  • y5408
  • y5408
  • 2016年07月18日 21:27
  • 84

c++ 括号匹配

主要是利用栈进行入栈出栈匹配,代码如下: #include #include using namespace std; #define STACK_SIZE 100 struct ...
  • fwb330198372
  • fwb330198372
  • 2016年04月07日 14:32
  • 1908

NYOJ 2 括号配对 【栈】

原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2        此题用到了栈,如果是左括号就让他进栈,右括号就要和栈顶元素比较,看是否可...
  • PIAOYI0208
  • PIAOYI0208
  • 2012年02月18日 20:50
  • 508

[ACM] 括号匹配问题(栈的使用)

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0...
  • sr19930829
  • sr19930829
  • 2014年04月05日 13:18
  • 2537

nyoj 括号配对问题(栈)

括号配对问题                                     时间限制:3000 ms  |  内存限制:65535 KB                         ...
  • qingkong5886
  • qingkong5886
  • 2015年07月27日 16:42
  • 181
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NYOJ 2 括号配对问题 模拟栈【解析算法】
举报原因:
原因补充:

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