python的函数栈 python中的栈

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 dataself._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()
【python的函数栈 python中的栈】print s.min()
s.pop()
print s.min()
s.pop()
print s.min()
s.pop()
画函数堆栈用什么工具站画函数堆栈用Python工具站
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆 于1990 年代初设计,作为一门叫做ABC语言的替代品 。Python提供了高效的高级数据结构 , 还能简单有效地面向对象编程 。Python语法和动态类型,以及解释型语言的本质 , 使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发 。
Python解释器易于扩展 , 可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型 。Python 也可用于可定制化软件中的扩展程序语言 。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码 。
python堆和栈的区别有哪些堆(Heap)与栈(Stack)是开发人员必须面对的两个概念 , 在理解这两个概念时 , 需要放到具体的场景下 , 因为不同场景下,堆与栈代表不同的含义 。一般情况下,有两层含义:
(1)程序内存布局场景下 , 堆与栈表示的是两种内存管理方式;
(2)数据结构场景下,堆与栈表示两种常用的数据结构 。
相关推荐:《Python教程》
堆与栈实际上是操作系统对进程占用的内存空间的两种管理方式,主要有如下几种区别:
(1)管理方式不同 。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;
(2)空间大小不同 。每个进程拥有的栈的大小要远远小于堆的大小 。理论上 , 程序员可申请的堆大小为虚拟内存的大?。陶坏拇笮?64bits 的 Windows 默认 1MB,64bits 的 Linux 默认 10MB;
(3)生长方向不同 。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低 。
(4)分配方式不同 。堆都是动态分配的,没有静态分配的堆 。栈有2种分配方式:静态分配和动态分配 。静态分配是由操作系统完成的,比如局部变量的分配 。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的 , 他的动态分配是由操作系统进行释放,无需我们手工实现 。
(5)分配效率不同 。栈由操作系统自动分配 , 会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高 。堆则是由C/C++提供的库函数或运算符来完成申请与管理 , 实现机制较为复杂,频繁的内存申请容易产生内存碎片 。显然,堆的效率比栈要低得多 。

推荐阅读