数据结构与算法基础-(5)---栈的应用-(1)括号匹配,2024年最新ios加载h5页面 ...

打印 上一主题 下一主题

主题 803|帖子 803|积分 2409

先自我先容一下,小编浙江大学结业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提拔技能,往往是自己摸索成长,但自己不成体系的自学结果低效又漫长,而且极易遇到天花板技术故步自封!
因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初志也很简单,就是希望可以或许资助到想自学提拔又不知道该从何学起的朋友。





既有适合小白学习的零基础资料,也有适合3年以上经验的小同伴深入学习提拔的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目次截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、解说视频,而且后续会持续更新
如果你须要这些资料,可以添加V获取:vip204888 (备注鸿蒙)

正文

括号与算法的关系

我们都写过这样的表达式: ( 5 + 6 ) * ( 7 + 8 ) / ( 4 + 3 )
这里的括号是用来指定表达式项的计算优先级
但****括号的使用必须遵循 “均衡” 规则
首先, 每个开阔号要恰好对应一个闭括号~
其次,每对开阔号要正确的嵌套~
正确的括号: ( ( ) ( ) ( ) ( ) ), ( ( ( ( ) ) ) ), ( ( ) ( ( ( ) ) ( ) ) )
错误的括号: ( ( ( ( ( ( ( ) ), ( ) ) ), ( ( ) ( ) ( ( )
对括号的正确匹配和识别,是很多语言编译器的基础算法
怎样构造括号匹配识别算法

左到右扫描括号串,最新打开的左括号,应和最先遇到的右括号匹配
这样,第一个左括号(最早打开),就应该匹配最后一个右括号(最后遇到)
这种序次反转的识别,正好符合栈的特性!


class Stack:#Stack---->ADT
def init(self):
self.items =[]
def isEmpty(self):
return self.items == []
满意这些属性(行为)的是栈

def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]


def size(self):
return len(self.items)
def parChecker(symbolstring):
print(symbolstring)
#实例化栈(空栈)
s = Stack()
#括号匹配法则
balanced = True
index = 0
while index < len(symbolstring) and balanced:
symbol = symbolstring[index]
if symbol == “(”:
s.push(symbol)
else:
#右括号多了或左括号少了
if s.isEmpty():#判定栈 是否为空
balanced = False
else:
s.pop()
index = index + 1
if balanced and s.isEmpty():
return True
else:
return False
result = parChecker(“(())”)
print(result)
print(parChecker(“(()”))
运行结果:

怎样构造各范例括号匹配识别算法

在实际的应用里,我们会遇到更多种括号
如 Python 中 列表的方括号[], 字典的花括号{},  元组和表达式使用的圆括号().
这些差异的括号可能混合在一起使用,因此就要注意各自的开闭匹配情况.
上面我们只是匹配了括号,那如果我们要匹配多种范例的括号呢?
那我们要怎样操纵?

代码如下:
怎样给其他范例的括号进行匹配—代码如下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

飞不高

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表