栈应用(括号匹配、十进制转换二进制)

括号匹配

#导入定义的栈
from Algorithm import Stack_1
#定义括号匹配函数
#参数传入所要匹配的括号字符串
def parChecker(symbolString):
    #定义一个栈,用来存储左括号,弹出并与右括号比较
    s = Stack_1.Stack()
    #设置是否匹配成功标志
    balanced = True
    #索引,匹配成功一个就匹配后一个字符
    index = 0
    while index<len(symbolString) and balanced :
        #接收当前字符
        symbol = symbolString[index]
        #如果当前括号为左括号中的一个则入栈
        if symbol in "([{":
            s.push(symbol)
        #如果不是左括号中的一个
        else:
            #判断栈是否为空
            if s.isEmpty():
                #为空 ,则说明当前右括号不能与左括号匹配,匹配失败
                balanced = False
                #栈中还有左括号
            else:
                #弹出栈顶左括号
                top = s.pop()
                #进行匹配
                if not matches(top,symbol):
                    balanced = False
         #上一个右括号匹配成功,则退出以上判断,进入下一个括号的匹配
        index = index+1

        #循环结束,字符串左右括号已经匹配完
        #匹配成功且栈为空,则返回成功
    if balanced and s.isEmpty():
        return True
        #匹配失败
    else:
        return False

 #定义左右括号是否是一对的函数
def matches(left,right):
    #定义左右括号字符串集
    lefts = "([{"
    rights = ")]}"
    #字符串的index()方法,根据值返回其在字符串中的索引位置
    return lefts.index(left) == rights.index(right)

str = "([{)}]"
res = parChecker(str)
print(res)

十进制转换为二进制(可以改成十进制转换为任意进制,将2改为base即可)

#利用栈实现除留余数法完成十进制转换为二进制
from Algorithm import Stack_1
#参数为十进制整数
def divideBy2(num):
    #初始化栈
    s = Stack_1.Stack()
    rem = num
    while rem >0 :
        # 余数
        mod = rem % 2
        s.push(mod)
        #商
        rem = rem // 2
    res =""
    while not s.isEmpty():
        res = res+str(s.pop())
    return res

print(divideBy2(233))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值