Exemple #1
0
class Queue(object):
    @staticmethod
    def from_list(l):
        _q = Queue()
        for item in l:
            _q.insert(item)
        return _q

    def __init__(self, max_size=None):
        self._ll = None
        self._head_of_queue = None
        self.max_size = max_size

    def push(self, item):
        if self._head_of_queue is None:
            self._ll = LinkedList(item)
            self._head_of_queue = self._ll
        else:
            self._head_of_queue.insert(item)
            self._head_of_queue = self._head_of_queue.next_l

    def to_list(self):
        return self._ll.to_list() if self._ll is not None else []

    def pop(self):
        if len(self) == 0:
            raise ValueError("Can't pop from an empty queue")

        ans = self._ll.item
        self._ll = self._ll.next_l
        if self._ll is None:
            self._head_of_queue = None
        return ans

    def __len__(self):
        return 0 if self._ll is None else len(self._ll)

    def __eq__(self, other):
        return self._ll == other._ll

    def __ne__(self, other):
        return not self.__eq__(other)

    def __iter__(self):
        return iter(self.to_list())

    def __str__(self):
        return '->'.join(map(str, self.to_list()[::-1]))