python資料結構與演算法——棧、佇列與雙端佇列
棧
棧:是一種容器,可存入資料元素、訪問元素、刪除元素,它的特點在於只能允許在容器的一端進行加入資料和輸出資料的運算。沒有了位置概念,保證任何時候可以訪問、刪除的元素都是此前最後存入的那個元素,確定了一種預設的訪問順序。
- 由於只能在一端操作,因此按照後進先出的原理運作
棧的實現
支援操作:
-
Stack()建立一個新的空棧
-
push(item)新增一個新的元素item到棧頂
-
pop()彈出棧頂元素
-
peek()返回棧頂元素
-
is_empty()判斷棧是否為空
-
size()返回棧的元素個數
class Stack(object):
"""棧"""
def __init__(self):
self.__list = []
def push(self, item):
"""加入元素"""
self.__list.append(item)
def pop(self):
"""彈出元素"""
return self __list.pop()
def peek(self):
"""返回棧頂元素"""
if self.__list:
return self.__list[-1]
else:
return None
def is_empty(self):
"""判斷是否為空"""
#return self.__list == []
return not self__list
def size(self):
"""返回棧的大小"""
return len(self.__list)
if __name__ == "__main__":
stack = Stack()
stack.push("hello, world")
stack.push("hello, python")
stack.push("hello, China")
print(stack.size())
print(stack.peek())
print(stack.pop())
print(stack.pop())
佇列與雙端佇列
佇列(queue)是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性表
佇列是一種先進先出的線性表,簡稱FIFO。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作。
佇列的實現
class Queue(object):
"""佇列"""
def __init__(self):
self.__list = []
def enqueue(self,item):
"""往佇列中新增一個item元素"""
self.__list.append(item)
def dequeue(self):
"""從佇列頭部刪除一個元素"""
return slef.pop(0)
def is_empty(self):
"""判斷一個佇列是否為空"""
return self.__list == []
def size(self):
"""返回佇列的大小"""
return len(self.__list)
if __name__ == "__main__":
s = Queue()
s.enqueque(1)
s.enqueque(2)
s.enqueque(3)
s.enqueque(4)
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
雙端佇列
雙端佇列,是一種具有佇列和棧的性質的資料結構
雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端佇列可以在佇列任意一端入隊和出隊
雙端佇列的實現
操作:
-
Deque()建立一個空的雙端佇列
-
add_front(item)從隊頭加入一個item元素
-
add_rear(item)從隊尾加入一個item元素
-
remove_front()從隊頭刪除一個item元素
-
remove_rear()從隊尾刪除一個item元素
-
is_empty()判斷雙端是否為空
-
size()返回佇列大小
class Deque(object):
"""雙端佇列"""
def __init__(self):
self.__list = []
def add_front(self, item):
"""往佇列頭部新增一個item元素"""
self.__list.insert(0, item)
def add_rear(self, item):
"""往佇列尾部新增一個item元素"""
self.__list.append(item)
def pop_front(self):
"""從佇列頭部刪除一個元素"""
return self.__list.pop(0)
def pop_rear(self):
"""從佇列尾部刪除一個元素"""
return self.__list.pop()
def is_empty(self):
"""判斷一個佇列是否為空"""
return self.__list == []
def size(self):
"""返回佇列大小"""
return len(self.__list)
原創文章,轉載周知
持續更新…
個人部落格地址:www.limiao.tech
相關文章
- 三、資料結構演算法-棧、佇列、優先佇列、雙端佇列資料結構演算法佇列
- 資料結構-棧與佇列資料結構佇列
- 資料結構:棧與佇列資料結構佇列
- 資料結構與演算法-棧與佇列資料結構演算法佇列
- 資料結構與演算法(三),棧與佇列資料結構演算法佇列
- 資料結構與演算法——佇列(環形佇列)資料結構演算法佇列
- 《資料結構與演算法》——表、棧和佇列資料結構演算法佇列
- 前端學習 資料結構與演算法 快速入門 系列 —— 佇列和雙端佇列前端資料結構演算法佇列
- 資料結構之「雙端佇列」資料結構佇列
- PTA 雙端佇列 資料結構佇列資料結構
- 資料結構—棧/佇列資料結構佇列
- 資料結構-佇列、棧資料結構佇列
- 資料結構與演算法-佇列資料結構演算法佇列
- 資料結構與演算法(二)佇列、棧、連結串列資料結構演算法佇列
- 線性結構 佇列與棧佇列
- Python資料結構與演算法系列四:棧和佇列Python資料結構演算法佇列
- 結構與演算法(02):佇列和棧結構演算法佇列
- python演算法與資料結構-佇列(44)Python演算法資料結構佇列
- JavaScript的資料結構與演算法(一)——棧和佇列JavaScript資料結構演算法佇列
- 資料結構與演算法分析——佇列資料結構演算法佇列
- javascript資料結構與演算法-佇列JavaScript資料結構演算法佇列
- javascript資料結構與演算法---佇列JavaScript資料結構演算法佇列
- 資料結構—棧和佇列資料結構佇列
- 資料結構(棧和佇列)資料結構佇列
- 【資料結構】--棧和佇列資料結構佇列
- 資料結構與演算法—稀疏陣列和佇列資料結構演算法陣列佇列
- 資料結構與演算法JavaScript (二) :佇列資料結構演算法JavaScript佇列
- JavaScript資料結構之陣列棧佇列JavaScript資料結構陣列佇列
- 資料結構之棧和佇列資料結構佇列
- 聊聊陣列與連結串列,棧與佇列陣列佇列
- C#資料結構與演算法2-C# 棧和佇列C#資料結構演算法佇列
- java 棧與佇列Java佇列
- 畫江湖之資料結構【第二話:佇列和棧】佇列資料結構佇列
- 畫江湖之資料結構 [第二話:佇列和棧] 佇列資料結構佇列
- 單調佇列雙端佇列佇列
- 資料結構與演算法分析 (優先佇列)資料結構演算法佇列
- Java版-資料結構-佇列(陣列佇列)Java資料結構佇列陣列
- Python資料結構——佇列Python資料結構佇列