赞
踩
栈(stack),可以理解成一盒口香糖,想要拿出一颗,自然从顶部取走最后放入的,这里的顶部就是"栈顶";添加和移除新项都发生在栈顶,与栈顶对应的端称为“栈底”。栈这种数据结构的特点是后进先出(Last In First Out - LIFO),即最后被堆进去的数据,最先被拿出来。
从栈放入新项和从栈删除项的操作分别叫(push)和(pop)。
栈操作如下
Stack() 创建一个空的新栈。
push(item)将一个新项添加到栈的顶部。
pop() 从栈中删除顶部项。
peek() 从栈返回顶部项,但不会删除它
is_Empty() 测试栈是否为空。
size() 返回栈中的 item 数量。
这里把列表(list)相当于一个栈,可以使用 append 和 pop的列表方法来实现操作。以下栈实现假定列表的结尾将保存栈的顶部元素。随着栈元素增长(push ),新项将被添加到列表的末尾。(pop) 操作列表末尾的元素。
class Stack(object):
def __init__(self): # 初始化栈为空列表
self.items = []
def is_empty(self): # 判断栈是否为空,返回布尔值
return self.items == []
def peek(self): # 返回栈顶元素
return self.items[len(self.items) - 1]
def size(self): # 返回栈的大小
return len(self.items)
def push(self, item): # 把新的元素堆进栈里面(入栈)
self.items.append(item)
def pop(self, item): # 把栈顶元素丢出去(出栈)
return self.items.pop()
if __name__ == '__main__':
my_stack = Stack() # 初始化一个栈对象
my_stack.push('a') # 把'a'丢进栈里
my_stack.push('b') # 把'b'丢进栈里
my_stack.push('c') # 把'c'丢进栈里
print (my_stack.size()) # 栈中有几个元素
print (my_stack.peek()) # 打印栈顶元素
print (my_stack.pop('a')) # 把栈顶元素a丢出去,并打印出来
print (my_stack.peek()) # 再看一下栈顶元素是谁
print (my_stack.size()) # 这个时候栈的大小是多少?
print (my_stack.pop('b')) # 再丢一个栈顶元素b
print (my_stack.size) # 看一下栈的大小
print (my_stack.is_empty()) # 判断栈是不是空了?
<扩展知识>
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事.
由申请方式划分:
stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间
heap: 需要程序员自己申请,并指明大小.
堆和栈的区别可以用如下的比喻来看出:
使用栈就如同我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。
有任何问题,可以关注我的公众号: IT果力成,一起学习交流~加油
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。