Queue

Python SELF EN
Level 52 , Lesson 0
Available

7.1 Definition of a Queue and its Properties

Queue is an abstract data structure that represents an ordered collection of elements organized by the "first in, first out" principle (FIFO). You can think of a queue like a line of people at a store: the first person in line gets served first.

Definition of a Queue and its Properties

Properties of a Queue:

  • FIFO (First In, First Out): The first added element will be the first one removed.
  • Limited Operations: A queue supports a limited set of operations: adding (enqueue), removing (dequeue), and peeking at the element in the front position.
  • One-way Access: Access to elements is only possible from the front and rear ends.
  • Simplicity in Implementation: A queue can easily be implemented using an array or a linked list.

FIFO operation principle:

  • Adding an Element (enqueue): A new element is added to the end of the queue.
  • Removing an Element (dequeue): The first added element is removed from the front of the queue.
  • Peeking at the Front Element: Allows you to see the front element of the queue without removing it.

Elements in a queue are added from one end (rear) and removed from the other end (front). So, the first added element is the first to be removed.

7.2 Basic Operations

Basic operations: enqueue, dequeue, peek

Operation enqueue: Adds a new element to the end of the queue.

Time complexity: O(1).


from collections import deque

queue = deque()
queue.append(10)  # enqueue 10
queue.append(20)  # enqueue 20
print(queue)  # Output: deque([10, 20])

Operation dequeue: Removes and returns an element from the front of the queue.

Time complexity: O(1).


from collections import deque

queue = deque()
queue.append(10)  # enqueue 10
queue.append(20)  # enqueue 20
print(queue)  # Output: deque([10, 20])

front_element = queue.popleft()  # dequeue
print(front_element)  # Output: 10
print(queue)  # Output: deque([20])

Operation peek: Returns the element at the front of the queue without removing it.

Time complexity: O(1).


from collections import deque

queue = deque()
queue.append(10)  # enqueue 10
queue.append(20)  # enqueue 20
print(queue)  # Output: deque([10, 20])

front_element = queue[0]  # peek
print(front_element)  # Output: 10

7.3 Examples of Using Queues

Let's look at some examples of queue usage.

1 Printer Job Management

Queues are used for managing printer jobs, where documents are added to the queue and printed in the order they arrive.


class PrinterQueue:
    def __init__(self):
        self.queue = deque()

    def add_job(self, job):
        self.queue.append(job)

    def print_job(self):
        if self.queue:
            job = self.queue.popleft()
            print(f"Printing: {job}")

# Usage example:
printer_queue = PrinterQueue()
printer_queue.add_job("Document1.pdf")
printer_queue.add_job("Document2.pdf")
printer_queue.print_job()  # Output: Printing: Document1.pdf
printer_queue.print_job()  # Output: Printing: Document2.pdf

2 Web Server Request Handling

Queues are used to manage client requests arriving at a web server. Requests are processed in the order they arrive.


class RequestQueue:
    def __init__(self):
        self.queue = deque()

    def add_request(self, request):
        self.queue.append(request)

    def process_request(self):
        if self.queue:
            request = self.queue.popleft()
            print(f"Processing request: {request}")

# Usage example:
request_queue = RequestQueue()
request_queue.add_request("GET /index.html")
request_queue.add_request("POST /submit-form")
request_queue.process_request()  # Output: Processing request: GET /index.html
request_queue.process_request()  # Output: Processing request: POST /submit-form

3 Message Queue in Messaging Systems

Queues are used to manage messages in messaging systems (e.g., message brokers). Messages are processed in the order they arrive.


class MessageQueue:
    def __init__(self):
        self.queue = deque()

    def send_message(self, message):
        self.queue.append(message)

    def receive_message(self):
        if self.queue:
            message = self.queue.popleft()
            print(f"Received message: {message}")

# Usage example:
message_queue = MessageQueue()
message_queue.send_message("Hello")
message_queue.send_message("World")
message_queue.receive_message()  # Output: Received message: Hello
message_queue.receive_message()  # Output: Received message: World
2
Task
Python SELF EN, level 52, lesson 0
Locked
Queue is simple
Queue is simple
2
Task
Python SELF EN, level 52, lesson 0
Locked
Queues are tricky
Queues are tricky
Comments
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION