实验题目:
给定字符串,仅包含’(‘,’)’,’{’,’}’,’[’,’]'六种字符,判断括号是否匹配
匹配规则如下
每一个左括号必须和相同类型的右括号匹配
左括号必须以正确的顺序闭合
空字符串也认为是成功匹配的字符串
输入:一个只包含上述六种字符的字符串
输出:括号匹配输出1,否则输出0

算法思路:

  1. 用gets_s()函数获取输入的字符串;
  2. 创建一个bool函数,用来判断括号是否匹配;
  3. 创建一个空栈;
  4. 依次遍历字符串,先把左括号放进栈内;
  5. 如果遍历到右括号,而同时前一个push入栈内的左括号与其相匹配,那么就把左括号pop出栈
  6. 如果最后栈为空,那么说明全都匹配成功,输出1,否则输出0。

代码:

//.按“3.2.2 括号匹配的检验”中的思路,写一个函数“bool check(char* line)”
//检查输入的字符串line中的括号是否匹配,不匹配则check函数返回false,否则返回true#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACKLENGTH 20char stack[STACKLENGTH];
int top = STACKLENGTH;//判断栈是否为空
int Empty() {if (top == STACKLENGTH)return 1;return 0;
}void Push(char ch)
{top--;stack[top] = ch;
}char Pop()
{char ch = stack[top];top++;return ch;
}/*括号匹配的检验*/
bool Check(char* line)
{while (*line != '\0'){char chLeft = '\0';char chRight = '\0';char ch = *line;switch (ch){case '(':case '[':case '{':Push(ch);   // 找到左括号 进栈break;case ')':chLeft = '(';chRight = ch;break;case ']':chLeft = '[';chRight = ch;break;case '}':chLeft = '{';chRight = ch;break;default:break;}if (chRight == ch)   // 找到右括号 {if (Empty()){return 0;}else{char t = Pop(); // 出栈 if (t != chLeft) {return false;}}}line++;}if (Empty()){return true;}return false;
}int main(void)
{char array[1024];gets_s(array);int i = Check(array);if (i == 1) {printf("1\n");}else {printf("0\n");}return 0;
}

实验结果:

遇到的问题:

1.   创建和初始化栈、pop() empty() push()这些栈的操作:
最简单的建一个空栈char stack[STACKSIZE];int top=STACKSIZE2. 实现判断是否匹配的函数:
用while循环,当字符串没有结束(元素!=’\0’)时,
如果先找到左括号,入栈;
如果找到了右括号,并且栈不为空,pop()之前入栈的元素,并且判断是否匹配,如果不匹配,直接输出false。

数据结构 判断括号是否匹配相关推荐

  1. LeetCode Valid Parentheses(判断括号是否匹配)

    题意:给出(,[,{,),],}括号组成的字符串, 判断括号是否匹配 思路:用栈结构判断 1.如果是(,[,{,将其入栈 2.如果遇到),],},看栈是否为空.栈顶元素是否对应为(,[,{ 3.将字符 ...

  2. python 判断括号是否匹配_使用Python实现一个栈判断括号是否平衡

    栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...

  3. 第2关:利用栈判断字符串括号是否匹配

    #ifndef stack__h #define stack__h#include <stdio.h> #include <stdlib.h>typedef char T; / ...

  4. java小编程----括号是否匹配

    错误示例::: 当 String s = "...(...[....]....{...}...)...(.[..)..";     应输出3 package com.henu.ji ...

  5. 数据结构算法——判断表达式中的括号是否匹配

    元旦三天假,闲着没事干,就想着复习一下学数据结构时的那些算法吧.本来是想用C语言来写的,无奈啊,三四年没用C了,基本上忘光光,还是用C#来写吧,而且.Net基类库中已经有了栈.队列等的实现,直接拿来用 ...

  6. python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...

    算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...

  7. python实现括号匹配不用栈_使用Python实现栈,判断括号是否平衡

    栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...

  8. 数据结构括号是否匹配

    2022.10.13数据结构括号是否匹配,这题才开始5组/7组最后10组测试成功. ddd最近我感觉我对前标开窍了一点,课本真是个好东西.欢迎点赞.评论.收藏转发. 数据结构括号是否匹配 任务描述 相 ...

  9. 判断字符串中的括号是否匹配-C语言

    判断字符串中的括号是否匹配-C语言 递归实现: 先检搜一对匹配的括号,再对里面的内容进行匹配,匹配完后再继续往下匹配-- #include <stdio.h> #include <s ...

最新文章

  1. java.lang.RuntimeException: Canvas: trying to draw too large(203212800bytes) bitmap.
  2. 1个ieee1394端口_如何使用圆形端口进行波导激励和终止
  3. java list类型参数_java – List是一个原始类型.引用通用类型List应该参数化
  4. 云服务器主机性能测试,云服务器主机性能测试
  5. anaconda-虚拟环境的控制-新建-切换-删除
  6. MySQL之Index(索引)
  7. mysql下载for linux 64_mysql官网下载linux版本安装包
  8. BeautifulSoup4 find_all搜索包含指定文本内容的标签返回空list的问题
  9. 一文搞懂 Flink 的 Exactly Once 和 At Least Once
  10. Apache .htaccess Rewrite解决问号匹配的写法
  11. 方方格子补丁_方方格子wps版下载 方方格子Excel工具箱插件(WPS版全套) v3.2.8.0 中文官方安装版 下载-脚本之家...
  12. 试用样机BL2480T测评
  13. java没有舞台_不会偷懒的程序员不是好程序员!
  14. 泛型相关用法(day3)
  15. c 语言单向链表构造函数,c++实现单向链表的一些操作
  16. db_ha集群配置文件参数含义详解
  17. 企业薪酬管理的“七大通病”
  18. Pivotal的数字转型经:授之于鱼不如授之于渔
  19. AIGC大模型时代下,该如何应用高性能计算PC集群打造游戏开发新模式?
  20. android crosswalk闪退,Crosswalk 首次启动闪烁一下的处理办法(Xamarin.Android)

热门文章

  1. python循环语句和跳出语句详解
  2. android中slider控件,range-slider-view
  3. Hadamard Transform
  4. 如何用NLP技术和标题党说拜拜-文本摘要
  5. 今晚直播 |不诉离殇,图像分割打卡营正式毕业啦!
  6. 玩《Minecraft我的世界》学python编程,可免费领|取电子学习版本
  7. 港科报道 | 香港科技大学(广州)专题新闻发布会成功举办
  8. 钉钉机器人项目踩过的坑
  9. android6恢复桌面,安卓手机桌面日期和天气误删除的恢复方法
  10. 别轻易自责,专注力和自制力是稀缺资源