2.6.1 Wachtrij

class Wachtrij:
    def __init__(self):
        self.wachtrij = []

    def push(self,elem):
        # Voeg achteraan toe
        self.wachtrij.append(elem)

    def pop(self):
        # Verwijder vooraan, en return het verwijderde element
        elem = self.wachtrij[0]
        self.wachtrij = self.wachtrij[1:]
        return elem

# Maak een lege wachtrij
wachtrij = Wachtrij()

# Voeg een aantal elementen toe
wachtrij.push('eat')
wachtrij.push('sleep')
wachtrij.push('code')
wachtrij.push('repeat')

# Verwijder de elementen een voor een
print(wachtrij.pop())
print(wachtrij.pop())
print(wachtrij.pop())
print(wachtrij.pop())

2.6.2 Aantal elementen in de wachtrij

class Wachtrij:
    def __init__(self):
        self.wachtrij = []

    def push(self,elem):
        # Voeg achteraan toe
        self.wachtrij.append(elem)

    def pop(self):
        # Verwijder vooraan, en return het verwijderde element
        elem = self.wachtrij[0]
        self.wachtrij = self.wachtrij[1:]
        return elem

    def lengte(self):
        return len(self.wachtrij)

2.6.4 Een wachtrij als lijst modelleren is niet efficient

class Wachtrij:
    def __init__(self):
        self.wachtrij = []

    def push(self,elem):
        # Voeg achteraan toe
        self.wachtrij.append(elem)

    def pop(self):
        # Verwijder vooraan, en return het verwijderde element
        elem = self.wachtrij[0]
        self.wachtrij = self.wachtrij[1:]
        return elem

# Maak een lege wachtrij
wachtrij = Wachtrij()

# Voeg een aantal elementen toe
wachtrij.push('Dubois')
wachtrij.push('Diallo')
wachtrij.push('Nguyen')
wachtrij.push('Maes')

# Verwijder de elementen een voor een
print(wachtrij.pop())
print(wachtrij.pop())
print(wachtrij.pop())
print(wachtrij.pop())

2.6.5 Stapel

class Stapel:
    def __init__(self):
        self.stapel = []

    def push(self,elem):
        # Voeg achteraan toe
        self.stapel.append(elem)

    def pop(self):
        # Verwijder achteraan, en return het verwijderde element
        elem = self.stapel[-1]
        self.stapel = self.stapel[:-1]
        return elem

# Maak een lege stapel
stapel = Stapel()

# Voeg een aantal elementen toe
stapel.push('eat')
stapel.push('sleep')
stapel.push('code')
stapel.push('repeat')

# Verwijder de elementen een voor een
print(stapel.pop())
print(stapel.pop())
print(stapel.pop())
print(stapel.pop())

2.6.6 Stapel onderbroeken

class Stapel:
    def __init__(self):
        self.stapel = []

    def push(self,elem):
        # Voeg achteraan toe
        self.stapel.append(elem)

    def pop(self):
        # Verwijder achteraan, en return het verwijderde element
        elem = self.stapel[-1]
        self.stapel = self.stapel[:-1]
        return elem

# Maak een lege stapel
onderbroeken = Stapel()

# Voeg een aantal elementen toe
onderbroeken.push('rood')
onderbroeken.push('blauw')
onderbroeken.push('blauw')
onderbroeken.push('zwart')

# Verwijder de elementen een voor een
print(onderbroeken.pop())
print(onderbroeken.pop())
print(onderbroeken.pop())
print(onderbroeken.pop())

2.6.7 Bovenaan piepen

class Stapel:
    def __init__(self):
        self.stapel = []

    def push(self,elem):
        # Voeg achteraan toe
        self.stapel.append(elem)

    def pop(self):
        # Verwijder achteraan, en return het verwijderde element
        elem = self.stapel[-1]
        self.stapel = self.stapel[:-1]
        return elem

    def piep(self):
        # Piep achteraan, verwijder dat element niet
        if self.stapel:
            return self.stapel[-1]

2.6.9 Softwarebibliotheken

from math import factorial as faculteit

print(faculteit(8))

2.6.10 LIFO Softwarebibliotheek

from queue import LifoQueue as Stapel

# Maak een lege stapel
stapel = Stapel()

# Voeg een aantal elementen toe
stapel.put('eat')
stapel.put('sleep')
stapel.put('code')
stapel.put('repeat')

# Verwijder een aantal elementen
print(stapel.get())
print(stapel.get())
print(stapel.get())
print(stapel.get())

2.6.11 Volle stapel

class Stapel:
    def __init__(self, grootte):
        self.stapel = []
        self.grootte = grootte  # maximum aantal elementen

    def push(self, elem):
        if len(self.stapel) < self.grootte:
            self.stapel.append(elem)
        else:
            print("Stapel is vol!")

    def pop(self):
        elem = self.stapel[-1]
        self.stapel = self.stapel[:-1]
        return elem

2.6.12 Er wachten mensen voor u!

class Wachtrij:
    def __init__(self):
        self.wachtrij = []

    def push(self,elem):
        # Voeg achteraan toe
        origineel_aantal = len(self.wachtrij)
        self.wachtrij.append(elem)
        return origineel_aantal

    def pop(self):
        # Verwijder vooraan, en return het verwijderde element
        elem = self.wachtrij[0]
        self.wachtrij = self.wachtrij[1:]
        return elem

2.6.13 Hoe dans je de polonaise?

class Polonaise:
    def __init__(self, polonaise):
        self.polonaise = polonaise

    def push(self,elem):
        # Voeg achteraan toe
        self.polonaise.append(elem)

    def pop(self):
        # Verwijder achteraan, en return het verwijderde element
        elem = self.polonaise[-1]
        self.polonaise = self.polonaise[:-1]
        return elem

    def changer(self):
        self.polonaise.reverse()

2.6.14 Zo dans je de polonaise!

class Polonaise:
    def __init__(self, polonaise):
        self.polonaise = polonaise

    def push(self,elem):
        # Voeg achteraan toe
        self.polonaise.append(elem)

    def pop(self):
        # Verwijder achteraan, en return het verwijderde element
        elem = self.polonaise[-1]
        self.polonaise = self.polonaise[:-1]
        return elem

    def changer(self):
        self.polonaise.reverse()

pol = Polonaise(["Elke", "Nina"])
pol.push("Jenna")
pol.changer()
pol.push("Thommie")
pol.push("René")
pol.pop()
pol.changer()
pol.push("Jessica")
pol.push("Aram")
pol.push("Dorothee")
pol.pop()
pol.pop()

print(pol.polonaise)

2.6.15 Prioriteiten

class Prioriteiten:
    def __init__(self):
        # We maken een wachtrij voor elke prioriteit
        self.rijen = {
            1: [],
            2: [],
            3: [],
            4: []
        }

    def push(self, prio, elem):
        if prio in self.rijen:
            self.rijen[prio].append(elem)

    def pop(self):
        for prio in range(1, 5):  # Begin bij hoogste prioriteit
            if self.rijen[prio]:
                return self.rijen[prio].pop(0)  # FIFO: eerste eruit