Python演算法 實現佇列的基本操作

2021-09-25 20:45:56 字數 2966 閱讀 4460

實現乙個佇列的資料結構,具有:入隊、出隊、檢視隊尾首元素、檢視佇列大小等功能。

# -*- coding:utf-8 -*-

'''陣列實現佇列

'''class myqueue():

def __init__(self):

self.arr =

self.front = 0 #佇列頭

self.rear = 0 #佇列尾

#判斷佇列是否為空

def isempty(self):

return self.front == self.rear

#返回佇列大小

def size(self):

return self.rear - self.front

#返回佇列首元素--front記錄佇列首元素的位置

def getfront(self):

if self.isempty():

return none

return self.arr[self.front]

#返回佇列尾元素--rear記錄佇列尾元素往後乙個位置

def getback(self):

if self.isempty():

return none

return self.arr[self.rear-1]

#刪除佇列頭元素

def dequeue(self):

if self.rear > self.front:

self.front += 1 #出隊只需執行front+ 即可

else:

print("佇列已經為空!")

#把新元素加入隊尾

def enqueue(self,item):

self.rear += 1

if __name__ == "__main__":

queue = myqueue()

queue.enqueue(1)

queue.enqueue(2)

print("隊頭元素為:"+str(queue.getfront()))

print("隊尾元素為: "+str(queue.getback()))

print("佇列大小為:"+str(queue.size()))

queue.dequeue()

queue.dequeue()

print("佇列大小為:" + str(queue.size()))

執行結果:

隊頭元素為:1

隊尾元素為: 2

佇列大小為:2

佇列大小為:0

'''

鍊錶實現佇列

'''class lnode():

def __init__(self):

self.data = none

self.next = none

class myqueue():

#分配頭結點

def __init__(self):

self.phead = none #phead指向佇列首元素

self.pend = none #pend指向佇列尾元素

#判斷佇列是否為空,如果為空返回true,否則返回false

def empty(self):

if self.phead == none:

return true

else:

return false

#獲取佇列中元素個數

def size(self):

size = 0

p = self.phead

while p != none:

p = p.next

size += 1

return size

#入佇列:把元素e加到佇列尾

def enqueue(self,e):

p = lnode()

p.data = e

p.next = none

if self.phead == none:

self.phead = self.pend = p

else:

self.pend.next = p

self.pend = p

#出佇列,刪除隊首元素

def getfront(self):

if self.phead == none:

print("獲取佇列首元素失敗,佇列已為空!")

return none

return self.phead.data

#取得佇列尾元素

def getback(self):

if self.pend == none:

print("獲取佇列尾元素失敗,佇列已經為空")

return none

return self.pend.data

if __name__ == "__main__":

queue = myqueue()

queue.enqueue(10)

queue.enqueue(20)

print("佇列頭元素為:"+str(queue.getfront()))

print("佇列尾元素為:"+str(queue.getback()))

print("佇列大小為:"+str(queue.size()))

執行結果:

佇列頭元素為:10

佇列尾元素為:20

佇列大小為:2

方法一:缺點:出佇列後陣列前半部分空間不能被充分地利用,解決這個問題的方法為把陣列看成乙個迴圈佇列。當陣列最後乙個位置被占用後,可以從陣列首位置開始迴圈利用。

方法二:用鍊錶來實現佇列有更好的靈活性,與陣列實現方法相比,它多了用來儲存結點關係的指標空間。此外。也可以用迴圈鍊錶來實現佇列,這樣只需要乙個指向鍊錶最後乙個元素的指標即可,因為通過指向鍊錶尾元素可以非常容易地找到鍊錶的首結點。

python實現基本演算法

classnode object 建立節點類 def init self elem 1 lchild none,rchild none self.elem elem self.lchild lchild self.rchild rchild 就是每次將樹中的節點依次取出來,放入佇列,判斷 class...

實現環形佇列各種基本運算的演算法

實現環形佇列各種基本運算的演算法 目的 領會環形佇列儲存結構和掌握環形佇列中各種基本運算演算法設計 主要功能 1 初始化佇列q 2 判斷佇列q是否非空 3 依次進隊元素a b c 4 出隊乙個元素,輸出該元素 5 依次進隊元素d e f 6 輸出出隊序列 7 釋放佇列 include include...

基本排序演算法 Python實現

基本排序演算法,包括氣泡排序,插入排序,選擇排序,堆排序,快速排序等。氣泡排序 複雜度是n n coding utf8 author haxtraz description 氣泡排序 def bubblesort1 a 每次找到乙個最小元素,放到陣列首部 n len a for i in range...