class Queue: def __init__(self): self.size = 0 self.storage = SinglyLinkedList() def __len__(self): # returns the length of the queue return self.size def enqueue(self, value): # increase the size of the queue by one self.size += 1 # add the new value to the tail of our list self.storage.add_to_tail(value) def dequeue(self): # return 0 if nothing is in the queue if self.size == 0: return None # decrement the size of the queue by one self.size -= 1 # remove the value from the head of our list and return the value of the # removed head value = self.storage.remove_head() return value
def test_get_max(self): """ Tests that the maximum value in the list is returned. """ sll = SinglyLinkedList() sll.add_to_head(3) sll.add_to_tail(9) sll.add_to_head(10) sll.add_to_head(4) max_val = sll.get_max() self.assertEqual(max_val, 10)
def test_add_to_tail(self): """ Tests that a new Node has been added to the tail of the list. """ def get_tail_val(list): currentNode = list.head while currentNode.next: currentNode = currentNode.next return currentNode.value sll = SinglyLinkedList() sll.add_to_tail(1) sll.add_to_tail(2) self.assertEqual(get_tail_val(sll), 2) sll.add_to_tail(90) self.assertEqual(get_tail_val(sll), 90) self.assertEqual(len(sll), 3)
class Queue: def __init__(self): self.size = 0 # Why is our DLL a good choice to store our elements? self.storage = SinglyLinkedList() def enqueue(self, value): self.storage.add_to_tail(value) self.size += 1 # print(f"Enqueued successfully; queue size is now {self.size}") def dequeue(self): print(self.size, self.size > 0) if self.size > 0: self.size -= 1 return self.storage.remove_from_head() return None def len(self): return self.size
class SinglyLinkedListTests(unittest.TestCase): def setUp(self): self.list = SinglyLinkedList() def test_add_to_tail(self): self.list.add_to_tail(1) self.assertEqual(self.list.tail.value, 1) self.assertEqual(self.list.head.value, 1) self.list.add_to_tail(2) self.assertEqual(self.list.tail.value, 2) self.assertEqual(self.list.head.value, 1) def test_contains(self): self.list.add_to_tail(1) self.list.add_to_tail(2) self.list.add_to_tail(5) self.list.add_to_tail(10) self.assertTrue(self.list.contains(10)) self.assertTrue(self.list.contains(2)) self.assertFalse(self.list.contains(1000)) def test_remove_head(self): self.list.add_to_tail(10) self.list.add_to_tail(20) self.assertEqual(self.list.remove_head(), 10) self.assertFalse(self.list.contains(10)) self.assertEqual(self.list.remove_head(), 20) self.assertFalse(self.list.contains(20)) self.list.add_to_tail(10) self.assertEqual(self.list.remove_head(), 10) self.assertIsNone(self.list.head) self.assertIsNone(self.list.tail) self.assertIsNone(self.list.remove_head()) def test_get_max(self): self.assertIsNone(self.list.get_max()) self.list.add_to_tail(100) self.assertEqual(self.list.get_max(), 100) self.list.add_to_tail(55) self.assertEqual(self.list.get_max(), 100) self.list.add_to_tail(101) self.assertEqual(self.list.get_max(), 101)