Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

คิวใน Python คืออะไร? อธิบายด้วยตัวอย่าง


คิวคือโครงสร้างข้อมูลเชิงเส้นที่ทำงานบน เข้าก่อนออกก่อน กลไก (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 ที่ว่างเปล่าจะทำให้เกิดข้อยกเว้น