資料結構和演算法 Python實現 03 棧和佇列

2021-10-21 15:20:38 字數 1719 閱讀 4980

棧(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的特性。當程式結束時,只需要修改棧的頭指標就可以直接釋放記憶體了,因此這種效率較快,但需...