思路:

利用栈实现代数式中括号有效行的的检验:

代码:

class mychain(object): #利用链表建立栈,链表为父类
length=0
def __init__(self,value=None,next=None):#创建链表,长度并不包含头部
self.value=value
self.next=next
#mychain.length=mychain.length+1
def append(self,value=None):
while self.next!=None:
self=self.next
self.next=mychain(value)
mychain.length=mychain.length+1 #追加时,链表长度增加
def travle(self):#遍历链表
print(self.value)
if self.next!=None:
self.next.travle()
def drop (self,value):#删除特定值的第一个匹配节点
while self.next!=None:
if self.next.value!=value:
self=self.next
else:
self.next=self.next.next
mychain.length=mychain.length-1 #删除时,链表长度减小
break
def pop(self):#删除未节点
if self.next!=None:#并不删除头结点
while self.next.next!=None:
self=self.next
self.next=None
mychain.length=mychain.length-1#弹出为节点,并减小长度,头结点不弹出

class stock(mychain):#栈类
bottom=None   #栈底
top=None     #栈顶
n_count=0    #计数
def Max(self):  #占中最大值
if self.next!=None:
tmp = self.next.value
while self.next.next!=None:
self=self.next
if self.next.value>tmp:
tmp=self.next.value
return tmp
else:
print('栈为空!')
def Min(self):#栈中的最小值
if self.next!=None:
tmp = self.next.value
while self.next.next!=None:
self=self.next
if self.next.value<tmp:
tmp=self.next.value
return tmp
else:
print('栈为空!')

def push(self,value): #压栈
while self.next != None:
self = self.next
self.next = mychain(value)
stock.top=self.next
stock.length=stock.length+1
stock.n_count=stock.n_count+1
def __init__(self,value='',next=None):
self.value=value
self.next=next
stock.bottom=self
stock.top=self
#stock.n_count=stock.n_count+1
#stock.length=stock.length+1
def append(self,value=''):#取消追加函数
print('请使用Push()!')
def pop(self):
if self.next!=None:#并不删除头结点
while self.next.next!=None:
self=self.next
self.next=None
stock.top=self
stock.length=stock.length-1#弹出为节点,并减小长度,头结点不弹出
class solution(object):
def validationofbrackets(self,astr=''):#检验串中的括号合法性
braketsstock=stock()
for i in astr:
if i in ['{','(','[']:
braketsstock.push(i)
else:
if i==')':
if braketsstock.top.value=='(':
braketsstock.pop()
else:
return False
elif i==']':
if braketsstock.top.value=='[':
braketsstock.pop()
else:
return False
elif i=='}':
if braketsstock.top.value=='{':
braketsstock.pop()
else:
return False
else:
pass
print(astr)
print(braketsstock.length)
if braketsstock.length==0:
return True
else:
return False

运行:

bstr='([{((({{}})))}]){{}}{{}{}{}[][]()(123)(((sin5)))}'
f=solution()
print(f.validationofbrackets(bstr))

python-代数式括号有效性检验的更多相关文章

  1. python小括号( )与中括号 [ ]

    在python中小括号()表示的是tuple元组数据类型,元组是一种不可变序列. >>> a = (1,2,3) >>> a (1, 2, 3) >>& ...

  2. python 正则括号的使用及踩坑

    直接先上结论: 若匹配规则里有1个括号------返回的是括号所匹配到的结果, 若匹配规则里有多个括号------返回多个括号分别匹配到的结果, 若匹配规则里没有括号------就返回整条语句所匹配到 ...

  3. python 爬虫括号的用法

    首先是文档说明: >>> import re >>> help(re.findall) Help on function findall in module re: ...

  4. python 统计学的各种检验

    1.使用python中的Numpy进行t检验 http://www.atyun.com/7476.html 2.scipy中的卡方检验 http://wiki.mbalib.com/wiki/%E5% ...

  5. Python之括号()[]{}

    Python主要有三种数据类型:字典.列表.元组.其分别由花括号,中括号,小括号表示.如:字典:dic={'a':12,'b':34}列表:list=[1,2,3,4]元组:tup=(1,2,3,4)

  6. python实现括号匹配

    1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[ ...

  7. Python学习-括号

    python语言最常见的括号有三种,分别是:小括号( ).中括号[ ]和大括号也叫做花括号{ }.其作用也各不相同,分别用来代表不同的python基本内置数据类型. 1.python中的小括号( ): ...

  8. Python带括号的计算器

    带括号的计算器也是第一个自我感觉完成最好的 毕竟真的弄了一个多星期 虽然前期这路真的很难走  我会努力加油  将Python学好学踏实 参考了两位博主的文章 http://www.cnblogs.co ...

  9. python去掉括号之间的字符

    在字符串中识别括号并删除括号及其中的内容括号包括 大中小 3种括号 输入为 1个字符串 s="我是一个人(中国人)[真的]{确定}"; 输出为 result = "我是一 ...

随机推荐

  1. 树(Tree)解题总结

    定义 树是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合.它是由 n(n>0) 个有限节点组成一个具有层次关系的集合.. 二叉搜索树(Binar ...

  2. 基于Log4Net记录日志到SQLServer(自定义字段)

    本文记录通过log4net将日志信息记录到SQLServer数据库中. 1.新建控制台应用程序 Log4NetDemo: 2.通过NuGet安装Log4Net (项目版本2.0.8): 3.项目根目录 ...

  3. RabbitMQ配置文件(advanced.config)

    这是advanced.config配置文件示例: [ %% ------------------------------------------------ --------------------- ...

  4. 递推dp数位

    1-n里有多少个1 #include <cstdio> #include <iostream> using namespace std; int main() { int n= ...

  5. [BUUOJ记录] [GYCTF]EasyThinking

    主要考察ThinkPHP6.0的一个任意文件写入的CVE以及突破disable_function的方法. ThinkPHP6.0.0任意文件操作漏洞 理论分析 进入题目是一个简单的操作页面,dirma ...

  6. 分享一个后端专用login模板

    给大家啊分享一个后端专用login模板 Java工程师再也不用这样啦---> html源码 <html lang="en"> <head> <m ...

  7. 浅谈HASH长度拓展攻击

    前言 最近在做CTF题的时候遇到这个考点,想起来自己之前在做实验吧的入门CTF题的时候遇到过这个点,当时觉得难如看天书一般,现在回头望去,仔细琢磨一番感觉也不是那么难,这里就写篇文章记录一下自己的学习 ...

  8. 博主心酸历程:初始Hadoop安装安装过程出现的各种问题。

    首先,作为一名第一次安装Hadoop的小白,费时六七个小时终于安装好了. 如果你是一名小白也是第一次安装,请参考以下教程: 链接:https://pan.baidu.com/s/1pwu6_znWKz ...

  9. 微信小程序 部署(后台是springboot项目 前后台分流)

    微信小程序的部署需要https 和证书: https 需要反向代理: 这里用 nginx,无论linux,windows 系统都可以安装: 1.安装nginx ,这步自己去做: linux 安装ngi ...

  10. Scrapy框架的架构原理解析

    爬虫框架--Scrapy 如果你对爬虫的基础知识有了一定了解的话,那么是时候该了解一下爬虫框架了.那么为什么要使用爬虫框架? 学习框架的根本是学习一种编程思想,而不应该仅仅局限于是如何使用它.从了解到 ...