Hàng đợi có phải là một mô-đun trong Python không?

Tập tin. hàng đợi-ví dụ-1. py nhập phân luồng nhập Hàng đợi thời gian nhập, CÔNG NHÂN ngẫu nhiên = 2 lớp Công nhân (phân luồng. Chủ đề). def _ _init_ _(bản thân, hàng đợi). bản thân. _ _queue = phân luồng hàng đợi. Chủ đề. _ _init_ _(self) def run(self). trong khi 1. mục = bản thân. _ _xếp hàng. get() nếu mục là Không có. phá vỡ # đã đến cuối hàng đợi # giả vờ như chúng tôi đang làm một việc gì đó mất 10—100 ms thời gian. ngủ (ngẫu nhiên. randint(10, 100) / 1000. 0) in "nhiệm vụ", mục, "đã hoàn thành" # # dùng thử queue = Queue. Hàng đợi (0) cho tôi trong phạm vi (CÔNG NHÂN). Công nhân (hàng đợi). start() # bắt đầu một công nhân cho tôi trong phạm vi(10). xếp hàng. đặt (i) cho tôi trong phạm vi (CÔNG NHÂN). xếp hàng. put(None) # thêm các điểm đánh dấu cuối hàng đợi
class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

1
class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

2
class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

3
class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

4
class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

5
class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

6
class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

7
class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

8
class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

9
class Queue:  
  
  def __init__(self):  
      self.queue = list()  
  
  def add_element(self,val):  
# Insert method to add element in the queue
      if val not in self.queue:  
          self.queue.insert(0,val)  
          return True  
      return False  
# Pop method to delete element from the queue
  def remove_element(self):  
      if len(self.queue)>0:  
          return self.queue.pop()  
      return ("Queue is Empty")  
  
que = Queue()  
que.add_element("January")  
que.add_element("February")  
que.add_element("March")  
que.add_element("April")  
  
print(que)  
print(que.remove_element())  
print(que.remove_element()) 
0

Hàng đợi là một loại cấu trúc dữ liệu chứa dữ liệu theo cách Nhập trước Xuất trước. Hàng đợi tuân theo một thứ tự cụ thể cho các hoạt động được thực hiện trên dữ liệu. Hàng đợi được triển khai rộng rãi dưới dạng danh sách chờ cho các tài nguyên hoặc thiết bị được chia sẻ đơn lẻ như Máy in, CPU, Đĩa, v.v. Có nhiều loại hàng đợi khác nhau như hàng đợi đơn giản, hàng đợi ưu tiên, hàng đợi tròn và deque hoặc hàng đợi kết thúc kép. Tất cả các loại hàng đợi này được sử dụng cho các tình huống khác nhau. Ví dụ, hàng đợi rất hữu ích nếu chúng ta cần một quy trình được thực hiện lần lượt tự động theo thứ tự. e. giống như một danh sách. Nó sẽ xử lý các tác vụ theo cách gọi là “Vào trước ra trước”, nghĩa là quy trình hoặc tác vụ đầu tiên trong hàng đợi sẽ được thực thi và loại bỏ trước, sau đó các quy trình khác sẽ được bắt đầu. Hàng đợi có thể được triển khai bằng các ngôn ngữ lập trình như Python, Java, C++, v.v. Ở đây sẽ thảo luận về việc triển khai nó trong Ngôn ngữ lập trình Python

Hàng đợi trong Python là gì?

Như chúng ta vừa thảo luận về hàng đợi là gì. Nó giống với Python và hoạt động trên cùng một phương pháp “Nhập trước xuất trước” (FIFO). Hàng đợi có hai đầu chẳng hạn như đầu trước và đầu sau. Các mục có thể được chèn vào là giao diện người dùng và các mục bị xóa khỏi hàng đợi là giao diện người dùng. Do đó, mục nào được chèn vào đầu tiên trong hàng đợi sẽ là mục đầu tiên sẽ bị xóa khỏi hàng đợi và nó thỏa mãn phương pháp FIFO.  

Hàng đợi Python hoạt động như thế nào?

Hàng đợi Python có thể dễ dàng triển khai để giải quyết các vấn đề trong thế giới thực. Để hiểu rõ hơn, có thể so sánh với một hàng người đang chờ lấy số thứ tự để mua vé từ quầy bán vé. Người vào hàng đầu tiên sẽ được phát vé trước, sau đó sẽ bị loại khỏi hàng, tiếp theo là người tiếp theo vào hàng, v.v. Một logic tương tự cũng sẽ được áp dụng trong Hàng đợi Python để các chương trình và quy trình được thực thi.  

Chúng ta hãy xem sơ đồ bên dưới để hiểu rõ hơn về các đầu của Queue

12345

Trong hàng đợi trên, phần tử đầu tiên 1 đại diện cho Mặt trước của hàng đợi và phần tử cuối cùng 5 đại diện cho phần cuối của hàng đợi sẽ được xử lý cuối cùng. Việc chèn sẽ diễn ra sau phần tử cuối cùng i. e. 5 và việc loại bỏ các phần tử sẽ diễn ra từ đầu danh sách i. e. 1

Các loại hàng đợi trong Python

Như chúng ta vừa thảo luận trong phần giới thiệu rằng có 4 loại hàng đợi trong cấu trúc dữ liệu. Tuy nhiên, trong Python, chủ yếu có hai loại hàng đợi sẽ được thảo luận bên dưới

  • Hàng đợi FIFO. FIFO là viết tắt của cụm từ “First In First Out” có nghĩa là phần tử nào đưa vào trước thì phần tử đó sẽ ra trước. Khi làm việc với FIFO Queue trong python, chúng ta cần gọi Queue() class từ queue module.  
  • Hàng đợi LIFO. LIFO là viết tắt của cụm từ “Last In First Out” có nghĩa là phần tử được đưa vào sau cùng sẽ là phần tử được đưa ra trước. Nó giống như một ngăn xếp, trong đó phần tử trên cùng sẽ được xử lý trước. Khi làm việc với LIFO Queue, chúng ta cần gọi lớp LifoQueue() từ queue module trong Python.  

Thao tác trong Python

Các hoạt động có sẵn trong Python được mô tả như sau

  • Đổi diện. Thao tác đưa ra phần tử đầu tiên từ hàng đợi có Độ phức tạp về thời gian cho thao tác này là O(1)
  • Phần phía sau. Thao tác đưa ra phần tử cuối cùng từ hàng đợi trong đó Độ phức tạp về thời gian cho thao tác này là O(1)
  • xếp hàng. Trong thao tác này, một phần tử được thêm vào cuối hàng đợi. Khi không có dung lượng cho các phần tử được thêm vào hàng đợi, nó sẽ chuyển sang tình trạng tràn và Độ phức tạp thời gian cho thao tác này cũng là O(1)
  • xếp hàng. Trong loại hoạt động này, chúng ta có thể xóa phần tử khỏi bất kỳ đầu nào của hàng đợi, chẳng hạn như phía trước hoặc phía sau. Ngoài ra, việc chèn các phần tử diễn ra ở cả hai đầu. Độ phức tạp về thời gian cho thao tác này cũng giống như các thao tác khác i. e. Ô(1)

Các phương thức có sẵn trong hàng đợi

Có một số phương thức quan trọng có sẵn trong Python rất hữu ích. Những phương pháp này được liệt kê dưới đây

  • được(). Phương thức này được sử dụng để loại bỏ và trả về một phần tử từ hàng đợi. Khi không có phần tử nào trong hàng đợi, nó sẽ đợi phần tử có sẵn trong hàng đợi.  
  • đặt(). Phương thức này được sử dụng để thêm một phần tử vào hàng đợi có thể được biểu diễn dưới dạng một thể hiện của Hàng đợi. Nếu không có khả năng thêm nhiều phần tử vào hàng đợi, thì phương thức sẽ chặn.  
  • qsize. Phương thức qsize() trong queue class của Python trả về tổng số phần tử có trong queue. Hoặc chúng ta có thể nói rằng nó cho chúng ta biết độ dài của hàng đợi.  
  • đầy(). Phương thức này được sử dụng để kiểm tra xem hàng đợi đã đầy chưa và nó trả về True nếu hàng đợi đã đầy
  • kích thước tối đa (). Phương thức này là một số nguyên cho biết giới hạn trên của số lượng phần tử có thể được nhập vào hàng đợi. Việc chèn các phần tử sẽ bị chặn khi nó đạt đến kích thước tối đa của các phần tử được chèn.  

Danh sách Python tích hợp

Danh sách các phương thức tích hợp sẵn trong Python có thể được sử dụng làm hàng đợi, nhưng việc sử dụng các phương thức tích hợp này làm hàng đợi không phù hợp lắm khi chúng ta nhìn nó từ góc độ hiệu suất. Các phương thức tích hợp sẵn trong Python là các hàm insert() và pop() được sử dụng để thêm và xóa các phần tử khỏi hàng đợi. Danh sách hơi chậm so với hàng đợi và lý do đằng sau điều này là khi chúng ta chèn một phần tử mới vào danh sách, nó yêu cầu dịch chuyển các phần tử theo một. Và quá trình này mất O(n) thời gian. Để hiểu rõ hơn về khái niệm này, hãy xem qua ví dụ bên dưới

Ví dụ

que = []
que.append(‘Person1’)
que.append(‘Person2’)
que.append(‘Person3’)

print(que)

#List is quite slow because of the shifting of elements by one place.
print(que.pop(0))

ĐẦU RA

[‘Person1’, ‘Person2’, ‘Person3’]

người1

class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

ĐẦU RA

Chiều dài của hàng đợi. 4

Xóa phần tử khỏi hàng đợi

Việc loại bỏ các phần tử khỏi hàng đợi diễn ra từ phía sau của hàng đợi. Quá trình loại bỏ một phần tử khỏi hàng đợi còn được gọi là deque. Hãy cùng xem ví dụ sau để hiểu rõ hơn về khái niệm này

class Queue:  
  
  def __init__(self):  
      self.queue = list()  
  
  def add_element(self,val):  
# Insert method to add element in the queue
      if val not in self.queue:  
          self.queue.insert(0,val)  
          return True  
      return False  
# Pop method to delete element from the queue
  def remove_element(self):  
      if len(self.queue)>0:  
          return self.queue.pop()  
      return ("Queue is Empty")  
  
que = Queue()  
que.add_element("January")  
que.add_element("February")  
que.add_element("March")  
que.add_element("April")  
  
print(que)  
print(que.remove_element())  
print(que.remove_element()) 

ĐẦU RA

tháng Giêng

tháng 2

Sắp xếp hàng đợi Python

Sắp xếp hàng đợi trở nên quan trọng trong một số tình huống mà chúng ta cần thực hiện các thao tác cụ thể. Nó có thể được thực hiện bằng Python bằng nhiều phương pháp khác nhau. Dưới đây là một ví dụ dưới đây để hiểu rõ hơn về việc sắp xếp hàng đợi

import queue  
q = queue.Queue()  
  
q.put(10)  
q.put(22)  
q.put(16)  
q.put(2)  
q.put(1)  
  
  
# Here, we use bubble sort algorithm for sorting  
n =  q.qsize()  
for i in range(n):  
    # Remove the element  
    x = q.get()  
    for j in range(n-1):  
        # Remove the element  
        y = q.get()  
        if x > y :  
            q.put(y)  
        else:  
            q.put(x)  
            x = y      
    q.put(x)  
  
while (q.empty() == False):   
    print(q.queue[0], end = " ")    
    q.get()  

ĐẦU RA

1 2 10 16 22

Đảo ngược hàng đợi Python

Hàng đợi có thể được đảo ngược để tận dụng hàng đợi khác. Nó cũng có thể được thực hiện cho đệ quy

Có thể hiểu ví dụ dưới đây để biết cách chúng ta có thể đảo ngược hàng đợi Python

import queue
q1 = queue.Queue()

q1.put(10)
q1.put(4)
q1.put(3)
q1.put(20)
q1.put(2)
q1.put(9)

def reverseQueue (q1src, q2dest) :  
    buffer = q1src.get()
    if (q1src.empty() == False) :
reverseQueue(q1src, q2dest)      #using recursion
    q2dest.put(buffer)
return q2dest

q2dest = queue.Queue()
qReversed = reverseQueue(q1,q2dest)

while (qReversed.empty() == False): 
print(qReversed.queue[0], end = " ")  
        qReversed.get()

ĐẦU RA

9 2 20 3 4 10

Làm việc với hàng đợi. lớp xếp hàng

Các lớp khác nhau có trong mô-đun Queue của Python. Trong tất cả các lớp, lớp Queue quan trọng hơn, nó giúp tính toán song song và đa chương trình. Khái niệm này có thể được hiểu rất dễ dàng bằng ví dụ sau

from queue import Queue  
que = Queue()  
  
que.put('Person1’)  
que.put('Person2')  
que.put('Person3')  
  
print(que)  
  
  
print(que.get())  
  
print(que.get())  
  
print(que.get())  
  
print(que.get_nowait())  
  
print(que.get())  

ĐẦU RA.

người1

người2

người3

Traceback (cuộc gọi gần đây nhất cuối cùng)

  File “C:/Users/Ashu Lakhwan/PycharmProjects/Hello/Queue.py”, line 78, in

Chuôi in. get_nowait())

Tập tin “C. \Python\lib\hàng đợi. py”, dòng 198, trong get_nowait

tự trở về. nhận (khối = Sai)

Tập tin “C. \Python\lib\hàng đợi. py”, dòng 167, trong get

tăng trống

_xếp hàng. Trống rỗng

Làm việc với một bộ sưu tập. Lớp deque


Bộ sưu tập. lớp deque trở nên rất hữu ích khi chúng ta triển khai hàng đợi hai đầu. Hàng đợi hai đầu hoặc deque được sử dụng để hỗ trợ thêm và xóa các phần tử từ cả hai đầu như Đầu trước và Đầu sau. Độ phức tạp thời gian cần thiết là O(1) để hoàn thành quy trình.  

Ví dụ về bộ sưu tập. lớp deque như sau

from collections import deque  
queue = deque()  
  
queue.append('Monday')  
queue.append('Tuesday')  
queue.append('Wednesday')  
  
print(queue)  
deque(['Monday ', 'Tuesday', 'Wednesday'])  
  
print(queue.popleft())  
  
print(queue.popleft())  
  
print(queue.popleft())  

queue.popleft()  

ĐẦU RA

deque([‘Thứ Hai’, ‘Thứ Ba’, ‘Thứ Tư’])

Thứ hai

Thứ ba

Thứ tư

Traceback (cuộc gọi gần đây nhất cuối cùng)

  File “C:/Users/Ashu Lakhwan/PycharmProjects/Hello/Queue.py”, line 101, in

xếp hàng. popleft()

Chỉ mụcLỗi. pop từ một deque trống

Làm việc với đa xử lý. Lớp xếp hàng

Lớp này có thể được sử dụng để xử lý song song các mục được xếp hàng đợi bởi các công nhân đa dòng. đa xử lý. Lớp hàng đợi chia sẻ dữ liệu giữa nhiều quy trình và lưu trữ thông tin của bất kỳ đối tượng nào có thể được chọn trong khi xử lý các mục.  

Ví dụ

from multiprocessing import Queue  
queue = Queue()  
  
queue.put('Monday')  
queue.put('Tuesday')  
queue.put('Wednesday')  
  
print(queue)  
  
print(queue.get())  
  
print(queue.get())  
  
print(queue.get())

ĐẦU RA

< đa xử lý. xếp hàng. Đối tượng xếp hàng tại 0x000002CA073356A0>

Thứ hai

Thứ ba

Thứ tư

Triển khai hàng đợi Python

Có một số cách để triển khai Hàng đợi cho Python. Tuy nhiên, một số phương pháp thường được sử dụng để triển khai hàng đợi trong python bao gồm:

  • danh sách
  • bộ sưu tập. deque
  • bộ sưu tập. Xếp hàng

Các phương pháp này đã được thảo luận ở trên trong bài viết này với mỗi chủ đề có một ví dụ riêng. Bạn có thể tham khảo phần trước để hiểu các cách triển khai Hàng đợi Python khác nhau.  

Làm cách nào để thêm nhiều phần tử trong Python?

Trong bài viết này, chúng ta đã thấy cách chúng ta có thể thêm một mục hoặc thành phần vào hàng đợi của mình. Bây giờ, hãy xem cách chúng ta có thể thêm nhiều hơn một phần tử trong Python

Thêm một mục trong FIFOqueue

________số 8

ĐẦU RA

Giá trị được chèn là 0

Giá trị được chèn là 1

Giá trị được chèn là 2

Giá trị được chèn là 3

Giá trị được chèn là 4

Trong ví dụ trên, phương thức put() sẽ đưa các phần tử từ 0 đến 5 vào hàng đợi

Ví dụ về hàng đợi nhập trước xuất trước

FIFO có nghĩa là phần tử được chèn trước sẽ là phần tử đầu tiên bị xóa khỏi danh sách. Để triển khai hàng đợi FIFO, chúng tôi được yêu cầu nhập mô-đun queue() trong Python.  

Hãy cho chúng tôi xem một ví dụ về triển khai hàng đợi FIFO để thêm một mục

Import queue
que = queue.Queue()
que.put(10)
 
The put() method in the above example will add an element to the queue.
 
To remove an element from our Queue, the following example can be understood:
 
Import queue
que = queue.Queue()
que.put(10)
 
removed_item = que.get()
 
print(“The removed element from the queue is ”, removed_item)

ĐẦU RA

Phần tử bị xóa khỏi hàng đợi là 10

Trong ví dụ trên, phương thức get() được sử dụng để xóa phần tử khỏi hàng đợi

Ví dụ hàng đợi vào sau ra trước

LIFO có nghĩa là phần tử được nhập cuối cùng sẽ là phần tử đầu tiên được bật ra hoặc xóa. Để triển khai, LIFO, chúng tôi được yêu cầu nhập mô-đun hàng đợi và sử dụng phương thức LifoQueue() trong Python

Hãy cho chúng tôi hiểu cách chúng tôi có thể triển khai việc thêm một phần tử vào hàng đợi LIFO

class Queue:

def __init__(self):
	self.queue = list()

def add_elements(self, val):
	if val not in self.queue:
		self.queue.insert(0, val)
		return True
	return False

def size(self):
	return len(self.queue)

OurQueue = Queue()
OurQueue.add_element(“Person1”)
OurQueue.add_element(“Person2”)
OurQueue.add_element(“Person3”)
OurQueue.add_element(“Person4”)

print(“Length of the Queue: “, OurQueue.size())

0

ĐẦU RA

Mục bị loại bỏ là 5

Phần kết luận

Trong bài viết này, chúng ta đã thảo luận về một số khái niệm hữu ích và quan trọng về Hàng đợi Python và chúng ta cũng đã xem xét cách chúng có thể được triển khai trong các ví dụ. Hàng đợi Python rất giống với Danh sách tiêu chuẩn trong Python, nhưng nó luôn được coi là tốt hơn từ quan điểm hiệu suất.  

Hàng đợi có sẵn trong Python không?

Triển khai sử dụng danh sách. Danh sách là cấu trúc dữ liệu tích hợp sẵn của Python có thể được sử dụng làm hàng đợi .

Hàng đợi có phải là một phần của thư viện chuẩn Python không?

Trong Python, chúng ta có thể sử dụng mô-đun queue để tạo hàng đợi các đối tượng. Đây là một phần của thư viện Python chuẩn nên không cần sử dụng pip.

Hàng đợi có phải là một kiểu dữ liệu trong Python không?

Hàng đợi trong Python là cấu trúc dữ liệu tuyến tính với phần sau và phần trước, tương tự như ngăn xếp. Nó lưu trữ các mục tuần tự theo cách FIFO (First In First Out). Bạn có thể coi nó như một hàng đợi dịch vụ khách hàng hoạt động trên cơ sở ai đến trước được phục vụ trước.

Danh sách Python có phải là ngăn xếp hoặc hàng đợi không?

Danh sách cấu trúc dữ liệu tích hợp sẵn của Python có thể được sử dụng làm ngăn xếp .