数据结构实验之栈与队列四:括号匹配

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。

Input

输入数据有多组,处理到文件结束。

Output

如果匹配就输出“yes”,不匹配输出“no”

Sample Input

sin(20+10)
{[}]

Sample Output

yes

no

Hint

Source

ma6174

括号匹配,栈的经典题目,将左括号入站,然后遇到右括号就询问栈顶是不是与之相匹配的左括号,如果是,出栈,不是,匹配失败。

注意这个题目是多组输入,而且包含空格,所以需要用 gets读入。

#include <stdio.h>
#include <stdlib.h>
#include <string.h> typedef struct node
{
char data;
struct node *next;
}Node; typedef struct stack
{
Node *base,*top;
}Stack; Node *newnode()//建立节点
{
Node *t;
t = (Node *)malloc(sizeof(Node));
t->next = NULL;
return t;
}; Stack *Newstack()//建立新栈
{
Stack *t;
t = (Stack *)malloc(sizeof(Stack));
t->top = newnode();
t->base = t->top;
return t;
} void push(Stack *t,char x)//入站
{
Node *p = newnode();
p->data = x;
p->next = t->top->next;
t->top->next = p;
t->base = p;
} char top(Stack *t)//询问栈顶元素
{
return t->top->next->data;
} void pop(Stack *t)//出栈
{
Node *p;
p = t->top->next;
t->top->next = t->top->next->next;
free(p);
} int empty(Stack *t)//询问栈是否为空
{
if(t->top->next==NULL)
return 1;
return 0;
} void del(Stack *t)//清空栈
{
while(!empty(t))
pop(t);
} int main()
{
char s[55];
Stack *t;
int n,i;
t = Newstack();
while(gets(s)!=NULL)
{
n = strlen(s);
for(i=0;i<n;i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
push(t,s[i]);
else if(s[i]==')'||s[i]=='}'||s[i]==']')
{
if(empty(t))
break;
else
{
if(s[i]==')'&&top(t)!='(')
break;
else if(s[i]=='}'&&top(t)!='{')
break;
else if(s[i]==']'&&top(t)!='[')
break;
else
pop(t);
}
}
}
if(i!=n)
printf("no\n");
else
{
if(!empty(t))//注意最后要判定是否所有的左括号都已经匹配
printf("no\n");
else
printf("yes\n");
}
del(t);
}
return 0;
}

线性表

#include <stdio.h>
#include <stdlib.h>
#include <string.h> typedef struct Stack
{
char *top,*base;
}Stack; Stack newStack()
{
Stack t;
t.top = (char *)malloc(100050*sizeof(char));
t.base = t.top;
return t;
} void push(Stack *t,char x)
{
*(t->top++) = x;
} char top(Stack t)
{
return *(t.top-1);
} void pop(Stack *t)
{
t->top--;
} int Empty(Stack t)
{
if(t.top==t.base)
return 1;
return 0;
} void del(Stack *t)
{
while(!Empty(*t))
pop(t);
} int main()
{
char s[55];
Stack t;
int n,i;
t = newStack();
while(gets(s)!=NULL)
{
n = strlen(s);
del(&t);
for(i=0;i<n;i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{')
push(&t,s[i]);
else if(s[i]==')')
{
if(Empty(t)||top(t)!='(')
break;
else
pop(&t);
}
else if(s[i]==']')
{
if(Empty(t)||top(t)!='[')
break;
else
pop(&t);
}
else if(s[i]=='}')
{
if(Empty(t)||top(t)!='{')
break;
else
pop(&t);
}
}
if(i!=n||!Empty(t))
printf("no\n");
else
printf("yes\n");
}
return 0;
}

SDUT-2134_数据结构实验之栈与队列四:括号匹配的更多相关文章

  1. 数据结构实验之栈与队列四:括号匹配(SDUT 2134)

    #include <bits/stdc++.h> using namespace std; typedef long long ll; char s[100]; char a[100]; ...

  2. SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场

    数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发 ...

  3. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

  4. SDUT-1479_数据结构实验之栈与队列九:行编辑器

    数据结构实验之栈与队列九:行编辑器 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个简单的行编辑程序的功能是:接受用 ...

  5. SDUT-3335_数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具 ...

  6. SDUT-3334_数据结构实验之栈与队列七:出栈序列判定

    数据结构实验之栈与队列七:出栈序列判定 Time Limit: 30 ms Memory Limit: 1000 KiB Problem Description 给一个初始的入栈序列,其次序即为元素的 ...

  7. SDUT-3332&3333_数据结构实验之栈与队列五:下一较大值

    数据结构实验之栈与队列六:下一较大值 Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 对于包含n(1<=n<=1 ...

  8. SDUT-2133_数据结构实验之栈与队列三:后缀式求值

    数据结构实验之栈与队列三:后缀式求值 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运算符的后缀表示式 ...

  9. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

随机推荐

  1. JS简单实现:根据奖品权重计算中奖概率实现抽奖的方法

    本文主要介绍:使用 JS 根据奖品权重计算中奖概率实现抽奖的方法. 一.示例场景 1.1.设置抽奖活动的奖项名称 奖项名称:["一等奖", "二等奖", &qu ...

  2. JavaScript类型转换规则

    注:JavaScript相对于其他强类型(如c,c++,java,定义变量的同时申明变量类型)语言来说,是弱类型和松散型(在定义的时候不需要申明变量类型,在使用的时候才赋值给她什么类型就是什么类型.所 ...

  3. springmvc 使用poi解析excel并通过hibernate连续插入多条数据 实际数据库只能保存最后一条

    有一个原始数据的excel表 用poi解析之后通过hibernate插数据库 结果 后来发现,有人说 果断尝试 问题解决 但是这好像并不是真正解决问题,只是解决了一个现象 因为有人说 https:// ...

  4. org.hibernate.service.ServiceRegistryBuilder被弃用

    看视频教程是这样写的: //创建配置对象 Configuration config = new Configuration().configure(); //创建服务注册对象 ServiceRegis ...

  5. Django项目:CRM(客户关系管理系统)--08--03PerfectCRM创建基本数据03

    如果感觉本章博客对您有帮助,请尽情打赏吧!

  6. Listview的条目item内的点击响应事件

    还是这张图 这里的历史列表就是一个ListView,抛开该界面中ScrollView或者RecycleView与该ListView会有冲突,所谓的冲突,说白了就是父控件与子控件两者间的关系冲突,该冲突 ...

  7. PLSql 查询结果让数字显示为字符

    有时候某些地段太长的话就会默认显示为数字,例如ID字段过长就会显示为4.34E23的形式,遇到这样情况如何还原id字段的本身形式呢? Tools-->preference-->SQL Wi ...

  8. 【SDOI2017】套路总结

    1 第一题是裸的反演: \[\begin{align} Ans&=\prod_{i=1}^n\prod_{j=1}^ma[(i,j)]\\ &=\prod_{d=1}^na[d]^{f ...

  9. springboot-mybatis双数据源配置

    yml文件 spring: datasource: test1: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost: ...

  10. koa上传excel文件并解析

    1.中间键使用 koa-body npm install koa-body --save const koaBody = require('koa-body'); app.use(koaBody({ ...