Exemplo n.º 1
0
class Queue(LiuDataStructure):
    def __init__(self, iterable=[]):
        self.data = LinkedList(iterable)
        self.front = None
        self.rear = None
        self.length = 0

        if len(iterable) > 0:
            self.front = self.data.get(0)
            self.rear = self.data.tail
            self.length = self.data.length

    def __iter__(self):
        while not self.is_empty():
            yield self.dequeue()

    def __repr__(self):
        if self.length > 0:
            string = 'Front-> ' + self.data.__repr__() + ' <- Rear'
        else:
            string = 'Front-> [] <- Rear'
        return string

    def __getitem__(self, slc_obj):
        raise AssertionError("Queue does not support slicing")

    def __setitem__(self, slc_obj):
        raise AssertionError("Queue does not support slicing")

    def enqueue(self, item):
        self.data.append(item)
        self.length = self.data.length
        self.rear = self.data.tail
        if self.length == 1:
            self.front = item
        return self

    def dequeue(self):
        item = None
        try:
            item = self.data.remove(0)
            self.length = self.data.length
            if self.data.length > 0:
                self.front = self.data.get(0)
            else:
                self.front = None
                self.rear = None
        except IndexError:
            raise IndexError('Queue is empty')

        return item

    def peek(self):
        return self.front

    def clear(self):
        self.front = None
        self.rear = None
        self.length = 0
        self.data = LinkedList()

    def is_empty(self):
        return self.length == 0