python 栈的用法--学习
棧
棧(stack),可以理解成一盒口香糖,想要拿出一顆,自然從頂部取走最后放入的,這里的頂部就是"棧頂";添加和移除新項(xiàng)都發(fā)生在棧頂,與棧頂對(duì)應(yīng)的端稱為“棧底”。棧這種數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)是后進(jìn)先出(Last In First Out - LIFO),即最后被堆進(jìn)去的數(shù)據(jù),最先被拿出來。
從棧放入新項(xiàng)和從棧刪除項(xiàng)的操作分別叫(push)和(pop)。
棧的操作
棧操作如下
Stack() 創(chuàng)建一個(gè)空的新棧。
push(item)將一個(gè)新項(xiàng)添加到棧的頂部。
pop() 從棧中刪除頂部項(xiàng)。
peek() 從棧返回頂部項(xiàng),但不會(huì)刪除它
is_Empty() 測(cè)試棧是否為空。
size() 返回棧中的 item 數(shù)量。
棧的實(shí)現(xiàn)
這里把列表(list)相當(dāng)于一個(gè)棧,可以使用 append 和 pop的列表方法來實(shí)現(xiàn)操作。以下棧實(shí)現(xiàn)假定列表的結(jié)尾將保存棧的頂部元素。隨著棧元素增長(zhǎng)(push ),新項(xiàng)將被添加到列表的末尾。(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): # 把新的元素堆進(jìn)棧里面(入棧)self.items.append(item)def pop(self, item): # 把棧頂元素丟出去(出棧)return self.items.pop() if __name__ == '__main__':my_stack = Stack() # 初始化一個(gè)棧對(duì)象my_stack.push('a') # 把'a'丟進(jìn)棧里my_stack.push('b') # 把'b'丟進(jìn)棧里my_stack.push('c') # 把'c'丟進(jìn)棧里print (my_stack.size()) # 棧中有幾個(gè)元素print (my_stack.peek()) # 打印棧頂元素print (my_stack.pop('a')) # 把棧頂元素a丟出去,并打印出來print (my_stack.peek()) # 再看一下棧頂元素是誰print (my_stack.size()) # 這個(gè)時(shí)候棧的大小是多少?print (my_stack.pop('b')) # 再丟一個(gè)棧頂元素bprint (my_stack.size) # 看一下棧的大小print (my_stack.is_empty()) # 判斷棧是不是空了?<擴(kuò)展知識(shí)>
堆和棧的區(qū)別
1、棧區(qū)(stack)— 由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。
2、堆區(qū)(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事.
堆和棧的理論知識(shí)
由申請(qǐng)方式劃分:
stack: 由系統(tǒng)自動(dòng)分配。 例如,聲明在函數(shù)中一個(gè)局部變量 int b; 系統(tǒng)自動(dòng)在棧中為b開辟空間
heap: 需要程序員自己申請(qǐng),并指明大小.
堆和棧的區(qū)別可以用如下的比喻來看出:
使用棧就如同我們?nèi)ワ堭^里吃飯,只管點(diǎn)菜(發(fā)出申請(qǐng))、付錢、和吃(使用),吃飽了就走,不必理會(huì)切菜、洗菜等準(zhǔn)備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。
使用堆就象是自己動(dòng)手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度大。
有任何問題,可以關(guān)注我的公眾號(hào): IT果力成,一起學(xué)習(xí)交流~加油
總結(jié)
以上是生活随笔為你收集整理的python 栈的用法--学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求HCNP实验指南
- 下一篇: c语言程序设计王延梅,医学超声原理 超声