มาเริ่มเขียนโค้ดกันเถอะ
from collections import deque (ใช้ collections.deque ที่ออกแบบมาให้ append และ pop ได้อย่างรวดเร็วทั้ง 2 method ถูกสร้างมาสำหรับการทำ Queues โดยเฉพาะ)
ภายใน list หัวแถวจะเป็น element ที่ index = 0 และ ท้ายแถวจะเป็น element ที่ index = -1
ในการ enqueue จะใช้ method append() ในการดำเนินการ (จะเอา element ใหม่ ไปต่อทางขวาสุดของ queue)
ในการ dequeue จะใช้ method popleft() ในการดำเนินการ (จะเอา element ทางซ้ายสุดของ list ออกไปจาก queue)
โค้ด: เลือกทั้งหมด
from collections import deque
queue = deque([]) # create a empty queue
print('Empty queue had created!')
print(f'queue = {queue}')
print('############################')
# enqueue
print('Saitama enqueues')
queue.append('Saitama')
print(f'queue = {queue}')
print('----------------------------')
print('Jojo enqueues')
queue.append('Jojo')
print(f'queue = {queue}')
print('----------------------------')
print('Naruto enqueues')
queue.append('Naruto')
print(f'queue = {queue}')
print('############################')
# dequeue
print('Saitama dequeues')
queue.popleft()
print(f'queue = {queue}')
print('############################')
โค้ด: เลือกทั้งหมด
queue = deque([])
โค้ด: เลือกทั้งหมด
queue.append('Saitama')
โค้ด: เลือกทั้งหมด
queue.append('Jojo')
โค้ด: เลือกทั้งหมด
queue.append('Naruto')
โค้ด: เลือกทั้งหมด
queue.popleft()
ผลลัพธ์จากการ Create a empty queue, enqueue และ dequeue queue ในตอนสุดท้าย จะมีแค่ ["Jojo", "Naruto"] เพราะเรา popleft() ซึ่ง "Saitama" อยู่หัวแถว(ทางซ้ายสุดของ queue) จะต้องโดนเอาออกจาก queue
สรุป
ที่โค้ดในบทความ ถ้าใครเคยใช้ method ของ list มาก่อน จะรู้ว่ามัน เหมือนกันกับ method ของ queue เป๊ะๆ เลย แค่ต่างกันตรงที่ queue เอา class deque มาใช้ แต่ในบทความนี้ยังไม่ได้เทียบเวลาของโปรแกรม ว่า ระหว่างใช้ List สร้าง queue กับ ใช้ Class deque สร้าง deque อย่างไหนจะ ดำเนินการ enqueue และ dequeue ได้เร็วกว่ากัน แต่ใน document มีบอกว่า Class deque จะทำได้เร็วกว่า
อ้างอิง
https://www.mindphp.com/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD/73-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/3942-fifo-frist-in-first-out.html
https://www.mindphp.com/forums/viewtopic.php?p=121002#p121002
https://www.mindphp.com/%E0%B8%9A%E0%B8%97%E0%B9%80%E0%B8%A3%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B8%AD%E0%B8%AD%E0%B8%99%E0%B9%84%E0%B8%A5%E0%B8%99%E0%B9%8C/83-python/3402-%E0%B8%95%E0%B8%B1%E0%B8%A7%E0%B9%81%E0%B8%9B%E0%B8%A3%E0%B8%8A%E0%B8%99%E0%B8%B4%E0%B8%94-list.html
http://www.thaiall.com/datastructure/queue.htm
https://iamgique.medium.com/stack-%E0%B8%81%E0%B8%B1%E0%B8%9A-queue-%E0%B8%95%E0%B9%88%E0%B8%B2%E0%B8%87%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B8%AD%E0%B8%A2%E0%B9%88%E0%B8%B2%E0%B8%87%E0%B9%84%E0%B8%A3-acc3cbd257fe
https://docs.python.org/3/tutorial/datastructures.html#using-lists-as-queues
https://www.mindphp.com/forums/viewtopic.php?f=144&t=79900