Werken met wachtrijen

Datastructuren en algoritmen in Python

Miriam Antona

Software Engineer

Wachtrijen

  • FIFO: First-In First-Out

    • Het eerst ingevoegde item wordt als eerste verwijderd

      Een foto van een supermarkt rij met drie personen.

Datastructuren en algoritmen in Python

Wachtrijen

  • FIFO: First-In First-Out

    • Het eerst ingevoegde item wordt als eerste verwijderd

      Een foto van een supermarkt rij met twee personen omdat de eerste persoon de rij heeft verlaten.

Datastructuren en algoritmen in Python

Wachtrijen

  • FIFO: First-In First-Out

    • Het eerst ingevoegde item wordt als eerste verwijderd

      Een foto van een supermarkt rij met één persoon omdat de eerste en tweede de rij hebben verlaten.

Datastructuren en algoritmen in Python

Wachtrijen - structuur

Schematische weergave van een wachtrij met de namen van enkele internationale gerechten.

Datastructuren en algoritmen in Python

Wachtrijen - structuur

Schematische weergave van een wachtrij met de namen van enkele internationale gerechten. Het woord "head" wijst naar het begin van de rij.

  • Begin: head
Datastructuren en algoritmen in Python

Wachtrijen - structuur

Schematische weergave van een wachtrij met namen van internationale gerechten. Het woord "tail" wijst naar het einde van de rij.

  • Begin: head
  • Einde: tail
Datastructuren en algoritmen in Python

Wachtrijen - kenmerken

Schematische weergave van een wachtrij met de namen van twee internationale gerechten. Het woord "head" wijst naar het begin van de rij en het woord "tail" naar het einde.

Datastructuren en algoritmen in Python

Wachtrijen - kenmerken

Schematische weergave van een wachtrij. Een nieuw element is aan het einde van de rij ingevoegd.

  • Je kunt alleen aan het einde invoegen
    • Enqueue
Datastructuren en algoritmen in Python

Wachtrijen - kenmerken

Schematische weergave van een wachtrij. Het eerste element is doorgestreept omdat het wordt verwijderd.

  • Je kunt alleen aan het einde invoegen
    • Enqueue
  • Je kunt alleen aan het begin verwijderen
Datastructuren en algoritmen in Python

Wachtrijen - kenmerken

Schematische weergave van een wachtrij. De wachtrij heeft slechts twee elementen omdat het eerste is verwijderd.

  • Je kunt alleen aan het einde invoegen
    • Enqueue
  • Je kunt alleen aan het begin verwijderen
    • Dequeue
  • Andere soorten wachtrijen:
    • Dubbelzijdige wachtrijen
    • Circulaire wachtrijen
    • Prioriteitswachtrijen
Datastructuren en algoritmen in Python

Wachtrijen - praktijkvoorbeelden

  • Printtaken in een printer
    • Documenten worden geprint in de volgorde van binnenkomst
  • Toepassingen waar de volgorde van verzoeken telt
    • Concertkaartjes
    • Taxiservices
Datastructuren en algoritmen in Python

Wachtrijen - implementatie

class Node:
  def __init__(self,data):
    self.data = data
    self.next = None
class Queue:
  def __init__(self):
    self.head = None
    self.tail = None
Datastructuren en algoritmen in Python

Wachtrijen - enqueue

def enqueue(self,data):

new_node = Node(data)
if self.head == None:

Schematische weergave van een wachtrij met één element. De wachtrij is geïmplementeerd met een node.

Datastructuren en algoritmen in Python

Wachtrijen - enqueue

def enqueue(self,data):
  new_node = Node(data)
  if self.head == None:
    self.head = new_node
    self.tail = new_node

Schematische weergave van een wachtrij met één element. De wachtrij is geïmplementeerd met een node. De woorden "head" en "tail" wijzen naar de node.

Datastructuren en algoritmen in Python

Wachtrijen - enqueue

def enqueue(self,data):
  new_node = Node(data)
  if self.head == None:
    self.head = new_node
    self.tail = new_node

else:

Schematische weergave van een wachtrij met twee elementen. De wachtrij is geïmplementeerd met nodes. Een nieuwe node staat klaar om ingevoegd te worden.

Datastructuren en algoritmen in Python

Wachtrijen - enqueue

def enqueue(self,data):
  new_node = Node(data)
  if self.head == None:
    self.head = new_node
    self.tail = new_node

else: self.tail.next = new_node

Schematische weergave van een wachtrij met drie elementen. Het woord "tail" wijst nog naar de tweede node.

Datastructuren en algoritmen in Python

Wachtrijen - enqueue

def enqueue(self,data):
  new_node = Node(data)
  if self.head == None:
    self.head = new_node
    self.tail = new_node

else: self.tail.next = new_node self.tail = new_node

Schematische weergave van een wachtrij met drie elementen. Het woord "tail" wijst naar de laatst ingevoegde node.

Datastructuren en algoritmen in Python

Wachtrijen - dequeue

Schematische weergave van een wachtrij met drie elementen. Het woord "head" wijst naar de eerste node en het woord "tail" naar de laatste node.

def dequeue(self):

if self.head:
Datastructuren en algoritmen in Python

Wachtrijen - dequeue

Schematische weergave van een wachtrij met drie elementen. De woorden "head" en "current_node" wijzen naar de eerste node en het woord "tail" naar de laatste node.

def dequeue(self):
  if self.head:
    current_node = self.head





Datastructuren en algoritmen in Python

Wachtrijen - dequeue

Schematische weergave van een wachtrij met drie elementen. Het woord "head" wijst naar de eerste node, het woord "current_node" naar de tweede, en het woord "tail" naar de laatste node.

def dequeue(self):
  if self.head:
    current_node = self.head
    self.head = current_node.next




Datastructuren en algoritmen in Python

Wachtrijen - dequeue

Schematische weergave van een wachtrij met twee elementen. Het woord "head" wijst naar de eerste node en het woord "tail" naar de laatste node. Er is nog een node buiten de wachtrij met het woord "current_node" dat ernaar wijst.

def dequeue(self):
  if self.head:
    current_node = self.head
    self.head = current_node.next
    current_node.next = None




Datastructuren en algoritmen in Python

Wachtrijen - dequeue

Een node met de woorden "current_node" en "tail" die ernaar wijzen. Het woord "head" wijst naar null.

def dequeue(self):
  if self.head:
    current_node = self.head
    self.head = current_node.next
    current_node.next = None

if self.head == None:
Datastructuren en algoritmen in Python

Wachtrijen - dequeue

Een node met het woord "current_node" dat ernaar wijst. De woorden "head" en "tail" wijzen naar null.

def dequeue(self):
  if self.head:
    current_node = self.head
    self.head = current_node.next
    current_node.next = None

    if self.head == None:
      self.tail = None    
Datastructuren en algoritmen in Python

SimpleQueue in Python

  • Module: queue
    • Queue
    • SimpleQueue
import queue


orders_queue = queue.SimpleQueue()
orders_queue.put("Sushi") orders_queue.put("Lasagna") orders_queue.put("Paella")
print("The size is: ", orders_queue.qsize())
The size is: 3
print(orders_queue.get())
print(orders_queue.get())
print(orders_queue.get())
Sushi
Lasagna
Paella
print("Empty queue: ", orders_queue.empty())
Empty queue: True
Datastructuren en algoritmen in Python

Laten we oefenen!

Datastructuren en algoritmen in Python

Preparing Video For Download...