思路:

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

代码:

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))

最新文章

  1. JS提交对象数组到服务端的方法总结(C#实例)
  2. python 线程之threading(五)
  3. 阿里云服务器被挖矿minerd入侵的解决办法
  4. Tomcat 在win7/win8 系统下tomcat-users.xml.new(拒绝访问)解决方法
  5. java 下载spring的方法
  6. HTML5 TypeArray和Unicode 字符之间转换
  7. Openjudge-计算概论(A)-整数奇偶排序
  8. 浅谈EditText控件的inputType类型
  9. ubuntu下无法在目录下创建文件夹,权限不足解决办法
  10. OpenGL的gl.h出现一堆错误,如重定义什么的
  11. js substr和substring
  12. 关于用户登录状态存session,cookie还是数据库或者memcache的优劣
  13. linux记录sftp命令
  14. Vue---vue-cli 中的proxyTable解决开发环境中的跨域问题
  15. zookeeper - java操作
  16. Mysql的学习随笔day2
  17. ny104 最大和
  18. ADT离线安装
  19. HTML——基本html标签
  20. jsp电子商务系统之六 订单篇1

热门文章

  1. 最强云硬盘来了,让AI模型迭代从1周缩短到1天
  2. 力扣Leetcode 198. 打家劫舍
  3. 多商铺平台手机电脑自适应宣传展示平台店铺javassh项目代码线上
  4. Number(),parseInt()和parseFloat
  5. 数据去重Distinct,IEqualityComparer,IEquatable
  6. 【Android】时间选择器,选择日期DatePicker 简单详解demo及教程
  7. android MVVM(1)用LiveData关联VM 与 V
  8. iOS 64位静态链接库
  9. WinMTR 网络测试工具-九五小庞
  10. oracle修改管理员密码