คิวคือโครงสร้างข้อมูลเชิงเส้นที่ทำงานบน เข้าก่อนออกก่อน กลไก (FIFO)
องค์ประกอบที่เข้าสู่คิวก่อนเป็นองค์ประกอบแรกที่ได้รับการประมวลผล
ตัวอย่าง
โครงสร้างข้อมูลคิวสามารถเข้าใจได้ด้วยความช่วยเหลือของคิวที่ป้ายรถเมล์ ผู้ที่มาถึงป้ายรถเมล์ก่อนเป็นคนแรกในคิว และบุคคลอื่นยืนขึ้นเมื่อไปถึงป้ายรถเมล์ เมื่อรถบัสมาถึง ผู้ที่ไปถึงก่อนจะถึงป้ายรถเมล์จะเป็นคนแรกๆ ที่ขึ้นรถ ที่เหลือจะเรียงตามลำดับไปถึงป้ายรถเมล์ ดังนั้นจึงเป็นไปตามกลไก FIRST IN FIRST OUT
การใช้งานคิวใน Python
สามารถใช้ Queue ใน Python ได้หลายวิธีโดยใช้โครงสร้างข้อมูลเชิงเส้นอื่นๆ หรือโมดูลที่สร้างขึ้นในไลบรารี Python
วิธีที่ 1 - ดำเนินการโดยใช้รายการ
สามารถใช้คิวใน Python ได้โดยใช้รายการ มันไม่ได้มีประสิทธิภาพมากนักเนื่องจากการแทรกหรือลบองค์ประกอบที่จุดเริ่มต้นของรายการจะใช้เวลา O(n) ซึ่งช้าเมื่อเทียบกับการใช้งานด้วยวิธีอื่น
การดำเนินการที่เกี่ยวข้อง
ต่อท้าย() − ฟังก์ชันนี้จะเพิ่มองค์ประกอบที่ส่วนท้ายของคิว
ป๊อป(0) − ฟังก์ชันนี้จะลบและส่งคืนองค์ประกอบแรกในคิว
ตัวอย่าง
queue=[] queue.append(1) queue.append(2) queue.append(3) print("Initial queue",queue) print("Element popped from the queue") print(queue.pop(0)) print(queue.pop(0)) print("Queue after popping some elements",queue)
ผลลัพธ์
Initial queue [1, 2, 3] Element popped from the queue 1 2 Queue after popping some elements [3]
คุณไม่สามารถลบองค์ประกอบเพิ่มเติมได้เมื่อคิวว่างเปล่า การทำเช่นนี้ส่งผลให้เกิดข้อยกเว้น
queue.pop(0) IndexError: pop from empty list
วิธีที่ 2 - ใช้งานโดยใช้ queue.Queue
นี่เป็นวิธีการนำคิวไปใช้โดยใช้โมดูล inbuilt จาก python เราจำเป็นต้องนำเข้าคิวจากคิว เราสามารถเริ่มต้นคิวด้วยขนาดเฉพาะบางอย่างได้ ขนาดศูนย์หมายถึงคิวที่ไม่มีที่สิ้นสุด
การดำเนินการที่เกี่ยวข้อง
ขนาดสูงสุด - จำนวนองค์ประกอบสูงสุดที่อนุญาตในคิว
รับ() - ลบและส่งคืนองค์ประกอบแรกจากคิว หากคิวว่าง ให้รอจนกว่าคิวจะมีองค์ประกอบอย่างน้อยหนึ่งรายการ
get_nowait() - ลบและส่งคืนองค์ประกอบแรกจากคิว หากคิวว่าง ให้ยกข้อยกเว้น
วาง(รายการ) − ผนวกองค์ประกอบที่ส่วนท้ายของคิว หากคิวเต็ม ให้รอจนกว่าจะมีช่องว่างว่าง
put_nowait(รายการ) − ผนวกองค์ประกอบที่ส่วนท้ายของคิว หากคิวเต็ม ให้ยกข้อยกเว้น
เต็ม() − คืนค่า จริง หากคิวเต็ม มิฉะนั้น คืนค่า เท็จ
ว่างเปล่า() − คืนค่า True หากคิวว่าง มิฉะนั้น จะเป็นเท็จ
qsize() − คืนค่าจำนวนองค์ประกอบที่อยู่ในคิว
ตัวอย่าง
from queue import Queue q=Queue(maxsize=3) q.put(1) q.put(2) q.put(3) print("Is queue full",q.full()) print("Element popped from the queue") print(q.get()) print(q.get()) print("Number of elements in queue",q.qsize()) print("Is queue empty",q.empty())
ผลลัพธ์
Is queue full True Element popped from the queue 1 2 Number of elements in queue 1 Is queue empty False
วิธีที่ 3 - ใช้งานโดยใช้ collections.deque
นี่เป็นอีกวิธีหนึ่งในการนำคิวไปใช้ใน Python เราจำเป็นต้องนำเข้า deque จากโมดูลคอลเลกชัน
การดำเนินการที่เกี่ยวข้อง
ต่อท้าย() − ฟังก์ชันนี้จะเพิ่มองค์ประกอบที่ส่วนท้ายของคิว
popleft() − ฟังก์ชันนี้จะลบและส่งคืนองค์ประกอบแรกในคิวในความซับซ้อนของเวลา O(1)
ตัวอย่าง
from collections import deque queue=deque() queue.append(1) queue.append(2) queue.append(3) print("Intial queue: ",queue) print("Element popped from the queue") print(queue.popleft()) print(queue.popleft()) print("Queue after popping some elements: ",queue)
ผลลัพธ์
Intial queue: deque([1, 2, 3]) Element popped from the queue 1 2 Queue after popping some elements: deque([3])
การใช้ฟังก์ชัน popleft() กับ deque ที่ว่างเปล่าจะทำให้เกิดข้อยกเว้น