算法

数据结构

数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题

在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等。如果不相等的话则程序必然会报错。Hint:在读取程序的时候,读取的结果肯定是左边的全是左括号,右边的全是右括号,也就是一定是“(((( )))))”或者“((((((((((((( )))))))))))))))))”的形式,不可能是左右括号互相交互的形式,比如这种:“()()()()))((())((”, 编写过程序的同学就能够很轻松的知道这是为什么,因为先有左后有右,正好这个特性和栈的特性相符合,因此我们使用栈来解决这个问题,首先定义一个栈的类class:

classStack():def __init__(self):#初始化一个空的列表

self.__list=[]#压栈,也就是把元素从上方添加上去,但是这里我咋感觉是从下方添加进去的,顺序反了?

defpush(self,item):

self.__list.append(item)defpop(self):return self.__list.pop()#弹出栈顶的元素,同时删除栈顶的元素

#返回栈顶的元素

defpeek(self):return self.__list[len(self.__list)-1]#也就是获取列表当中的最后一个元素

#判断栈是否为空

defis_empty(self):return self.__list ==[]#计算栈的大小

defsize(self):return len(self.__list)#返回当前栈的列表

defwhat(self):return self.__list

这也是栈最常见的定义,已经约定俗成了。现在则是算法的实现过程,我们可以用程序首先读取括号,比如已经给定了括号的字符串“((((( )))))”,我们将这个字符串传入进行括号匹配的函数当中。如果在循环读取括号当中,读取到了左括号,那么就进行入栈操作。之后左括号读取完毕,再进行右括号的读取操作,每读取到一次右括号,则进行出栈操作,也就是将之前进栈的左括号删除。如果左括号比右括号多,那么栈无论如何也无法为空,则括号不匹配,返回false。如果右括号比左括号更多,那么栈如果已经为空,程序还在读取右括号,说明右括号比左括号更多,这样程序则也返回false。在左括号和右括号的数量相等的时候,程序返回True,思路就是这样的,因此程序的代码如下:

defpipei(string):

stack=Stack()

i=0while i

stack.push(string[i])elif string[i]==")":ifstack.is_empty():returnFalseelif notstack.is_empty():

stack.pop()

i=i+1

ifstack.is_empty():returnTrueelse:returnFalseprint("开始括号的匹配问题:")print(pipei("(((())))"))print(pipei("(((()))))))))))"))

输出为:

开始括号的匹配问题

True

False

那么真实的程序还需要我们自己写一个读取程序的文件,让我们过滤掉其他符号,只提取出保留括号的字符串,我们这里再写一个函数类实现这个功能:

deftiqukuohao(string):

i=0

ls=[]while i

ls.append(string[i])elif string[i]==")":

ls.append(string[i])else:passi=i+1new_string="".join(ls)#将拿到的列表变成字符串,十分常规的操作return new_string

然后调用函数,将一个括号匹配的放入函数,和另一个括号不匹配的字符串放入函数:

print(pipei(tiqukuohao("(sdvcsadc(asdasd(a)sdfsdf)asd)asdfas")))print(pipei(tiqukuohao("sdvcsadc(asdasd(a)sdfsdf)asd)asdfas")))

最后输出为:

True

False

得解!

内容来源于网络,如有侵权请联系客服删除

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

  1. mooc数据结构与算法python版期末测验_中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案...

    中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案 更多相关问题 采用fopen()函数打开文件,支持文件读取的参数有: [简答题]简单阐述高分子材料热-机械特征及成型加工的关系,并 ...

  2. 数据结构python课后答案_数据结构与算法:Python语言描述 1~5章课后习题

    数据结构与算法:Python语言描述 1~5章课后习题 发布时间:2018-07-19 20:42, 浏览次数:1885 , 标签: Python MarkDown语法写的,不知道为啥上传到CSDN不 ...

  3. mooc数据结构与算法python版期末考试_数据结构与算法Python版-中国大学mooc-试题题目及答案...

    数据结构与算法Python版-中国大学mooc-试题题目及答案 更多相关问题 婴儿出生一两天后就有笑的反应,这种笑的反应属于(). [判断题]填制原始凭证,汉字大写金额数字一律用正楷或草书书写,汉字大 ...

  4. 数据结构与算法python描述_数据结构与算法——Python语言描述.pdf

    数据结构与算法--Python语言描述.pdf 欢迎加入非盈利Python编学习交流程QQ群783462347,群里免费提供500+本Python书籍! 欢迎加入非盈利Python编程学习交流程QQ群 ...

  5. python数据结构视频百度云盘_数据结构与算法Python视频领课

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 课程简介: 本课程包含Python编程基础的基本语法及变量,基本数据结构,Code Structure,Function.让学生在学会Python基础的同 ...

  6. node 获取表单数据 为空_数据结构与算法(python)单向循环链表

    单向循环链表 单链表的一个变形是单向循环链表, 链表的最后一个节点的next域不再为None, 而是指向链表的头节点. 单向循环链表如图所示: 单向循环链表 同样单向循环链表也是要使用python来对 ...

  7. node 获取表单数据 为空_数据结构与算法(python)单向链表篇

    链表 数据表的构建需要预先知道数据的大小来申请连续的存储空间, 而在进行扩充的时候又需要进行数据的搬迁, 使用起来不是很灵活. 链表结构可以充分利用计算机内存空间, 实现灵活的内存动态管理. 简单来说 ...

  8. python第五单元答案_中国大学MOOC第五单元测试答案_数据结构与算法Python版慕课答案在哪里可以看...

    计算机系统安全通常指的是一种机制,即______.A.只有被授权的人才能使用其相应的资源B.自己的 系统在规定条件下和规定时间内完成规定的功能,这一属性指的是____.A.保密性B.完整性C.可用性D ...

  9. 数据结构python版 答案_中国大学慕课答案大全_数据结构与算法Python版章节测试答案...

    现代公共关系工作最有效的手段是(). A.口语传播 B.文字媒介 C.印刷媒介 D.电子媒介 把下面方格里的图形按3:1放大,再按1:2缩小,画出放大.缩小后的图形. 作风.仪表是(). A.人员形象 ...

最新文章

  1. php改变图片大小png背景变黑,php – 当将透明背景的PNG图像调整大小/转换为JPEG时,如何用白色替换黑色背景...
  2. php mysql db封装类_封装自己的DB类(PHP)
  3. 【C/C++开发】C++库大全
  4. 电脑小白和黑客的对白
  5. linux shell 递归统计代码行数
  6. 数据结构C++版-图
  7. 爬虫实例十 爬取百度贴吧小姐姐照片
  8. 好看流光风格个人主页源码
  9. 基于WinForm开发的Ribbon界面案例的扩展
  10. C++/OpenGL 入门(14):四面体表面贴图纹理图案
  11. 全球与中国光学光源市场现状及未来发展趋势
  12. P4839 P哥的桶C++题解
  13. RxJava2.0的生动形象的分析
  14. Feed Ratios_usaco3.2_暴力
  15. mac重启php-fpm
  16. RLC无源网络线性元件的微分方程
  17. 将图形中线条或者图案坐标点进行提取
  18. 2022年蓝桥杯C++B组题解 - 很详细
  19. php 获取到当前ip,获取当前IP地址,跳转到对应城市网站。
  20. 微信小程序接入百度统计报错 Cannot read property ‘mtj‘ of undefined

热门文章

  1. 第13篇: Flowable-BPMN操作流程之流程进展查看之流程图
  2. y电容如何选型_干式试验变压器选型依据
  3. 读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令
  4. java怎么用doss窗口_GitHub - doss128/symphony: 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台。...
  5. eclipse把tomcant用到一个项目里_聊一个镜头工艺里容易被忽略,但很重要的项目...
  6. 迷你世界显示未连接服务器成功,迷你世界登录未成功是什么意思 | 手游网游页游攻略大全...
  7. linux下查看进程的线程数,linux查看进程的线程数
  8. ue4插件导入导出_Blender到UE4的无缝衔接
  9. 计算机应用全能,全能计算助手
  10. 学计算机U盘内存,在U盘上设置虚拟内存