题目描述

请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。

输入

有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。

输出

对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。

样例输入

4
[(d+f)*{}]
[(2+3))
()}
[4(6]7)9

样例输出

yes
no
no
no
解题思路:
加入括号一一配对,则()[] {}左右符号一一对应,也就是说在字符串中间必有一左一右括号相连并且两者对应,说先应该去掉除括号以外的其他字符,然后运用栈依次将左括号存入栈中,遇到右括号时间与栈底符号比较,匹配时间栈的标记元素减一。直到最后若栈的标记元素等零,说明栈中的括号一一匹配。
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct stu{
char s[1010];
int head;
int tail;
}st;
int funz(char s)
{
if(s=='(')
return 1;
else if(s=='[')
 return 2;
else if(s=='{')
 return 3;
else
 return -1;
}
int funy(char s)
{
if(s==')')
return 1;
    else if(s==']')
    return 2;
    else if(s=='}')
     return 3;
     else
     return 0;
}
int main()
{
int i,m,n;
st s1;
char s0;
char s[1010];
scanf("%d",&m);
getchar();
while(m--)
{
  s1.head=s1.tail=0;
  i=0;
  while(scanf("%c",&s0),s0!='\n')
   if(s0=='('||s0==')'||s0=='['||s0==']'||s0=='{'||s0=='}')
     s[i++]=s0;
     s[i]='\0';
     if(strlen(s)%2!=0)
     {
      printf("no\n");
      continue;
 }
       for(i=0;s[i]!='\0';i++)
       {
         if(s[i]=='('||s[i]=='['||s[i]=='{')
            s1.s[s1.tail++]=s[i];
         else if(s[i]==')'||s[i]==']'||s[i]=='}')
             {
              if(funz(s1.s[s1.tail-1])==funy(s[i]))
                s1.tail--;
}
  }
  if(s1.tail==0)
   printf("yes\n");
  else
   printf("no\n");
}
return 0;
}

转载于:https://www.cnblogs.com/weidongya/p/7219798.html

数据结构 栈的应用相关推荐

  1. 数据结构栈队列链表数组

    目录: 数据结构 栈(stack) 队列 链表 数组 数据结构 数据结构是什么 简单来说,数据结构就是设计数据以何种方式存储在计算机中 比如:列表,集合,与字典等都是一种数据结构 程序 = 数据结构 ...

  2. 怎么删除结构体数组中的一组数据_数据结构-栈

    数据结构-栈 1)栈的定义. 栈是只能通过访问它的一端来实数据存储和检索的一种线性数据结构,逻辑结构和线性表相同.特点在于运算有所限制:即主要特征是"后进先出"(先进后出). 在栈 ...

  3. JVM【带着问题去学习 02】数据结构栈+本地方法栈+虚拟机栈+JVM栈运行原理

    1.数据结构栈 栈是一种比较简单的数据结构,后进先出.栈本身是一个线性表,但是这个表中只有一端允许数据的进出.栈的常用操作包括入栈push和出栈pop,对应于数据的压入和弹出.由于栈后进先出的特性,常 ...

  4. php+spl+栈,PHP SPL标准库之数据结构栈(SplStack)介绍

    PHP SPL标准库之数据结构栈(SplStack)介绍2020-06-13 22:01:42 栈(Stack)是一种特殊的线性表,因为它只能在线性表的一端进行插入或删除元素(即进栈和出栈) SplS ...

  5. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现

    是使用递归方法实现回溯算法的,在第一次使用二维矩阵的情况下,又做了一次改一维的优化 但是算法效率仍然差强人意,因为使用递归函数的缘故 下面提供另一种回溯算法的实现,使用数据结构"栈" ...

  6. 数据结构栈和队列_使您的列表更上一层楼:链接列表和队列数据结构

    数据结构栈和队列 When you want to store several elements somewhere in a program, the go-to data type is an a ...

  7. 数据结构栈的知识_数据知识栈

    数据结构栈的知识 并发不适合胆小者 我们都知道并发编程很难正确实现. 这就是为什么在执行线程任务之后要进行大量的设计和代码审查会议. 您永远不会将并发问题分配给经验不足的开发人员. 仔细分析问题空间, ...

  8. java语言链栈_Java语言实现数据结构栈代码详解

    近来复习数据结构,自己动手实现了栈.栈是一种限制插入和删除只能在一个位置上的表.最基本的操作是进栈和出栈,因此,又被叫作"先进后出"表. 首先了解下栈的概念: 栈是限定仅在表头进行 ...

  9. 栈的top指针指向哪里_数据结构-栈

    数据结构-栈 更简单的介绍,在<程序是怎样跑起来的>一书中有简要形象的说明 一.栈的基本概念 栈是一种特殊的线性表,其插入删除操作都只能在表的尾部进行. 栈中允许插入.删除操作的一端称为栈 ...

  10. 数据结构-栈(先进后出表)

    //数据结构-栈(先进后出表) #include<stdio.h> #define MaxSize 100 typedef char ElemType; typedef struct { ...

最新文章

  1. php cookie使用实例h5,html5实现数据存储实例代码
  2. 防止SQL注入解决方案
  3. python求1到n的乘积_Python简单实现两个任意字符串乘积的方法示例
  4. deepin下载软件慢切换镜像
  5. Serverless 如何落地?揭秘阿里核心业务大规模落地实现
  6. 5G改变物联网解决方案的6种方式
  7. 机器学习——决策树的三种学习方法
  8. wins宝塔安装提示已经有php,centOS安装宝塔提示报错
  9. 前出塞数据挖掘的一些必须了解的概念
  10. mysql time转换输出_MySQL将timediff输出转换为日,时,分,秒格式?
  11. 一个计算器--支持去空格
  12. 青岛科技大学C语言程序设计,青岛科技大学c语言试题库
  13. React Native填坑之旅--Button篇
  14. 2020哪款蓝牙耳机更值得入手?新款上市高续航游戏专属蓝牙耳机不要错过
  15. 小米8对一加6打开软件速度测试,小米 8 对决一加 6,谁更值得买?
  16. 中职计算机教学工作随笔,教师随笔日记(精选6篇)
  17. 实验2014062701:opencv对图像的点操作
  18. 【架构思维】:设计服务降级的思路与方法
  19. NI LabVIEW 2018 DAQmx定时属性节点 缺失部分属性的问题 解决方案
  20. 十次方:服务器的1U、2U、U代表什么意思?

热门文章

  1. 【javascript基础】由demo来进阶学习闭包等概念
  2. 实验三 循环结构设计
  3. python 函数(二)
  4. 58.最全正则表达式教程,最好正则表达式教程
  5. 新浪微博客户端(53)-记录用户最近点击表情
  6. java面向对象基础复习
  7. [转] Linux GCC 编译使用
  8. 【代码笔记】iOS-屏幕旋转
  9. windows server 2003断开远程之后自动注销用户
  10. 处理WCF异常的方式