python資料結構與演算法(2)棧與佇列

2021-10-23 15:12:26 字數 1730 閱讀 6493

目錄

1、棧2、棧的實現

3、佇列

4、佇列的實現

5、雙端佇列的實現

棧的特點在於,棧只能從一頭進出,即先進後出,後進先出,對棧的操作:訪問刪除等,都是從棧尾進行的。這種特性適合用來檢測兩兩對應的關係是否匹配。

棧從某種意義上來說是特殊的列表,只是在訪問刪除元素的時候,在規則上比列表多了一些限制。

class stack(object):

#棧def __init__(self):

self.items =

def is_empty(self):

#判斷是否為空

return self.items ==

def push(self, item):

#加入元素

def pop(self):

#彈出元素

return self.items.pop()

def peek(self):

#返回棧頂元素

return self.items[len(self.items)-1]

def size(self):

#返回棧的大小

return len(self.items)

佇列是與棧相似但是規則相反的一種資料結構,佇列是先進先出,後進後出,從佇列後面新增元素,從佇列前端刪除元素,訪問元素也是從前向後。

目前刷題數量有限還不了解佇列的主要用途。

佇列同樣可以用列表來實現。

class queue(object):

#佇列def __init__(self):

self.items =

def is_empty(self):

return self.items ==

def enqueue(self, item):

#進佇列

self.items.insert(0,item)

def dequeue(self):

#出佇列

return self.items.pop()

def size(self):

#返回大小

return len(self.items)

雙端佇列,具有棧和佇列的兩種特性,既能從前端進出,也能從後端進出。

雙端佇列,也可以用列表來實現。

class deque(object):

#雙端佇列

def __init__(self):

self.items =

def is_empty(self):

#判斷佇列是否為空

return self.items ==

def add_front(self, item):

#在隊頭新增元素

self.items.insert(0,item)

def add_rear(self, item):

#在隊尾新增元素

def remove_front(self):

#從隊頭刪除元素

return self.items.pop(0)

def remove_rear(self):

#從隊尾刪除元素

return self.items.pop()

def size(self):

#返回佇列大小

return len(self.items)

資料結構與演算法 2 棧

2 儲存結構 2.2 鏈式儲存結構 定義 棧是限定僅在表尾進行插入和刪除的線性表。棧是一種線性表。允許插入和刪除的一端稱為棧頂,另一端稱之為棧底。不含任何元素的棧稱之為空棧,並且棧是後進先出。簡稱lifo結構。插入操作稱之為進棧,壓棧,刪除操作稱之為出棧,彈棧。adt 棧 stack data 同線...

python資料結構與演算法 棧

逆波蘭表示式 reverse polish notation 有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。輸入 2 1 3 輸出 9 解釋 2 1 3 9 分析 棧 遍歷陣列,逐漸壓入棧中,如果遇到運算字元,則彈出棧頂兩個元素,之後將計算結果再壓入棧中 class solu...

python資料結構與演算法 棧

棧 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 peek 返回棧頂元素 is empty 判斷棧是否為空 size 返回棧的元素個數 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 p...