Python-隊列的實現

隊列 (queue) 是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱爲隊尾,進行刪除操作的端稱爲隊頭。
有差不多7個步驟
1、創建Node類
創建一個 Node 的類,作爲基礎數據結構:鏈點,並初始化對應的內參。
2、創建Queue類
創建一個 Queue 的類,以鏈表形式的隊列,並初始化對應的內參。
3、添加is_empty函數
添加一個 is_empty 的函數,功能是判斷隊列是否爲空
4、添加enqueue函數
添加一個 enqueue(elem) 函數,功能是往隊列中添加一個 elem 元素
Vertex vtx = new Vertex(v) 初始化一個新的點
tail.next = vtx 隊列尾部的後繼是這個新的點
tail = vtx 然後讓隊列尾部指針指向這個新的點
5、添加dequeue函數
添加一個 dequeue() 函數,功能是從隊列頭部刪除一個元素

6、添加peek函數
添加一個 peek() 函數,功能是查看隊列頭部的元素
流程如下:
判斷隊列是否爲空,爲空即返回 NOT_FOUND
隊列如果不爲空,返回隊列頭部元素
7、添加print_queue函數
添加一個 print_queue() 函數,功能是展現隊列的元素

詳細註解在註釋裏面

class Node(object):   #首先建立一個Node類來表示節點這個結構
    def __init__(self,value,next=None): #節點有兩個屬性
        self.value = value   #值
        self.next = next	#索引
class Queue(object):  #創建一個隊列的結構類
    def __init__(self):  #隊列有兩個基礎屬性
        self.head = None  #頭
        self.rear = None  #尾
    def is_empty(self):   #隊列是不是空的
        return self.head is None;  
    def enqueue(self,value):  #加入元素
        p = Node(value)  #加入的元素是一個節點
        if self.is_empty(): #如果是空的話,那麼這一個即是頭也是尾
            self.head = p  
            self.rear = p
        else:  #如果不是的話,那麼尾節點的下一個節點就是這個節點
            self.rear.next = p
            self.rear = p  #並且要將尾節點更新成新添加的那個節點
    def dequeue(self):   #出列,只出頭一個
        if self.is_empty():
            return "The queue is Empty!"
        else:
            result = self.head.value  #出列
            self.head = self.head.next #更新頭節點的索引
            return result
    def peek(self):  #查看第一個節點是哪個
        if self.is_empty():
            return "The Queue is Empty"
        else:
            result = self.head.value
            return result  #返回head
    def print_queue(self):  #將節點打印出來
        print("queue: ")
        temp = self.head  #從頭開始
        myqueue = []  #創建一個列表來存儲隊列元素
        while temp is not None:  #當還沒有讀取完的時候
            myqueue.append(temp.value)  #添加
            temp = temp.next  #下一個 更新 這是個重點語句
        print(myqueue)  #打印出來

oneQueue = Queue()  
for i in range(0,991):
    oneQueue.enqueue(i)
oneQueue.dequeue()
oneQueue.print_queue()



運行效果
我將頭出列了
所以第一個是1
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章