def __new__(cls, comp, **kwargs): raise_if_backend_is_not_python(cls, kwargs.get('backend', Backend.PYTHON)) obj = object.__new__(cls) obj.items = SinglyLinkedList() obj.comp = comp return obj
def __new__(cls, items=None): obj = object.__new__(cls) obj.stack = SinglyLinkedList() if items is None: pass elif type(items) in (list, tuple): for x in items: obj.push(x) else: raise TypeError("Expected type: list/tuple") return obj
def __new__(cls, items=None, double_ended=False): obj = object.__new__(cls) obj.queue = SinglyLinkedList() if items is None: pass elif type(items) in (list, tuple): for x in items: obj.append(x) else: raise TypeError("Expected type: list/tuple") obj._double_ended = double_ended return obj
def __new__(cls, items=None, **kwargs): raise_if_backend_is_not_python(cls, kwargs.get('backend', Backend.PYTHON)) obj = object.__new__(cls) obj.stack = SinglyLinkedList() if items is None: pass elif type(items) in (list, tuple): for x in items: obj.push(x) else: raise TypeError("Expected type: list/tuple") return obj
def __new__(cls, items=None, dtype=NoneType): obj = object.__new__(cls) obj.queue = SinglyLinkedList() obj._dtype = dtype if items is None: pass elif type(items) in (list, tuple): if len(items) != 0 and dtype is NoneType: obj._dtype = type(items[0]) for x in items: if type(x) == obj._dtype: obj.queue.append(x) else: raise TypeError("Expected %s but got %s" % (obj._dtype, type(x))) else: raise TypeError("Expected type: list/tuple") obj.front = obj.queue.head obj.rear = obj.queue.tail obj.size = obj.queue.size return obj
def test_SinglyLinkedList(): random.seed(1000) sll = SinglyLinkedList() assert raises(IndexError, lambda: sll[2]) sll.append_left(5) sll.append(1) sll.append_left(2) sll.append(3) sll.insert_after(sll[1], 4) sll.insert_after(sll[-1], 6) sll.insert_at(0, 2) sll.insert_at(-1, 9) sll.extract(2) sll.extract(0) sll.extract(-1) sll[-2].data = 0 assert str(sll) == "[2, 4, 1, 0, 9]" assert len(sll) == 5 assert raises(IndexError, lambda: sll.insert_at(6, None)) assert raises(IndexError, lambda: sll.extract(20)) sll_copy = copy.deepcopy(sll) for i in range(len(sll)): if i % 2 == 0: sll.pop_left() else: sll.pop_right() assert str(sll) == "[]" for _ in range(len(sll_copy)): index = random.randint(0, len(sll_copy) - 1) sll_copy.extract(index) assert str(sll_copy) == "[]" assert raises(ValueError, lambda: sll_copy.extract(1))
def test_SinglyLinkedList(): random.seed(1000) sll = SinglyLinkedList() assert raises(IndexError, lambda: sll[2]) sll.appendleft(5) sll.append(1) sll.appendleft(2) sll.append(3) sll.insert_after(sll[1], 4) sll.insert_after(sll[-1], 6) sll.insert_at(0, 2) sll.insert_at(-1, 9) sll.extract(2) assert sll.popleft().key == 2 assert sll.popright().key == 6 sll[-2].key = 0 assert str(sll) == "['2', '4', '1', '0', '9']" assert len(sll) == 5 assert raises(IndexError, lambda: sll.insert_at(6, None)) assert raises(IndexError, lambda: sll.extract(20)) sll_copy = DoublyCircularLinkedList() for i in range(sll.size): sll_copy.append(sll[i]) for i in range(len(sll)): if i % 2 == 0: sll.popleft() else: sll.popright() assert str(sll) == "[]" for _ in range(len(sll_copy)): index = random.randint(0, len(sll_copy) - 1) sll_copy.extract(index) assert str(sll_copy) == "[]" assert raises(ValueError, lambda: sll_copy.extract(1))
def __new__(cls, comp): obj = object.__new__(cls) obj.items = SinglyLinkedList() obj.comp = comp return obj