Python實現循環隊列


寫在前面:棧是先入后出,與之相反的是隊列,隊列是先進先出的線性結構。隊列是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。
這里寫圖片描述

圖1 隊列的定義

隊列的存儲結構中使用的最多的是循環隊列。循環隊列的一個好處是:可以利用這個隊列之前用過的空間。

在一個普通隊列里,一旦一個隊列滿了,我們就不能插入下一個元素,即使在隊列前面仍有空間。但是使用循環隊列,我們能使用這些空間去存儲新的值。我們要做的就是利用循環來解決空間浪費的問題!

                                                                                                                                                    

1.循環隊列包括兩個指針(其實就是兩個整數型變量,因為在這里有指示作用,所以這里理解為指針), front 指針指向隊頭元素, rear 指針指向隊尾元素的下一個位置。

2.rear和front互相追趕着,這個追趕過程就是隊列添加和刪除的過程,如果rear追到head說明隊列滿了,如果front追到rear說明隊列為空。

2.令隊列空間中的一個單元閑置,使得隊列非空時,Q.rear與Q.front之間至少間隔一個空閑單元。


隊列為空的判斷條件是:front == rear

隊列滿的判斷條件是:(rear+1)%maxsize == front

隊列長度的計算公式:(rear-front+maxsize)%maxsize

 

python實現代碼如下:

class SqQueue(object): def __init__(self, maxsize): self.queue = [None] * maxsize self.maxsize = maxsize self.front = 0 self.rear = 0 # 返回當前隊列的長度
    def QueueLength(self): return (self.rear - self.front + self.maxsize) % self.maxsize # 如果隊列未滿,則在隊尾插入元素,時間復雜度O(1)
    def EnQueue(self, data): if (self.rear + 1) % self.maxsize == self.front: print("The queue is full!") else: self.queue[self.rear] = data # self.queue.insert(self.rear,data)
            self.rear = (self.rear + 1) % self.maxsize # 如果隊列不為空,則刪除隊頭的元素,時間復雜度O(1)
    def DeQueue(self): if self.rear == self.front: print("The queue is empty!") else: data = self.queue[self.front] self.queue[self.front] = None self.front = (self.front + 1) % self.maxsize return data # 輸出隊列中的元素
    def ShowQueue(self): for i in range(self.maxsize): print(self.queue[i],end=',') print(' ')

參考:https://blog.csdn.net/u012626619/article/details/80658397

           https://www.cnblogs.com/chenliyang/p/6554141.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM