ใช้ List ทำเป็น Queues ใน Python3 จัดลำดับเข้าถึงสมาชิกในตัวแปล List

แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

Moderator: mindphp, ผู้ดูแลกระดาน

annie2301
PHP Super Member
PHP Super Member
โพสต์: 289
ลงทะเบียนเมื่อ: 01/12/2021 9:44 am

ใช้ List ทำเป็น Queues ใน Python3 จัดลำดับเข้าถึงสมาชิกในตัวแปล List

โพสต์ที่ยังไม่ได้อ่าน โดย annie2301 »

Queues คือ โครงสร้างข้อมูลจัดเรียงข้อมูลแบบลิเนียร์ลิสต์ (Linear List) ทำงานแบบ FIFO (First In First Out) ยกตัวอย่างเช่น เราต่อแถวซื้อข้าวแถวหนึ่ง แถวจะถูกเรียกว่า Queues, FIFO (First In First Out) ก็คือ เวลามีคนใหม่ต้องการจะต่อแถวซื้อข้าวก็ต้องเดินไปต่อแถวจากท้ายแถว(enqueue) และ คนหัวที่อยู่หน้าสุดของแถวจะได้ซื้อข้าวก่อนและเมื่อซื้อเสร็จคนคนที่อยู่หน้าสุดของแถวจะต้องเดินออกไปจากแถว(dequeue)


มาเริ่มเขียนโค้ดกันเถอะ

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('############################')
สร้าง empty queue โดยการเอา empty list ไปใส่ เป็น argument ของ class deque

โค้ด: เลือกทั้งหมด

queue = deque([])
ต่อท้าย queue(เพิ่มใหม่จากทางขวาสุดของ list) ด้วย element "Saitama" (เป็น type string)

โค้ด: เลือกทั้งหมด

queue.append('Saitama')
ต่อท้าย queue(เพิ่มใหม่จากทางขวาสุดของ list) ด้วย element "Jojo" (เป็น type string)

โค้ด: เลือกทั้งหมด

queue.append('Jojo')
ต่อท้าย queue(เพิ่มใหม่จากทางขวาสุดของ list) ด้วย element "Naruto" (เป็น type string)

โค้ด: เลือกทั้งหมด

queue.append('Naruto')
เอา element ที่หัวแถวออก(ลบออกจากทางซ้ายสุดของ list) ซึ่ง "Saitama" อยู่หัวแถว จะต้องโดนเอาออกจาก queue

โค้ด: เลือกทั้งหมด

queue.popleft()

ผลลัพธ์จากการ Create a empty queue, enqueue และ dequeue
รูปตัวอย่างผลลัพธ์ของการเขียนโค้ด Create Queue, Enqueue และ Dequeue
รูปตัวอย่างผลลัพธ์ของการเขียนโค้ด Create Queue, Enqueue และ Dequeue
queue_programming_result.png (10.27 KiB) Viewed 1320 times
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
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 11