python 栈的用法--学习
棧
棧(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')) # 再丟一個棧頂元素bprint (my_stack.size) # 看一下棧的大小print (my_stack.is_empty()) # 判斷棧是不是空了?<擴展知識>
堆和棧的區別
1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。
2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事.
堆和棧的理論知識
由申請方式劃分:
stack: 由系統自動分配。 例如,聲明在函數中一個局部變量 int b; 系統自動在棧中為b開辟空間
heap: 需要程序員自己申請,并指明大小.
堆和棧的區別可以用如下的比喻來看出:
使用棧就如同我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。
使用堆就象是自己動手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度大。
有任何問題,可以關注我的公眾號: IT果力成,一起學習交流~加油
總結
以上是生活随笔為你收集整理的python 栈的用法--学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求HCNP实验指南
- 下一篇: 【python】pop()栈函数介绍