Fork me on GitHub

随笔 - 997  文章 - 5  评论 - 181  阅读 - 300万 

  很多书籍都在讲stack的概念和使用方法,等我们把概念熟悉后,发现不知道在什么场景下使用

该结构体,这里就列几个实用的例子,让大家了解一下stack在实际中的用处和厉害之处。

  由于stack中的特点是可以成对的pop和push的,针对成对出现的东西,是有用武之地的,特别是

处理一些平衡符号方面,是有很大用处的。下面这个例子就是使用stack判断平衡符号是否成对出现的

  

复制代码
import timeit

from timeit import Timer

class Stack:
        def __init__(self):
                self.items = []
        def is_empty(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)

s = Stack()
def par_checker(symbol_string):
        s = Stack()
        balanced = True
        index = 0
        while index < len(symbol_string) and balanced:
                symbol = symbol_string[index]
                if symbol == "(":
                        s.push(symbol)
                else:
                        if s.is_empty():
                                balanced = False
                        else:
                                s.pop()
                index = index + 1

        if balanced and s.is_empty():
                return True
        else:
                return False

print "start sample checker:"
print(par_checker('((()))'))
print(par_checker('((())'))
def matches(open,close):
        opens = "([{"
        closes = ")]}"
        return opens.index(open) == closes.index(close)

def par_gen_checker(symbol_string):
        s = Stack()
        balanced = True
        index = 0
        while index < len(symbol_string) and balanced:
                symbol = symbol_string[index]
                if symbol in "([{":
                        s.push(symbol)
                else:
                        if s.is_empty():
                                balanced = False
                        else:
                                top = s.pop()
                                if not matches(top,symbol):
                                        balanced = False
                index = index + 1

        if balanced and s.is_empty():
                return True
        else:
                return False

print "start general checker:"
print(par_gen_checker('([{}])'))
print(par_gen_checker('({})'))
print(par_gen_checker('({))'))
复制代码

  测试结果:

start sample checker:
True
False
start general checker:
True
True
False

 

posted on   虚生  阅读(318)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示