栈遵循先进后出的原则

括号配对问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
 
描述
现在,有一行括号序列,请你检查这行括号是否配对。
 
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes 数组模拟:
#include<stdio.h>
#include<string.h>
#define MAX 101000
char zhan[MAX],str[MAX];
int main()
{
int n,m,j,i,l,sum;
int top;//指向栈低
scanf("%d",&n);
getchar();
while(n--)
{
gets(str);
l=strlen(str);
top=0;
for(i=0;i<l;i++)
{
if(str[i]=='['||str[i]=='(')
{
zhan[top++]=str[i]; //存栈
}
else
{
if(str[i]==']'&&zhan[top-1]=='['||str[i]==')'&&zhan[top-1]=='(')//因为此时当s[i]=']'或')'时一定有它上一位的[或(与其配对
{
top--;//如果配对成功则此组出栈(即从栈中删除) top--
}
else
{
top++;
break;
}
}
}
if(top==0)//代表所有的都能配对
printf("Yes\n");
else
printf("No\n");
}
return 0;
}

  STL实现:

#include<stdio.h>
#include<string.h>
#include<stack>
#define MAX 10010
using namespace std;
int main()
{
int n,m,j,i,t,len;
stack<char>s;
char str[MAX];
scanf("%d",&t);
getchar();
while(t--)
{
gets(str);
len=strlen(str);
if(len&1)
{
printf("No\n");
continue;
}
if(str[0]==']'||str[0]==')')
{
printf("No\n");
continue;
}
s.push(str[0]);
for(i=1;i<len;i++)
{
if(s.size()==0)//注意这个地方需要判断当未输入完成时
{ //若栈为空 则任要向栈顶压入元素
s.push(str[i]);
continue;
}
if(s.top()=='['&&str[i]==']'||s.top()=='('&&str[i]==')')
s.pop();
else
s.push(str[i]);
}
if(s.empty())
printf("Yes\n");
else
printf("No\n");
while(!s.empty())//注意这里要将栈清空
s.pop();
}
return 0;
}

  

  

  

hdoj 2 括号配对问题【数组模拟实现+STL实现】的更多相关文章

  1. NYOJ 2 括号配对问题 (模拟)

    题目链接 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个字符串S ...

  2. 二叉搜索树的两种实现(数组模拟,STL)

    书上实现: 二叉搜索数的特点:高效实现 插入一个数值,查询是否包含某个数值,删除某一个数值. 所有的节点都满足左子树上的所有节点都比自己的小,而右子树上的所有节点都比自己大的特点. 查询:如果当前数值 ...

  3. 用数组模拟STL中的srack(栈)和queue(队列)

    我们在理解stack和queue的基础上可以用数组来代替这两个容器,因为STL中的stack和queue有可能会导致程序运行起来非常的慢,爆TLE,所以我们使用数组来模拟他们,不仅可以更快,还可以让代 ...

  4. Num 15: NYOJ: 题目0002 : 括号配对问题 [ 栈(stack) ]

    原题连接      首先要了解有关栈的一些基本知识,即:      什么是栈,栈有什么作用:        1.什么是栈: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...

  5. 括号配对问题_栈<stack>

    问题 A: 括号配对问题 时间限制: 3 Sec  内存限制: 128 MB提交: 3  解决: 2[提交][状态][讨论版] 题目描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行 ...

  6. 括号配对问题--nyoj-2(栈)

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0<N<=10 ...

  7. HIT 2715 - Matrix3 - [最小费用最大流][数组模拟邻接表MCMF模板]

    题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2715 Time limit : 5 sec Memory limit : 64 M Zhouguyue ...

  8. stl-stack+括号配对问题

    栈:stl的一种容器,遵循先进后出原则,,只能在栈的顶部操作,就像放盘子一样,洗好的盘子叠在上面,需要用时也是先从顶部拿.不允许被遍历,没有迭代器 基本操作: 1.头文件#include<sta ...

  9. ACM:UESTC - 649 括号配对问题 - stack

      UESTC - 649  括号配对问题 Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu ...

随机推荐

  1. vs git .ignore

    ## Ignore Visual Studio temporary files, build results, and## files generated by popular Visual Stud ...

  2. java连接oracle数据库的实现代码

    package connectionOracleDatabase; import java.sql.Connection; import java.sql.DatabaseMetaData; impo ...

  3. bzoj 1133: [POI2009]Kon dp

    1133: [POI2009]Kon Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 242  Solved: 81[Submit][Status][D ...

  4. 新增tab页无法获取到数据,原来是URL的rewrite配置文件忘了修改

    昨天怎么也不明白为什么就是不能短网址访问,而且更迷惑的是居然数据也获取不到. 今天早上在网上搜ThinkPHP,想学习下这个框架.虽然知道是MVC模式,但是URL数据传递到底有什么阀门是我尚未了解到的 ...

  5. Windows下虚拟Linux

    andlinux cygwin virtualbox VMware XenServer

  6. easyui源码翻译1.32--Slider(滑动条)

    前言 使用$.fn.slider.defaults重写默认值对象.下载该插件翻译源码 滑动条允许用户从一个有限的范围内选择一个数值.当滑块控件沿着轨道移动的时候,将会显示一个提示来表示当前值.用户可以 ...

  7. eCos驱动分析 之 ISR是如何与硬件中断联系起来的?

    http://keendawn.blog.163.com/blog/static/8888074320116205833478/

  8. Java异常处理之throws抛出异常

    package com.test; import java.io.FileReader; public class Test2 { public static void main(String[] a ...

  9. ANDROID_MARS学习笔记_S01原始版_016_Service

    一.代码1.xml(1)main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  10. 产品不应该大而全,而是应该小而精(DropBox有感,产品要1分钟学会)

    昨天试用了一下DROPBOX的个人版,对它的功能与界面简单深感震惊. 后来与一位业内朋友交流了一下,他说: 产品一般都是通过一个点来做.把一个点做到最好有可能会成为平台.另外还要在合适的时间做合适的事 ...