数据结构 判断括号是否匹配
实验题目:
给定字符串,仅包含’(‘,’)’,’{’,’}’,’[’,’]'六种字符,判断括号是否匹配
匹配规则如下
每一个左括号必须和相同类型的右括号匹配
左括号必须以正确的顺序闭合
空字符串也认为是成功匹配的字符串
输入:一个只包含上述六种字符的字符串
输出:括号匹配输出1,否则输出0
算法思路:
- 用gets_s()函数获取输入的字符串;
- 创建一个bool函数,用来判断括号是否匹配;
- 创建一个空栈;
- 依次遍历字符串,先把左括号放进栈内;
- 如果遍历到右括号,而同时前一个push入栈内的左括号与其相匹配,那么就把左括号pop出栈
- 如果最后栈为空,那么说明全都匹配成功,输出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。
数据结构 判断括号是否匹配相关推荐
- LeetCode Valid Parentheses(判断括号是否匹配)
题意:给出(,[,{,),],}括号组成的字符串, 判断括号是否匹配 思路:用栈结构判断 1.如果是(,[,{,将其入栈 2.如果遇到),],},看栈是否为空.栈顶元素是否对应为(,[,{ 3.将字符 ...
- python 判断括号是否匹配_使用Python实现一个栈判断括号是否平衡
栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...
- 第2关:利用栈判断字符串括号是否匹配
#ifndef stack__h #define stack__h#include <stdio.h> #include <stdlib.h>typedef char T; / ...
- java小编程----括号是否匹配
错误示例::: 当 String s = "...(...[....]....{...}...)...(.[..).."; 应输出3 package com.henu.ji ...
- 数据结构算法——判断表达式中的括号是否匹配
元旦三天假,闲着没事干,就想着复习一下学数据结构时的那些算法吧.本来是想用C语言来写的,无奈啊,三四年没用C了,基本上忘光光,还是用C#来写吧,而且.Net基类库中已经有了栈.队列等的实现,直接拿来用 ...
- python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...
算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...
- python实现括号匹配不用栈_使用Python实现栈,判断括号是否平衡
栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...
- 数据结构括号是否匹配
2022.10.13数据结构括号是否匹配,这题才开始5组/7组最后10组测试成功. ddd最近我感觉我对前标开窍了一点,课本真是个好东西.欢迎点赞.评论.收藏转发. 数据结构括号是否匹配 任务描述 相 ...
- 判断字符串中的括号是否匹配-C语言
判断字符串中的括号是否匹配-C语言 递归实现: 先检搜一对匹配的括号,再对里面的内容进行匹配,匹配完后再继续往下匹配-- #include <stdio.h> #include <s ...
最新文章
- java.lang.RuntimeException: Canvas: trying to draw too large(203212800bytes) bitmap.
- 1个ieee1394端口_如何使用圆形端口进行波导激励和终止
- java list类型参数_java – List是一个原始类型.引用通用类型List应该参数化
- 云服务器主机性能测试,云服务器主机性能测试
- anaconda-虚拟环境的控制-新建-切换-删除
- MySQL之Index(索引)
- mysql下载for linux 64_mysql官网下载linux版本安装包
- BeautifulSoup4 find_all搜索包含指定文本内容的标签返回空list的问题
- 一文搞懂 Flink 的 Exactly Once 和 At Least Once
- Apache .htaccess Rewrite解决问号匹配的写法
- 方方格子补丁_方方格子wps版下载 方方格子Excel工具箱插件(WPS版全套) v3.2.8.0 中文官方安装版 下载-脚本之家...
- 试用样机BL2480T测评
- java没有舞台_不会偷懒的程序员不是好程序员!
- 泛型相关用法(day3)
- c 语言单向链表构造函数,c++实现单向链表的一些操作
- db_ha集群配置文件参数含义详解
- 企业薪酬管理的“七大通病”
- Pivotal的数字转型经:授之于鱼不如授之于渔
- AIGC大模型时代下,该如何应用高性能计算PC集群打造游戏开发新模式?
- android crosswalk闪退,Crosswalk 首次启动闪烁一下的处理办法(Xamarin.Android)