欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 数据结构·栈

数据结构·栈

2024/10/25 20:29:23 来源:https://blog.csdn.net/2301_80132162/article/details/142852326  浏览:    关键词:数据结构·栈

总结:

任意括号匹配问题

  • 利用 dict简化匹配问题
  • 用list 近似为stack
  • pop返回self
    括号匹配
class Solution:def isValid(self, s: str) -> bool:if len(s)%2!=0:return Falsest=[]dict={')':'(',']':'[','}':'{'}for str in s:if str not in dict:# 左括号st.append(str)elif not st or st.pop()!=dict[str]:return Falsereturn not st

十进制转换为二进制

  • 栈的一个简单运用:倒序输出
from pythonds.basic import Stack
def Deci2Binary(n:int):st = Stack()while n>0:remainer=n%2quotient=n//2n=n//2st.push(remainer)output_number=''while st.size()>0:output_number=output_number+str(st.pop())print(f'十进制{n}转换为二进制为{output_number}')return output_number
if __name__ == "__main__":deci_n=984bina_n=Deci2Binary(deci_n)

中序转后序

无论什么序,运算数的相对顺序不变
在后序表达式中:优先级高的运算符靠左
利用这个特性:遇到优先级低于自己的,必须提前出栈;否则不用出栈

import stringfrom pythonds.basic import Stack
def infix2Postfix(infix_expression:str):dict={}dict[')']=4dict['*']=3dict['/']=3dict['+']=2dict['-']=2dict['(']=1def compare_prior(opa:str,opb:str):# 返回优先级的比较return dict[opa]>dict[opb]opstack=Stack()res=[]token_list=infix_expression.split()for token in token_list:"""三种情况:1.正常的数字或者字母2.优先级低:出栈3.优先级高:入栈"""if token in string.ascii_uppercase:res.append(token)elif token in string.digits:res.append(token)else:# if opstack.isEmpty() or compare_prior(token,opstack.peek()):#     # 栈为空且优先级高:加入while not opstack.isEmpty() and compare_prior(token,opstack.peek()):# 如果栈顶元素优先级更大# 栈不为空且优先级低:pop_item=opstack.pop()if pop_item not in ['(',')']:# (*)-res.append(pop_item)opstack.push(token)# print(res)# print(opstack.peek())return resif __name__ == "__main__":infix_expression="( A + B ) * ( C + D )"print(infix2Postfix(infix_expression))

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com