关于用栈解决ACM括号配对问题
来源:互联网 发布:在线抓阄软件 编辑:程序博客网 时间:2024/06/05 04:32
关于括号配对问题:
解题思路:
1)采用顺序栈先把接收字符串,然后从字符串第一个开始入栈,当遇到‘(’‘【’‘{’这三种括号时入栈
2)当遇到另外三边括号时,依次把栈顶元素弹出与之配对,是否配对,不配对设置标志位为0
3)依次配对,空栈配对失败,最后顺利遍历完所有的元素,并且标志位没有改变,那就说明是配对打印出yes
括号配对问题
- 描述
- 现在,有一行括号序列,请你检查这行括号是否配对。
- 输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
- 输出
- 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
- 样例输入
3[(])(])([[]()])
- 样例输出
NoNoYes
代码如下:
#include <stdio.h>
#include <stdbool.h>
#include<string.h>
#define LISTSIZE 100
#define la '('
#define ra ')'
#define lz '['
#define rz ']'
typedef char DataType;
typedef struct Stack {
DataType data[LISTSIZE];
int top; //处了记录大小 还可以记录栈顶位置
}ST;
void init(ST* stack)
{
stack->top = 0;
}
bool empty(ST* stack) {
return stack->top == 0;
}
void push(ST* stack, DataType *d) {
if (stack->top == LISTSIZE)
return;
strcpy(&stack->data[stack->top++],d);
}
void pop(ST* stack) {
if (empty(stack))
return;
stack->top--;
}
DataType topstack(ST* stack) {
return stack->data[stack->top - 1];
}
int main()
{
int i=0,len=0,G=0;
ST stack;
//init(&stack);
bool flag;
char str[100];
printf("input groups N\n");
scanf("%d",&G);
while(G--)
{
flag=1;
scanf("%s",str);
len=strlen(str);
init(&stack);
for(i=0;i<len;i++)
{
if(str[i]=='('||str[i]=='['||str[i]=='{')
{
push(&stack,&str[i]);
}
else if(str[i]==')')
{
if(empty(&stack)!=0||topstack(&stack)!='(')flag=0;
pop(&stack);
}
else if(str[i]==']')
{
if(empty(&stack)!=0||topstack(&stack)!='[')flag=0;
pop(&stack);
}
else if(str[i]=='}')
{
if(empty(&stack)!=0||topstack(&stack)!='{')flag=0;
pop(&stack);
}
}
if(empty(&stack)==0)flag=0;
if(flag)printf("yes!!\n");
else printf("NO!!");
}
return 0;
}
- 关于用栈解决ACM括号配对问题
- 用栈解决括号配对问题
- [ACM]括号配对问题
- acm-括号配对问题
- ACM 括号配对问题
- ACM--括号配对问题
- ACM-括号配对问题
- ACM括号配对问题
- ACM-括号配对问题
- ACM括号配对问题
- ACM括号配对问题
- 小白学ACM-括号配对问题(栈实现)
- ACM 括号配对问题 Java
- ACM—括号配对问题
- ACM练习:括号配对问题
- 括号配对问题 -- ACM解决方法
- acm基础--括号配对问题
- 括号配对问题 ACM 数据结构
- ORA-24777: 不允许使用不可移植的数据库链路
- 事件 带参数 和 不带参数 的执行代码
- iOS中assign,copy,retain之间的区别以及weak和strong的区别
- 领域驱动设计之领域模型
- Jquery学习之旅之CSS类的设置和移除
- 关于用栈解决ACM括号配对问题
- 欢迎使用CSDN-markdown编辑器
- WOJ 1608 Calculation
- 使用python实现可重入的公平读写锁
- git代码库回滚
- Linux下命令整理
- [问题记录.VisualStudio]TFS项目映射问题解决
- UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
- 谷歌Gson工具类