python栈和队列
入門小菜鳥,希望像做筆記記錄自己學的東西,也希望能幫助到同樣入門的人,更希望大佬們幫忙糾錯啦~侵權立刪。
目錄
一、棧和隊列的概念
1、棧
2、隊列
二、python中的LifoQueue(其實也是所謂的后進先出隊列)和list列表
三、python自行搭建棧
1、初始化
2、判斷棧是否為空
3、進棧
4、出棧
5、棧的長度
6、輸出棧頂元素但不彈出
7、具體調用
三、python中的Queue
四、python自行搭建隊列
1、初始定義
2、判斷隊列是否為空
3、輸出隊列長度
4、入隊
5、出隊
6、獲取隊首元素
7、具體調用
一、棧和隊列的概念
1、棧
簡單來說,棧也是線性表的一種。它只允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。
進棧:向一個棧插入新元素,它是把新元素放到棧頂元素的上面,變成新的棧頂元素;
出棧:從一個棧刪除元素,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
2、隊列
隊列也是一種一種線性表。
特點:
(1)隊列中的數據元素遵循“先進先出”(First In First Out)的原則,簡稱FIFO結構。
(2)在隊尾添加元素,在隊頭刪除元素。
二、python中的LifoQueue(其實也是所謂的后進先出隊列)和list列表
python具有實現棧的數據結構,是queue庫中的LifoQueue。接下來讓我們來看看它的幾個相關應用。
from queue import LifoQueuestack = LifoQueue() for i in range(5):stack.put(i) #進棧for i in range(5):print(stack._get()) #出棧首先從queue庫中導入LifoQueue,put(data)是進棧,_get()是出棧。
此外隊列除了傳統的先進先出,還有先進后出(就類似棧),還有優先級隊列(PriorityQueue),他們都是從先進先出改進而來的。
當然最簡單的就是直接用列表啦~
a = [1,2,3] a.pop()#出棧 a.append(4)#入棧三、python自行搭建棧
1、初始化
class Stack:def __init__(self):self.data = []2、判斷棧是否為空
def isEmpty(self): #判斷棧是否為空return not self.data3、進棧
def push(self,data): #進棧self.data.append(data)4、出棧
def pop(self): #彈出棧頂元素(出棧)return self.data.pop()5、棧的長度
def size(self): #輸出棧的大小return len(self.data)6、輸出棧頂元素但不彈出
def searchtop(self): #輸出棧頂元素(但未彈出)return self.data[-1]7、具體調用
stack = Stack() for i in range(5):stack.push(i) print(stack.size()) print(stack.searchtop()) for i in range(5):print(stack.pop()) print(stack.isEmpty())三、python中的Queue
python具有實現棧的數據結構,是queue庫中的Queue。
首先我們從queue庫中調用Queue
from queue import Queue q = Queue()然后很遺憾,開始報錯
cannot import name 'Queue' from partially initialized module 'queue' (most likely due to a circular import)后來發現原來是因為我把文件名定義成queue.py的緣故,和queue庫重名了,所以換個文件件名就沒事了。
for i in range(5):q.put(i) for i in range(5):print(q.get())和LifoQueue類似的,put(data)入隊,get()出隊
四、python自行搭建隊列
1、初始定義
class Queuepy:def __init__(self):self.queue = []2、判斷隊列是否為空
def isEmpty(self): #判斷隊列是否為空return not self.queue3、輸出隊列長度
def size(self): #輸出隊列長度return len(self.queue)4、入隊
def joinqueue(self,data): #入隊(隊尾)self.queue.append(data)5、出隊
def outofqueue(self): #出隊(隊頭)l = len(self.queue)if l == 0:print("The queue is None")else:a = self.queue[0]q = []for i in range(l-1):q.append(self.queue[i+1])self.queue = qreturn a6、獲取隊首元素
def getleader(self): #獲取隊頭return self.queue[0]7、具體調用
k = Queuepy() for i in range(5):k.joinqueue(i) print(k.isEmpty()) print(k.size()) print(k.getleader()) for i in range(5):print(k.outofqueue()) print(k.isEmpty())歡迎大家在評論區批評指正,謝謝大家~
總結
以上是生活随笔為你收集整理的python栈和队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端canvas实现图画工具
- 下一篇: websocket python爬虫_p