堆疊(stack)是一個項目的有序集合,其中新增移除新項目總是會發生在同一端。這一端通常稱為“頂部”。與頂部對應的端稱為“底部”。
就像圖片所描述的,堆疊s=(a1,a2,…an-1,an)。最後入棧的是an,最早出棧的也是an。所以棧符合LIFO原則。
LIFO
LIFO,即後進先出的排序原則。它是基於在集合內的時間長度做排序。較新的項靠近頂部,較舊的項靠近底部。棧的底部很重要,因為在棧中靠近底部的項是儲存時間最長的。最近新增的項目是最先會被移除的。
堆疊之所以重要是因為它能反轉項的順序。插入跟刪除順序相反。
最典型的例子就是每個 web 瀏覽器都有一個回傳按鈕。當你瀏覽網頁時,這些網頁被放置在一個堆疊中(實際上是網頁的網址)。你現在查看的網頁在頂部,你第一個查看的網頁在底部。如果按下‘返回’按鈕,將按相反的順序瀏覽剛才的頁面。
Python實作堆疊
# 创建一个空的新栈。 它不需要参数,并返回一个空栈。 class Stack: def __init__(self): self.items = [] # 测试栈是否为空。不需要参数,并返回布尔值。 def isEmpty(self): return self.items == [] # 将一个新项添加到栈的顶部。它需要 item 做参数并不返回任何内容。 def push(self, item): self.items.append(item) # 从栈中删除顶部项。它不需要参数并返回 item 。栈被修改。 def pop(self): return self.items.pop() # 从栈返回顶部项,但不会删除它。不需要参数。 不修改栈。 def peek(self): return self.items[len(self.items)-1] # 返回栈中的 item 数量。不需要参数,并返回一个整数。 def size(self): return len(self.items)
#將十進制數轉換為任意進制數
知道了堆疊的基本操作就做一個小專案來練練手。將十進制數轉換為任意進制數,其實最高也就十六進制(還有更高進制嗎)。
def baseConverter(n, base): # n是输入的十进制数字,base为要转化的进制数 digits = '0123456789ABCDEF' #创建一个新栈 s= Stack() # 将每次计算所得的余数添加进栈 while n> 0: rem = n % base s.push(rem) n = n // base # 将余数倒序排列至新字符串 newString = '' while not remstack.isEmpty(): newString = newString + digits[remstack.pop()] return newString
相關推薦:《Python教學》
以上是python中的棧指的是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!