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 相关文章推荐
Python中__name__的使用实例
Apr 14 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
python中for用来遍历range函数的方法
Jun 08 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
Python hashlib模块加密过程解析
Nov 05 Python
解决Python3下map函数的显示问题
Dec 04 Python
python实现加密的方式总结
Jan 19 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
如何搭建pytorch环境的方法步骤
May 06 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
Python图片验证码降噪和8邻域降噪
Aug 30 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
类的另类用法--数据的封装
2006/10/09 PHP
PHP安全配置
2006/12/06 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
jquery中radio checked问题
2015/03/16 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
JS改变页面颜色源码分享
2018/02/24 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
vue实现axios图片上传功能
2019/08/20 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
HTTP状态码详解
2021/03/18 杂记
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
学生档案自我鉴定
2013/10/07 职场文书
见习期自我鉴定
2013/11/07 职场文书
厨房管理计划书
2014/04/27 职场文书
敬老院活动总结
2014/04/28 职场文书
土木工程求职信
2014/05/29 职场文书
体育课外活动总结
2014/07/08 职场文书
学习保证书
2015/01/17 职场文书
小学生手册家长意见
2015/06/03 职场文书