Xếp hàng lấy Python

Trong bài viết này, chúng ta sẽ xem xét mô-đun Hàng đợi của Python, đây là một giao diện cho cấu trúc dữ liệu Hàng đợi


Hàng đợi Python

Hàng đợi là một cấu trúc dữ liệu trong đó phần tử đầu tiên được chèn vào cũng là phần tử đầu tiên xuất hiện. Nó giống như một hàng đợi ngoài đời thực, trong đó người đầu tiên xếp hàng cũng là người đầu tiên ra ngoài

Trong Python, chúng ta có thể sử dụng mô-đun

q = queue.Queue()
4 để tạo hàng đợi các đối tượng

Đây là một phần của thư viện Python tiêu chuẩn, vì vậy không cần sử dụng

q = queue.Queue()
5

Nhập mô-đun bằng cách sử dụng

import queue

Để tạo một đối tượng Queue, chúng ta có thể khởi tạo nó bằng cách sử dụng

q = queue.Queue()

Theo mặc định, giá trị này có dung lượng là 0, nhưng nếu bạn muốn đề cập rõ ràng đến nó, bạn có thể làm như vậy bằng cách sử dụng

q = queue.Queue(max_capacity)

Xếp hàng. get() và hàng đợi. các phương thức put()

Chúng ta có thể chèn và truy xuất các giá trị vào Hàng đợi bằng các phương thức

q = queue.Queue()
6 và
q = queue.Queue()
7

Hãy tạo một hàng đợi và chèn các số từ 1 đến 5

import queue

# Instantiate the Queue object
q = queue.Queue()

# Insert elements 1 to 5 in the queue
for i in range(1, 6):
    q.put(i)

print('Now, q.qsize() =', q.qsize())

# Now, the queue looks like this:
# (First) 1 <- 2 <- 3 <- 4 <- 5
for i in range(q.qsize()):
    print(q.get())

đầu ra

________số 8

Như bạn có thể thấy, đầu ra cho thấy chỉ số đầu tiên thực sự là 1, vì vậy đó là đầu của Hàng đợi. Phần còn lại của các yếu tố theo nó trong một thời trang tương tự

Làm trống hàng đợi Python

Chúng ta có thể làm trống một đối tượng hàng đợi bằng cách sử dụng

q = queue.Queue()
8. Điều này đặt kích thước thành 0 và làm trống hàng đợi

q = queue.Queue()
0

đầu ra

q = queue.Queue()
1

Trong khi hầu hết các triển khai hàng đợi điển hình có hoạt động

q = queue.Queue()
9 (hoặc
q = queue.Queue(max_capacity)
0), mô-đun
q = queue.Queue()
4 không có phương thức cho việc này

Vì vậy, nếu bạn muốn bật các phần tử khỏi hàng đợi, bạn phải tự mình sử dụng một lớp hàng đợi khác. Một giải pháp đơn giản là sử dụng danh sách của Python

Chúng tôi sẽ sử dụng

q = queue.Queue(max_capacity)
2 để chèn các phần tử vào hàng đợi, vì việc chèn xảy ra ở cuối và xóa các phần tử bằng cách sử dụng
q = queue.Queue(max_capacity)
3, vì phần tử đầu tiên bị xóa

q = queue.Queue()
7

đầu ra

q = queue.Queue()
8

Chúng tôi đã viết lớp hàng đợi của riêng mình với hoạt động

q = queue.Queue(max_capacity)
0. Bây giờ, chúng tôi sẽ chỉ cho bạn cách bạn có thể sử dụng các mô-đun khác để sử dụng các loại Hàng đợi khác


Hàng đợi ưu tiên trong Python

Hàng đợi ưu tiên là một loại hàng đợi thêm vào hàng đợi trên cơ sở mức độ ưu tiên của một mục, thường là một giá trị số nguyên

Các mục có số ưu tiên thấp hơn được ưu tiên cao hơn và ở phía trước hàng đợi, trong khi các mục khác ở phía sau

Mô-đun

q = queue.Queue()
4 cũng hỗ trợ cấu trúc Hàng đợi ưu tiên, vì vậy hãy xem cách chúng tôi có thể sử dụng nó

import queue
1

đầu ra

q = queue.Queue()
0

Như bạn có thể thấy, các phần tử được chèn vào dựa trên mức độ ưu tiên của chúng


Hàng đợi heapq trong Python

Chúng tôi cũng có thể sử dụng mô-đun

q = queue.Queue(max_capacity)
6 để triển khai hàng đợi ưu tiên của mình

q = queue.Queue()
1

Vì vậy, chúng tôi đang tạo hàng đợi ưu tiên và xuất hiện từ hàng đợi đó cho đến khi hàng đợi trống. Điều tương tự cũng có thể đạt được bằng cách sử dụng chương trình dưới đây

Hàng đợi là nơi chứa dữ liệu. Dữ liệu được nhập trước sẽ bị xóa trước và do đó hàng đợi còn được gọi là “Nhập trước xuất trước” (FIFO). Hàng đợi có hai đầu phía trước và phía sau. Các mục được nhập từ phía sau và lấy ra từ phía trước

Trong hướng dẫn Python này, bạn sẽ học

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

Hàng đợi có thể dễ dàng so sánh với ví dụ thực tế, hàng người xếp hàng chờ ở quầy bán vé, người đứng trước sẽ lấy vé trước, tiếp theo là người tiếp theo, v.v. Logic tương tự cũng áp dụng cho cấu trúc dữ liệu hàng đợi

Dưới đây là một đại diện sơ đồ của hàng đợi

Xếp hàng lấy Python

Phía sau đại diện cho điểm mà các mục được chèn vào bên trong hàng đợi. Trong ví dụ này, 7 là giá trị cho điều đó

Mặt trước đại diện cho điểm mà các mục từ hàng đợi sẽ bị xóa. Nếu bạn xóa một phần tử khỏi hàng đợi, phần tử đầu tiên bạn sẽ nhận được là 1, như thể hiện trong hình

Mục 1 là mục đầu tiên được đưa vào hàng đợi và trong khi loại bỏ, mục này là mục đầu tiên xuất hiện. Do đó hàng đợi được gọi là FIRST IN FIRST OUT (FIFO)

Xếp hàng lấy Python

Trong hàng đợi, các mục được xóa theo thứ tự và không thể xóa ở giữa. Bạn không thể xóa ngẫu nhiên mục 5 khỏi hàng đợi, để làm điều đó, bạn sẽ phải xóa tất cả các mục trước 5. Các mục trong hàng đợi sẽ bị xóa theo thứ tự chúng được chèn vào

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

Chủ yếu có hai loại hàng đợi trong Python

  • Hàng đợi vào trước ra trước. Đối với điều này, phần tử đi trước sẽ là phần tử đầu tiên xuất hiện. Để làm việc với FIFO, bạn phải gọi lớp Queue() từ queue module
  • Vào sau cùng trong hàng đợi ra trước. Ở đây, phần tử được nhập cuối cùng sẽ là phần tử đầu tiên xuất hiện. Để làm việc với LIFO, bạn phải gọi lớp LifoQueue() từ queue module

Cài đặt hàng đợi Python

Rất dễ dàng để làm việc với hàng đợi trong python. Dưới đây là các bước thực hiện để tận dụng hàng đợi trong mã của bạn

Bước 1) Bạn chỉ cần nhập mô-đun hàng đợi, như hình bên dưới

import queue

Mô-đun có sẵn theo mặc định với python và bạn không cần bất kỳ cài đặt bổ sung nào để bắt đầu làm việc với hàng đợi. Có 2 loại hàng đợi FIFO (vào trước ra trước) và LIFO (vào sau ra trước)

Bước 2) Để làm việc với hàng đợi FIFO, hãy gọi lớp Hàng đợi bằng mô-đun hàng đợi đã nhập như hình bên dưới

import queue
6

Bước 3) Để làm việc với hàng đợi LIFO, hãy gọi lớp LifoQueue() như bên dưới

import queue
7

Các phương thức có sẵn bên trong lớp Queue và LifoQueue

Sau đây là các phương thức quan trọng có sẵn bên trong lớp Queue và LifoQueue

  • đặt (mục). Điều này sẽ đặt mục bên trong hàng đợi
  • được(). Điều này sẽ trả lại cho bạn một mục từ hàng đợi
  • trống rỗng(). Nó sẽ trả về true nếu hàng đợi trống và false nếu có mặt hàng
  • qsize(). trả về kích thước của hàng đợi
  • đầy(). trả về true nếu hàng đợi đầy, ngược lại trả về false

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

Trong trường hợp nhập trước xuất trước thì phần tử nào ra trước sẽ ra trước

Thêm và mục trong hàng đợi

Hãy để chúng tôi làm việc trên một ví dụ để thêm một mục trong hàng đợi. Để bắt đầu làm việc với hàng đợi, trước tiên hãy nhập hàng đợi mô-đun, như minh họa trong ví dụ bên dưới

Để thêm một mục, bạn có thể sử dụng phương thức put() như trong ví dụ

import queue
8

Theo mặc định, kích thước của hàng đợi là vô hạn và bạn có thể thêm bất kỳ số lượng mục nào vào đó. Trong trường hợp bạn muốn xác định kích thước của hàng đợi, điều tương tự có thể được thực hiện như sau

import queue
9

đầu ra

q = queue.Queue()
0

Bây giờ kích thước của hàng đợi là 5 và sẽ không mất nhiều hơn 5 mục và phương thức q1. full() sẽ trả về true. Thêm bất kỳ mục nào nữa sẽ không thực thi mã nữa

Xóa một mục khỏi hàng đợi

Để xóa một mục khỏi hàng đợi, bạn có thể sử dụng phương thức có tên là get(). Phương pháp này cho phép các mục từ hàng đợi khi được gọi

Ví dụ sau đây cho thấy cách xóa một mục khỏi hàng đợi

q = queue.Queue()
1

đầu ra

q = queue.Queue()
2

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

Trong trường hợp nhập cuối cùng trong hàng đợi xuất trước, phần tử được nhập cuối cùng sẽ là phần tử đầu tiên xuất hiện

Để làm việc với LIFO, tôi. e. , cuối cùng trong hàng đợi ra đầu tiên, chúng ta cần nhập mô-đun hàng đợi và sử dụng phương thức LifoQueue()

Thêm và mục trong hàng đợi

Ở đây chúng ta sẽ hiểu cách thêm một mục vào hàng đợi LIFO

q = queue.Queue()
3

Bạn phải sử dụng phương thức put() trên LifoQueue, như trong ví dụ trên

Xóa một mục khỏi hàng đợi

Để xóa một mục khỏi LIFOqueue, bạn có thể sử dụng phương thức get()

q = queue.Queue()
4

đầu ra

import queue
60

Thêm nhiều hơn 1 mục vào Hàng đợi

Trong các ví dụ trên, chúng ta đã thấy cách thêm một mục và xóa mục đó cho FIFO và LIFOqueue. Bây giờ chúng ta sẽ xem cách thêm nhiều mục và xóa mục đó

Hàng đợi Python có bị chặn không?

Có -- nếu bạn gọi some_queue. get() trong luồng hoặc chức năng chính, chương trình sẽ chặn ở đó cho đến khi một số đối tượng được chuyển qua hàng đợi .

Đâu là hàng đợi tốt nhất cho Python?

deque là một lựa chọn mặc định tuyệt vời để triển khai cấu trúc dữ liệu hàng đợi FIFO trong Python . Tôi sẽ cung cấp các đặc điểm hiệu suất mà bạn mong đợi từ việc triển khai hàng đợi tốt và cũng có thể được sử dụng làm ngăn xếp (Hàng đợi LIFO). Đọc toàn bộ loạt bài viết “Cấu trúc dữ liệu cơ bản trong Python” tại đây.

Điều gì xảy ra nếu bạn nhận được từ hàng đợi trống trong Python?

trả về True nếu không có phần tử nào trong hàng đợi . Trả về Sai nếu không.