棧(stack)是乙個項的有序集合。新增項和移除項都發生在同一「端」。這一端通常被稱為頂,另一端的頂部被稱為底。
棧的底是有標誌性的,因為儲存在棧中更靠近底的項就是棧中儲存時間最長的項。最新新增的項在移除項時也會第乙個被移除。這種排序原則有時也稱為lifo法,也就是後進先出。
棧很重要,因為它們可以用於反轉項的順序。如下圖所示:
本文採用python語言中的列表(list)這種基礎資料結構實現棧。首先定義乙個 stack 類,類中包含進棧、出棧、棧是否為空、棧的大小等基本方法,具體**如下:
class stack():
def __init__(self):
self.stack =
# 進棧
def push(self, item):
# 出棧
def pop(self):
if self.is_empty() == true:
return none
else:
return self.stack.pop()
# 棧是否為空
def is_empty(self):
return self.stack ==
# 棧的大小
def size(self):
return len(self.stack)
佇列(queue)是一系列有順序的元素的集合,新元素的加入在佇列的一端,這一端叫做隊尾(rear),已有元素的移除發生在佇列的另一端,叫做隊首(front)。當乙個元素被加入到佇列之後,它就從隊尾開始向隊首前進,直到它成為下乙個即將被移出佇列的元素。
最新被加入的元素必須處於隊尾,在佇列停留最長時間的元素處於隊首。這種原則有時候叫做先進先出(fifo, first-in first-out),進出佇列的過程如下圖所示:
本文採用python語言中的列表(list)這種基礎資料結構實現佇列。首先定義乙個 queue 類,類中包含進隊、出隊、佇列是否為空、佇列的大小等基本方法,具體**如下:
class queue():
def __init__(self):
self.queue =
# 進隊
def push(self, item):
# 出隊
def pop(self):
if self.is_empty() == true:
return none
else:
return self.queue.pop(0)
# 佇列是否為空
def is_empty(self):
return self.queue ==
# 佇列的長度
def size(self):
return len(self.queue)
備註:python中的collections模組中實現了佇列這種資料結構,可以直接呼叫。 Python實現各類資料結構和演算法 計數排序
計數 排序 假設前提 n個輸入元素中的每乙個都是在0到k區間內的乙個整數,其中k為某個整數 基本思想 對每乙個輸入元素x,確定小於x的元素個數。利用這一資訊,就可以直接把x放到它 輸出陣列中的位置上了。例如 如果有17個元素小於x,則x就應該放在第18個輸出位置上。當有幾個元素相同時,這一方案要略作...
資料結構和演算法 java實現棧結構
棧的定義 棧 stack 是限制僅在表的一端進行插入和刪除運算的線性表。1 通常稱插入 刪除的這一端為棧頂 top 另一端稱為棧底 bottom 2 當表中沒有元素時稱為空棧。3 棧為後進先出 last in first out 的線性表,簡稱為 lifo 表。棧的修改是按後進先出的原則進行。每次刪...
資料結構演算法 Python實現堆排序
演算法時間複雜度 堆 程式執行過程中動態分配的記憶體,比如c中的malloc和c 中的new。這種效率會比較慢,但不用預先定義。棧 作業系統在建立某個程序或執行緒時,為其建立的記憶體空間,該記憶體空間具有fifo的特性。當程式結束時,只需要修改棧的頭指標就可以直接釋放記憶體了,因此這種效率較快,但需...