Python实现包含min函数的栈


Posted in Python onApril 29, 2016

本文实例讲述了Python实现包含min函数的栈。分享给大家供大家参考,具体如下:

# coding=utf8
'''
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。
在该栈中,调用min、push及pop的时间复杂度都是O(1)。
'''
class Stack():
  def __init__(self):
    self.main_stack = []
    # 辅助栈,每次次最小的元素压入辅助栈
    self.assist_stack = []
    # 记录栈中的最小元素
    self._min = None
  def min(self):
    return self._min
  def push(self, data):
    self.main_stack.append(data)
    if self._min is None:
      self._min = data
    else:
      if data < self._min:
        self._min = data
    # 将最小的元素压入辅助栈
    self.assist_stack.append(self._min)
  def pop(self):
    if len(self.main_stack) == 0:
      raise Exception('no data')
    elif len(self.main_stack) == 1:
      self.assist_stack.pop()
      self._min = None
      return self.main_stack.pop()
    else:
      self.assist_stack.pop()
      self._min = self.assist_stack[-1]
      return self.main_stack.pop()
if __name__ == '__main__':
  s = Stack()
  s.push(3)
  s.push(4)
  s.push(2)
  s.push(1)
  print s.min()
  s.pop()
  s.pop()
  print s.min()
  s.pop()
  print s.min()
  s.pop()
  print s.min()
  s.pop()

更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用wxpython实现的一个简单图片浏览器实例
Jul 10 Python
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
python中实现延时回调普通函数示例代码
Sep 08 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 Python
python 中的@运算符使用
May 26 Python
Python Django获取URL中的数据详解
Nov 01 Python
Python二叉搜索树与双向链表转换实现方法
Apr 29 #Python
Python实现简单字典树的方法
Apr 29 #Python
Python中操作符重载用法分析
Apr 29 #Python
Python中绑定与未绑定的类方法用法分析
Apr 29 #Python
Python过滤列表用法实例分析
Apr 29 #Python
Python松散正则表达式用法分析
Apr 29 #Python
python中私有函数调用方法解密
Apr 29 #Python
You might like
使用php+xslt在windows平台上
2006/10/09 PHP
PHP中计算字符串相似度的函数代码
2012/12/29 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
jquery 元素相对定位代码
2010/10/15 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
Python 复平面绘图实例
2019/11/21 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
python字典与json转换的方法总结
2020/12/28 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
高中生学习生活的自我评价
2013/10/09 职场文书
共产党员承诺书
2014/03/25 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
党员剖析材料范文
2014/09/30 职场文书
企业年检委托书范本
2014/10/14 职场文书
开学第一周值周总结
2015/07/16 职场文书
月考总结与反思
2015/10/22 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
详解JVM系列之内存模型
2021/06/10 Javascript
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
GPU服务器的多用户配置方法
2022/07/07 Servers
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python