class ListStack:
    # TODO limit size
    def __init__(self, size=0):
        self.list_obj = LinkedList()

# top of the stack is

    def list(self):
        return [link.key for link in self.list_obj.array()]

    def isEmpty(self):
        return self.list_obj.isEmpty()

    def push(self, key):
        self.list_obj.insertFirst(key, None)

    def pop(self):
        if self.isEmpty():
            raise ValueError("Popping from empty stack")
        return self.list_obj.deleteFirst().key

    def peek(self):
        if self.isEmpty():
            raise ValueError("Peeking from empty stack")
        return self.list_obj.first.key
Beispiel #2
0
 def test_delete_non_existing(self):
     list = LinkedList()
     list.insertFirst(1, {"a": 1})
     list.insertFirst(2, {"b": 2})
     list.insertFirst(3, {"c": 3})
     self.assertEqual(list.delete(2).data["b"], 2)
     self.assertEqual(len(list.array()), 2)
Beispiel #3
0
 def test_delete_existing(self):
     list = LinkedList()
     list.insertFirst(1, {"a": 1})
     list.insertFirst(2, {"b": 2})
     list.insertFirst(3, {"c": 3})
     self.assertEqual(list.delete(4), None)
     self.assertEqual(len(list.array()), 3)
Beispiel #4
0
 def sort(self, array):
     list = LinkedList()
     for i in range(len(array)):
         if list.isEmpty():
             list.insertFirst(array[i], None)
         else:
             prev, curr = None, list.first
             while (curr != None and curr.key < array[i]):
                 prev, curr = curr, curr.next
             node = Link(array[i], None, curr)
             if prev == None:
                 list.first = node
             else:
                 prev.next = node
     return [link.key for link in list.array()]
Beispiel #5
0
 def test_delete_first_non_empty(self):
     list = LinkedList()
     list.insertFirst(1, {"a": 1})
     list.insertFirst(2, {"b": 2})
     self.assertEqual(list.deleteFirst().data["b"], 2)
     self.assertEqual(len(list.array()), 1)