博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Num 15: NYOJ: 题目0002 : 括号配对问题 [ 栈(stack) ]
阅读量:7229 次
发布时间:2019-06-29

本文共 2829 字,大约阅读时间需要 9 分钟。

     首先要了解有关栈的一些基本知识,即:

     什么是栈,栈有什么作用;

       1、什么是栈:

     仅同意在表的一端进行插入和删除运算。

( 先进后出的一种数据结构形式 )。

     这一端被称为栈顶( top )。相对地,把还有一端称为栈底( bottom );

     向一个栈插入新元素又称作进栈( push )、入栈或压栈。它是把新元素放到栈顶元素的上面。使之成为新的栈顶元素;

     从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉( pop )。使其相邻的元素成为新的栈顶元素。

       简单地说,就是在不满足取出条件的时候,新元素压栈。

       一直到满足条件后,退栈。一直到一组数据的最后一个元素;

       2、栈的作用:

     用来在函数调用的时候存储断点。做递归时要用到栈;

题目 :  )

括号配对问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描写叙述
如今。有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组測试数据。后面的N行输入多组输入数据。每组输入数据都是一个字符串S(S的长度小于10000。且S不是空串)。測试数据组数少于5组。

数据保证S中仅仅含有"[","]","(",")"四种字符

输出
每组输入数据的输出占一行,假设该字符串中所含的括号是配对的。则输出Yes,假设不配对则输出No
例子输入
3[(])(])([[]()])
例子输出
NoNoYes

       分析:

      1. 进栈条件: 假设 s[ i ] 是 “(” 或者 " [ " 的时候;

      2. 出栈条件: 假设碰到配对的括号;

AC代码:

#include
#include
#include
char a[11000],b[11000];//b即stack。int main(){ int n; scanf("%d",&n); getchar();//屏蔽回车; while(n--) { int len,top=1,i; gets(a); b[top++]=a[0]; len=strlen(a); if((a[0]!='[')&&(a[0]!='(')||(len%2==1)) printf("No\n");//若第一个元素为")"或"]"输入个数为奇数,No。 else { for(i=1; i

当然,栈的问题也能够转化为通过数组模拟栈来解决:

AC代码( 数组 ):

#include
#include
char s[11000],c[11000];int main(){ int t; int len; int i,j,k; int top; scanf("%d",&t); getchar(); while(t--) { gets(s); len=strlen(s); if(len%2==1) printf("No\n"); else { top=1; c[0]=s[0]; if(c[0]==']'||c[0]==')') printf("No\n"); else { for(i=1;i

       这道题仅仅是对栈的简单应用,另外C++头文件stack中包括有栈处理函数。大家有空能够学习一下STL;

       这里仅给出C语言中对栈的定义方法 ( 以整形数据处理为例 ) [ 感谢度娘 T T ]:

#include
#include
#define DataType int#define MAXSIZE 1024typedef struct{DataType data[MAXSIZE];int top;}SeqStack;SeqStack*Init_SeqStack()//栈初始化{SeqStack*s;s=(SeqStack*)malloc(sizeof(SeqStack));if(!s){printf("空间不足\n");return NULL;}else{s->top=-1;return s;}}int Empty_SeqStack(SeqStack *s)//判栈空{if(s->top==-1)return 1;elsereturn 0;}int Push_SeqStack(SeqStack *s,DataType x)//入栈{if(s->top==MAXSIZE-1)return 0;//栈满不能入栈else{s->top++;s->data[s->top]=x;return 1;}}int Pop_SeqStack(SeqStack *s,DataType *x)//出栈{if(Empty_SeqStack(s))return 0;//栈空不能出栈else{*x=s->data[s->top];s->top--;return 1;}//栈顶元素存入*x。返回}DataType Top_SeqStack(SeqStack *s)//取栈顶元素{if(Empty_SeqStack(s))return 0;//栈空elsereturn s->data[s->top];}int Print_SeqStack(SeqStack *s){int i;printf("当前栈中的元素:\n");for(i=s->top;i>=0;i--)printf("%3d",s->data[i]);printf("\n");return 0;}int main(){SeqStack*L;int n,num,m;int i;L=Init_SeqStack();printf("初始化完毕\n");printf("栈空:%d\n",Empty_SeqStack(L));printf("请输入入栈元素个数:\n");scanf("%d",&n);printf("请输入要入栈的%d个元素:\n",n);for(i=0;i

定义stack的简单代码:

stack<int> sta;
入栈:sta.push(x);
出栈:sta.pop();
推断栈的大小: sta.size( );
推断栈是否为空:sta.empty( );

你可能感兴趣的文章
文件操作命令一cp 2
查看>>
Multi-Mechanize工程目录结构说明
查看>>
halt
查看>>
标准ACL+扩展ACL+命名ACL
查看>>
Meteor应用的启动过程分析
查看>>
九曲黄河万里沙,浪淘风簸自天涯 — 正则表达式
查看>>
欲哭无泪,联想笔记本性价比
查看>>
很简单的在Ubuntu系统下安装字体和切换默认字体的方法
查看>>
我的友情链接
查看>>
dojo框架用hitch实现函数与上下文的绑定
查看>>
ubuntu编译安装vim7.4
查看>>
python之利用PIL库实现页面的图片验证码及缩略图
查看>>
IP-COM设置×××
查看>>
VPC配置案例
查看>>
十年IT运维谈(五):要专业化还是平台化?
查看>>
分享超级给力的一个外发光Shader
查看>>
oblog_4.6_SQL 语句
查看>>
通过Git WebHooks+脚本实现自动更新发布代码之shell脚本
查看>>
对象实例化、字符串的使用方法
查看>>
keepalived基于LVS实现高可用,实现web服务的高可用
查看>>