日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python栈和队列

發布時間:2024/3/24 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.data

3、進棧

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.queue

3、輸出隊列長度

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 a

6、獲取隊首元素

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栈和队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。