技术标签: 算法 括号匹配 C语言 考研数据结构笔记 栈 数据结构
算法思想:
1)初始一个空栈,顺序读入括号。
若是右括号,则与栈顶元素进行匹配
·若匹配,则弹出栈顶元素并进行下一个元素
·若不匹配,则该序列不合法
3)若是左括号,则压入栈中
4)若全部元素遍历完毕,栈中非空则序列不合法
解题
:
1.首先1、2都是左括号,直接进栈
2.第3个括号是右括号‘)’
并且和2’(‘
匹配,所以弹出当前栈顶元素,如下图
’
解题
:
1.和刚才一样,左括号进栈
2.第3个括号是右括号且与当前栈顶左括号2不匹配,所以此题不匹配
题目:
解题
:
1.左括号1、2进栈,如下图
2.第三个括号为右括号且与当前栈顶2 左括号匹配,所以弹出此时栈顶2 左括号,
然后括号4‘ ]
’,与当前栈顶1 左括号’[
‘,相匹配,所以弹出此时栈顶1’[‘
第5个为左括号进栈,如下图
3.栈非空,不合法。
前缀表达式:+AB
中缀表达式:A+B
后缀表达式:AB+
符号分别在式子的前中后
题目:[(A+B)*C]- [E-F]
1.最先运算的A+B ,‘+’
提前,如下图
2,然后是()*c, 转换前缀就是将*
提前 ,如下图
3,E-F, 将‘-’
提前。如下图
4.最后一步就是【】-【】,两个中括号相减, 改为前缀就是将减号提前,如下图
[(A+B)*C]- [E-F] 转成下图
1,式子首先运算A+B,将’+
‘后移,如下图:A B +
2,*计算( )*c,转为后缀是将’*
‘后移,为()C ,如下图:
3,计算[E-F],将’-
’后移,E F - ,如下图
4,计算[ ] -[ ],将‘-
’后移 [ ] [ ] - , 如下图
最终:A B + C * E F - -
算法思想:
数字直接加入后缀表达式
运算符时:
a.若为‘(’,入栈;
b.若为‘)’,则依次把栈中的运算符加入后缀表达式,直到出现’(’,并从栈中删除’(’;
c.若为’+’,‘-’,‘*’,’/‘,
·栈空,入栈;
·栈顶元素为’(’,入栈;
·高于栈顶元素优先级,入栈;
·否则,依次弹出栈而运算符,直到一个优先级比它低的运算符或‘('为止;
d.遍历完成,若栈非空依次弹出所有元素。
1.都为左括号,入栈(算法思想中情况a),如下图
2,数字A直接加入表达式
3.加号‘+’,且此时栈顶为左括号,入栈操作,(算法思想中c)如下图
4.数字B直接加入表达式
5.符号‘)’,(算法思想b)依次将此时栈中元素弹出加入后缀表达式直到遇到左括号‘(’,并从栈中删除“(”,如下图,
删除后,栈中只有第一个‘(’
6.符号‘’,(算法思想c)此时栈顶为‘(’ ,直接入栈,如下图
7.减号‘-’,不高于此时栈顶‘’的优先级,弹出栈中元素,直到‘(’,(算法思想c).
8.减号‘-’,此时栈为空,直接入栈(算法思想C)
左括号‘(’,直接入栈
数字E直接加入后缀(算法思想a)
减号‘-’,因为此时栈顶为左括号‘(’,所以减号直接入栈(算法思想C)
数字F直接加入后缀(算法思想a)
9.右括号‘)’,依次弹出栈顶加入到后缀,直到遇到左括号‘(’(算法思想b)。
10.遍历完了,若栈不为空,将栈中数据依次弹出加入到后缀。(算法思想d)
递归若在一个函数、过程或数据结构的定义中又应用了它自身,则称它为递归定义的,简称递归
int Fib(int n){
if(n == o)
return 0 ;
else if(n == 1)
return l;
else
return Fib(n-1) + Fib (n-2);
)
递归的精髓在于能否将原始问题转换为属性相同但规模较小的问题
*在递归调用过程中,系统为每一层的返回点、局部变量、传入实参等开辟了递归工作栈来进行数据存储,递归次数过多容易造成栈溢出。
*通常情况下递归的效率并不高
***递归转换算法转换为非递归算法,往往需要借助栈来进行
文章浏览阅读2.3k次,点赞6次,收藏31次。记得几年以前看到聊天功能时总是不得所以,现在回头一看,发现其实实现方式非常简单,故此记录一番 ~ 实现效果实现思想实现方式导入依赖创建model创建适配器使用场景实现效果一个入门级的Demo、只能满足基本需求 ~实现思想一个垂直的list列表一个有tag的model标记tag,用于区分用户不同tag,展示不同UI实现方式导入依赖篇中用到的 RecyclerVie..._android客服聊天功能模板
文章浏览阅读1.6k次。公众号后台回复“图书“,了解更多号主新书内容 作者:草帽小子 来源:一个数据人的自留地作者介绍@草帽小子数据产品经理一枚~用户画像、埋点、指标体系、BI、广告投放..._统计维度需求说明
文章浏览阅读516次,点赞6次,收藏7次。ElasticSearch结合springboot使用Bool Query布尔查询_es query bool
文章浏览阅读1k次,点赞18次,收藏28次。本篇文章仅简单介绍在spinalhdl编程中遇到的比较常见的2中类定义方式:class及case class。对于不太了解JAVA或Scala编码又开始学习SpinalHDL的人进行入门介绍。在 SpinalHDL 中,case class 和 class 都是用来定义数据结构或对象的关键字,它们在某些方面相似,但也有一些显著的差异。
文章浏览阅读819次。现有一配送站(序号为0)和16个客户点(序号为1-16),它们有不同数量的货物需求,每个客户点的需求量和要求的最早配送时间和最晚配送时间,配送车在每个站点的服务时间等如下表所示。该配送中心向客户提供货物的配送服务,由一个车队(最多10辆车)来负责,现需要规划合适的车辆数和行车路线,目标是使得在客户的需求得到满足,并能在车辆容量和时间窗约束下达到成本最小,请给出具体的配送方案。Matlab遗传算法求带时间窗的单配送中心车辆调度与路径优化问题(VRPTW):低配版。表1 车辆路径(物流配送)问题已知量统计表。_matlab遗传算法路径优化单配送中心
文章浏览阅读136次。Java_io体系之PipedWriter、PipedReader简介、走进源码及示例——14 ——管道字符输出流、必须建立在管道输入流之上、所以先介绍管道字符输出流。可以先看示例或者总结、总结写的有点Q、不喜可无视、有误的地方指出则不胜感激。一:PipedWriter1、类功能简介: 管道字符输出流、用于将当前线程的指定字符写入到与此线程对应的..._piped io
文章浏览阅读757次,点赞2次,收藏2次。作者 | 阮一峰URL 是互联网的基础设施之一。浏览器提供了一些原生对象,用来管理 URL。1、Location 对象Location对象是浏览器提供的原生对象,提供 URL 相关的信..._cannot set property searchparams of [object url] which has only a getter
文章浏览阅读3.3k次。Easy ApplicationHave you ever tried to apply for a company only to discover they won't let you upload your resume? Instead you have to meticulously fill out pages of information (all of which could_upload your resumefill out manually (15 min)
文章浏览阅读244次。chown [-R] 用户名 目录名/文件名修改目录或文件所属用户,可选的-R参数表示是否递归修改。也可以同时修改所属用户和用户组,例如:chown -R <用户名>:<用户组名> <目录名> chgrp [-R] 用户组名 目录名/文件名修改目录或文件所属用户组,可选的-R参数表示是否递归修改。..._linux改变文件属主的命令
文章浏览阅读1.4k次。楼主xxmm(晓箫)2001-07-22 21:18:05 在 Java / Web 开发 提问问题点数:20、回复次数:5Top 1 楼yelz(断弦)回复于 2001-07-22 21:55:46 得分 8getParameter 返回上个页面提交得参数,getAttribute返回系统属性,不同jsp服务器可能不同。Top2 楼xxmm(晓箫)回复于 2001-07-_getattribute和getparameter有什么区别
文章浏览阅读96次。大数据第三季--Hbase(day5)_【六期-12day】数据仓库+hbase\数据仓库03-上午
文章浏览阅读1.2w次,点赞4次,收藏5次。今天写spring配置文件的时候出现cvc-complex-type.2.4.a: Invalid content was found starting with element 'taglib的错误,查资料后发现的命令空间引入的问题解决方法很简单把http://www.springmodules.org/schema/cache/springmodules-cache.xsd复制_cvc-complex-type.2.4.a: invalid content was found starting with element 'pha