Ejemplo n.º 1
0
class DLLQueue(object):
    def __init__(self, list_object=None):
        self.data = DoublyLinkedList()
        self.size = 0

        if list_object:
            self.data.build(list_object)

    def __len__(self):
        return self.size

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

    def peek(self):
        return self.data.tail_value

    def enqueue(self, item):
        self.data.insert_front_value(item)
        self.size += 1

    def dequeue(self):
        if self.size == 0:
            raise IndexError('Unable to dequeue, Queue is empty.')

        value = self.data.pop_back_value()
        self.size -= 1
        return value
Ejemplo n.º 2
0
class DLLDeque(object):

    def __init__(self, list_object=None):
        self.data = DoublyLinkedList()
        self.size = 0

        if list_object:
            self.data.build(list_object)
            self.size = len(list_object)

    def __len__(self):
        return self.size

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

    def first(self):
        return self.data.head_value

    def last(self):
        return self.data.tail_value

    def appendfront(self, item):
        self.data.insert_front_value(item)
        self.size += 1

    def appendback(self, item):
        self.data.insert_end_value(item)
        self.size += 1

    def popfront(self):
        if self.size == 0:
            raise IndexError('Unable to popfront, Deque is empty.')

        self.size -= 1
        return self.data.pop_front_value()

    def popback(self):
        if self.size == 0:
            raise IndexError('Unable to popback, Deque is empty.')

        self.size -= 1
        return self.data.pop_back_value()
Ejemplo n.º 3
0
def run_test(ops):
    DS = DoublyLinkedList()
    ans = []
    if verbose:
        print(DS)
    for op in ops:
        if verbose:
            print(*op)
        if op[0] == "insert_first":
            x = op[1]
            DS.insert_first(x)
        if op[0] == "insert_last":
            x = op[1]
            DS.insert_last(x)
        if op[0] == "delete_first":
            ans.append(DS.delete_first())
        if op[0] == "delete_last":
            ans.append(DS.delete_last())
        if (op[0] == "splice/remove") and DS.head:
            i, n = op[1], op[2]
            L = DoublyLinkedList()
            L.build(range(n))
            if verbose:
                print('L: ', L)
            x1 = DS.head.later_node(i)
            x2 = x1.next
            DS.splice(x1, L)
            assert x2 != None
            for _ in range(n):
                L = DS.remove(x1.next, x2.prev)
                x2 = x1.next
                DS.splice(x1, L)
        if verbose:
            print(DS)
    ans.append(tuple([x for x in DS]))
    return ans