当前位置: 首页 > news >正文

数据结构与算法 笔记_数据结构与算法笔记—栈

以前学习的时候都没怎么好好的做过笔记,总是东记一点,西写一点,甚至都不做笔记,导致后面找的时候找不到,最后还是求助搜索引擎浪费掉很多时间。好脑筋不如个烂笔头呀。 这次又重新学习python的数据结构及算法(中国MOOC上的公开课),就好好做个笔记吧。 栈是一种只能在一端进行插入和删除的线性数据结构。 一般来说,栈主要有两个操作:一个是进栈(PUSH),又叫作入栈、压栈;另一个是出栈(POP),或者叫作退栈。栈遵循的原则是后进先出,即LIFO(Last In First Out)。 下面使用python的基本结构列表实现栈:
## 使用列表的末尾作为栈顶## 也可使用列表的开头作为栈顶,其实这两种方法的性能是不同的## 列表开头作为栈顶,复杂度为 O(n)## 列表末尾作为栈顶,复杂度为 O(1)class Stack:    def __init__(self):        self.items = []            def isEmpty(self):        return self.items == []            def push(self, item):        self.items.append(item)            def pop(self, item):        return self.items.pop()            def peek(self):        return self.items[len(self.items) - 1]            def size(self):        return len(self.items)
栈的应用:领扣上有个题是关于括号匹配的。基本思想就是:从左至右扫描括号串,最新打开(Most recent)的左括号,应该匹配最先遇到的右括号。这样,第一个左括号(最早打开),就应该匹配最后一个右括号(最后遇到)。这种次序反转的识别,正好符合栈的特性。

21629d6596eea39ec85ea81cec0f7834.png

79c20827d4cd0fcd66814f88bf8d74c0.png

代码的实现有一个简单版的(只检查小括号)和一个普通版的(同时检查小括号,中括号及大括号),现实中遇到更多的自然是普通版的。这里就只贴下普通版了。
## Stack()是上面写好的类def matches(open, close):    opens = '([{'    closes = ')]}'    return opens.index(open) == closes.index(close)def check(strings):    s = Stack()    balance = True    index = 0    while index and         symbol = strings[index]        if symbol in '([{':            s.push(symbol)        else:            if s.isEmpty():                balance = False            else:                top = s.pop()                if not matches(top, symbol):                    balance = False        index += 1    if balance and s.isEmpty():        return True    else:        return False        

相关文章:

  • 台电u盘安国au6989sn芯片量产工具_台电u盘无法格式化怎么办 台电u盘无法格式化解决办法【介绍】...
  • python可以用del释放资源_Python 中带有显式 __del__ 方法的对象需要手动释放循环引用...
  • mybatis mysql自增主键_mybatis 自增主键配置
  • mysql groupby rullup_group by后加rollup子句的用法
  • Mysql历史事务_mysql事务
  • python读取多列csv文件_多列上的csvjoin
  • sql 孩子兄弟表示法 所有子节点_sunxiaohang
  • mysql redis集群 同步_redis集群和redis主从同步的区别
  • java逆向_Java逆向武器库_反编译工具
  • java加速_java写入加速
  • java部门树_java部门树的递归
  • mysql为什么创建不了表_求教,,为什么创建不了表
  • java目前主流框架_java的三大主流框架介绍
  • java elasticsearch_Java操作ElasticSearch
  • java 拆分xml_使用Java分割1GB Xml文件