python中栈函数 python3 栈( 二 )


中缀表达式A + B; A + B * C; (A + B) * C
前缀表达式+ AB ; + A * BC ; * +ABC
后缀表达式AB + ; A B C * +; AB + C*
在中缀表达式中必须有的括号,在前缀和后缀表达式中消失了
思路
1 将中缀表达式转换为全括号的形式
2 将所有的操作符移动到子表达式所在的左括号(前缀)或者右括号(后缀)处,再删除其它所有的括号
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()
【python中栈函数 python3 栈】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堆和栈的区别有哪些堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义 。一般情况下 , 有两层含义python中栈函数:
(1)程序内存布局场景下,堆与栈表示的是两种内存管理方式;
(2)数据结构场景下,堆与栈表示两种常用的数据结构 。
相关推荐:《Python教程》
堆与栈实际上是操作系统对进程占用的内存空间的两种管理方式 , 主要有如下几种区别:
(1)管理方式不同 。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;
(2)空间大小不同 。每个进程拥有的栈的大小要远远小于堆的大小 。理论上,程序员可申请的堆大小为虚拟内存的大?。陶坏拇笮?64bits 的 Windows 默认 1MB , 64bits 的 Linux 默认 10MB;
(3)生长方向不同 。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低 。
(4)分配方式不同 。堆都是动态分配的 , 没有静态分配的堆 。栈有2种分配方式:静态分配和动态分配 。静态分配是由操作系统完成的,比如局部变量的分配 。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由操作系统进行释放,无需我们手工实现 。
(5)分配效率不同 。栈由操作系统自动分配 , 会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定python中栈函数了栈的效率比较高 。堆则是由C/C++提供的库函数或运算符来完成申请与管理 , 实现机制较为复杂 , 频繁的内存申请容易产生内存碎片 。显然,堆的效率比栈要低得多 。