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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
理论讲解python多进程并发编程
Feb 09 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
Python 列表去重去除空字符的例子
Jul 20 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
Dec 04 Python
Python Socket多线程并发原理及实现
Dec 11 Python
Python实战之实现简易的学生选课系统
May 25 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
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
js实现带箭头的进度流程
2020/03/26 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
python 字符串split的用法分享
2013/03/23 Python
python抓取百度首页的方法
2015/05/19 Python
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
Python 去除字符串中指定字符串
2020/03/05 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
白色公司:The White Company
2017/10/11 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
《走一步再走一步》教学反思
2014/02/15 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
供货协议书
2014/04/22 职场文书
本科生就业推荐信
2014/05/19 职场文书
如何写观后感
2015/06/19 职场文书
施工安全责任协议书
2016/03/23 职场文书