隊列 (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