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
12345Trong 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.