Die folgende Klasse zeigt die einfachste Implementation einer Warteschlange (Queue). Zur Datenhaltung wir eine Python Liste, die einem dynamischen (vergrösser/verkleinerbarem) Array entspricht.
class Queue:
def __init__(self):
self._data = []
def enqueue(self, item):
self._data.append(item)
def dequeue(self):
return self._data.pop(0) # remove and return first element
def size(self):
return len(self._data)
def isEmpty(self):
return self.size() == 0
class Iterator:
def __init__(self, queue):
self._currentItem = 0
self.queue = queue
def hasNext(self):
return (self._currentItem < self.queue.size() )
def next(self):
item = self.queue._data[self._currentItem]
self._currentItem += 1
return item
def iterator(self):
return Queue.Iterator(self)
Warteschlangen sind immer dann sinnvoll, wenn wir Elemente speichern wollen, die relative Reihenfolge der Elemente aber beibehalten wollen.
testdata = ["the", "order", "of", "the", "elements", "is", "important"]
Mittels der enqueue Methode werden Daten zur Warteschlange hinzugefügt.
queue = Queue()
for datum in testdata:
queue.enqueue(datum)
Wir sehen, dass die Iterationsreihenfolge der Einfügereihenfolge entspricht
it = queue.iterator()
while (it.hasNext()):
print(it.next())
the order of the elements is important
Meistens wollen wir aber nicht über eine Queue iterieren, sondern die bearbeiteten Elemente auch direkt aus der Queue entfernen. Dies geschieht mit der Methode dequeue
while not queue.isEmpty():
datum = queue.dequeue()
print(datum)
the order of the elements is important