Python數據結構——棧

棧是一種特殊的列表,棧內的元素只能經過列表的一端訪問,這一端稱爲棧頂。咖啡廳內的一摞盤子是現實世界中常見的棧的例子。只能從最上面取盤子,盤子洗淨後,也只能摞在這一摞盤子的最上面。棧被稱爲一種後入先出(LIFO,last-in-first-out)的數據結構。python

因爲棧具備後入先出的特色,因此任何不在棧頂的元素都沒法訪問。爲了獲得棧底的元素,必須先拿掉上面的元素。數據結構

對棧的兩種主要操做是將一個元素壓入棧和將一個元素彈出棧。入棧使用push()方法,出棧使用pop()方法。下圖演示了入棧和出棧的過程。app

圖片描述

另外一個經常使用的操做是預覽棧頂的元素。pop()方法雖然能夠訪問棧頂的元素,可是調用該方法後,棧頂元素也從棧中被永久性地刪除了。peek()方法則只返回棧頂元素,而不刪除它。spa

爲了記錄棧頂元素的位置,同時也爲了標記哪裏能夠加入新元素,咱們使用變量top,當向棧內壓入元素時,該變量增大;從棧內彈出元素時,該變量減少。code

push()、pop()和peek()是棧的3個主要方法,可是棧還有其餘方法和屬性。對象

stack一般的操做:圖片

Stack()    創建一個空的棧對象
push()     把一個元素添加到棧的最頂層
pop()      刪除棧最頂層的元素,並返回這個元素
peek()     返回最頂層的元素,並不刪除它
isEmpty()  判斷棧是否爲空
size()     返回棧中元素的個數

簡單案例以及操做結果:it

Stack Operation Stack Contents Return Value
s.isEmpty() [] True
s.push(4) [4]
s.push('dog') [4,'dog']
s.peek() [4,'dog'] 'dog'
s.push(True) [4,'dog',True]
s.size() [4,'dog',True] 3
s.isEmpty() [4,'dog',True] False
s.push(8.4) [4,'dog',True,8.4]
s.pop() [4,'dog',True] 8.4
s.pop() [4,'dog'] True
s.size() [4,'dog'] 2

這裏使用python的list對象模擬棧的實現:io

class Stack: 
    """模擬棧""" 
    def __init__(self): 
        self.items = [] 

    def isEmpty(self): 
        return len(self.items)==0  

    def push(self, item): 
        self.items.append(item) 

    def pop(self): 
        return self.items.pop()  

    def peek(self): 
        if not self.isEmpty(): 
            return self.items[len(self.items)-1] 

    def size(self): 
        return len(self.items)

建立一個棧對象,並加入操做方法:table

s=Stack() 
print(s.isEmpty()) 
s.push(4) 
s.push('dog') 
print(s.peek()) 
s.push(True) 
print(s.size()) 
print(s.isEmpty()) 
s.push(8.4) 
print(s.pop()) 
print(s.pop()) 
print(s.size())
相關文章
相關標籤/搜索