Exemplo n.º 1
0
class Queue(object):

    # initializes queue
    def __init__(self):
        self.__linked_list = SinglyLinkedList()
        self.length = 0

    # returns string representation of queue as "[item1, item2, ...]"
    def __repr__(self):
        return repr(self.__linked_list)

    # returns boolean value of whether or not queue is empty
    def is_empty(self):
        return self.length == 0

    # returns length of queue
    def get_length(self):
        return self.length

    # pushes new item to back of queue
    def push(self, item):
        self.__linked_list.append(item)
        self.length += 1

    # returns item at front of queue and removes it
    def pop(self):
        item = self.__linked_list.head.data
        self.__linked_list.remove_after(None)
        self.length -= 1
        return item

    # returns item at the front of queue without removing
    def peek(self):
        return self.__linked_list.head.data
Exemplo n.º 2
0
def main2():
    sll = SinglyLinkedList()
    for i in range(1,10):
        sll.append(i)
    print(sll)
    print(len(sll))
    sll[-9] = 100
    print(sll[-9])
    print(sll[1:3])
Exemplo n.º 3
0
class Stack:
    # linkedList-based stack
    # class LinkedListStack:
    def __init__(self):
        self.storage = SinglyLinkedList()

    def __len__(self):
        return len(self.storage)

    def push(self, value):
        self.storage.append(value)

    def pop(self):
        return self.storage.remove_last() if len(self) > 0 else None

    def top(self):
        return self.storage.get_tail()
Exemplo n.º 4
0
    def test_exists(self):
        """ Tests for membership.
        """
        sll = SinglyLinkedList()
        node1, node2, node3 = Node(1), Node(2), Node(3)

        sll.append(node1)
        sll.append(node2)
        sll.append(node3)

        self.assertTrue(sll.exists(node1))
        self.assertTrue(sll.exists(node2))
        self.assertTrue(sll.exists(node3))

        self.assertFalse(sll.exists(Node(4)))

        # Membership is based on object identity, not value
        self.assertFalse(sll.exists(Node(1)))
Exemplo n.º 5
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = SinglyLinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.storage.append(value)
        self.size += 1

    def pop(self):
        self.size = len(self.storage)
        if self.size > 0:
            item = self.storage.remove_last()
            self.size -= 1
            return item
        else:
            None
Exemplo n.º 6
0
    def test_delete(self):
        """ Test a delete method.
        """
        sll = SinglyLinkedList()
        node1, node2, node3 = Node(1), Node(2), Node(3)

        sll.append(node1)
        sll.append(node2)
        sll.append(node3)

        self.assertEquals(str(sll), '1, 2, 3')

        sll.delete(node2)

        self.assertEquals(str(sll), '1, 3')

        # It silently handles missing items
        sll.delete(Node(4))

        self.assertEquals(str(sll), '1, 3')
Exemplo n.º 7
0
class Queue:
    """
        Queue will be implemented with a linked list as the start
        of the queue as the tail, and the end of the queue as the head.
        This way, enqueue's and dequeue's are O(1).

        Enqueue is appending from the tail, dequeueing is reassigning
        the pointer of the head to None.
    """
    def __init__(self, iterable=None):
        self.queue = SinglyLinkedList()

        if iterable:
            for item in iterable:
                self.queue.append(item)

    def is_empty(self):
        return self.queue.is_empty()

    def length(self):
        return self.queue.size

    def front(self):
        if self.queue.is_empty():
            return None
        return self.queue.head.data

    def enqueue(self, data):
        self.queue.append(data)

    def dequeue(self):
        if self.queue.size < 1:
            raise ValueError("queue is empty")

        output = self.front()

        self.queue.delete(output)

        return output
Exemplo n.º 8
0
 def test_append(self):
     """ Test an append method.
     """
     sll = SinglyLinkedList()
     sll.append(Node('first'))
     sll.append(Node('second'))
     sll.append(Node('third'))
     self.assertEquals(str(sll), 'first, second, third')
Exemplo n.º 9
0
 def test_append_start_empty(self):
     linkedlist = SinglyLinkedList()
     linkedlist.append(1)
     assert linkedlist[0] == 1
     linkedlist.append(2)
     assert linkedlist[1] == 2
     linkedlist.append(10)
     assert linkedlist[2] == 10
     assert linkedlist.num_nodes == 3
     assert len(linkedlist) == 3
Exemplo n.º 10
0
 def test_find(self):
     ls = SinglyLinkedList()
     ls.append("a").append("b").append("c")
     self.assertIsInstance(ls.find("c"), Node)
     self.assertIsNone(ls.find("d"))
Exemplo n.º 11
0
class TestSinglyLinkedList(unittest.TestCase):

    def setUp(self):
        self.my_list = SinglyLinkedList()

    def test_basic_initialization_and_repr(self):
        self.assertEqual(repr(self.my_list), '[]')

    def test_append(self):
        self.my_list.append(4)
        self.my_list.append(3)
        self.my_list.append(7)
        self.my_list.append(-17)
        self.assertEqual(repr(self.my_list), '[4, 3, 7, -17]')

    def test_prepend(self):
        self.my_list.prepend(4)
        self.my_list.prepend(3)
        self.my_list.prepend(7)
        self.my_list.prepend(-17)
        self.assertEqual(repr(self.my_list), '[-17, 7, 3, 4]')

    def test_insert_after(self):
        self.my_list.insert_after(None, 4)
        self.my_list.insert_after(None, 3)
        self.my_list.insert_after(self.my_list.tail, 7)
        self.my_list.insert_after(self.my_list.head, -17)
        self.assertEqual(repr(self.my_list), '[3, -17, 4, 7]')

    def test_insert_sorted(self):
        self.my_list.insert_after(None, 4)
        self.my_list.insert_after(None, 3)
        self.my_list.insert_after(None, 7)
        self.assertEqual(repr(self.my_list), '[7, 3, 4]')
        self.my_list.insert_sorted(2)
        self.my_list.insert_sorted(8)
        self.assertEqual(repr(self.my_list), '[2, 7, 3, 4, 8]')
        self.my_list.remove_after(None)
        self.my_list.remove_after(None)
        self.my_list.remove_after(None)
        self.my_list.remove_after(None)
        self.my_list.remove_after(None)
        self.my_list.insert_sorted(8)
        self.my_list.insert_sorted(7)
        self.my_list.insert_sorted(6)
        self.my_list.insert_sorted(5)
        self.assertEqual(repr(self.my_list), '[5, 6, 7, 8]')
        self.my_list.reverse()
        self.assertEqual(repr(self.my_list), '[8, 7, 6, 5]')

    def test_remove_after(self):
        self.my_list.append(4)
        self.my_list.append(3)
        self.my_list.append(7)
        self.my_list.append(-17)
        self.assertEqual(repr(self.my_list), '[4, 3, 7, -17]')
        self.my_list.remove_after(None)
        self.assertEqual(repr(self.my_list), '[3, 7, -17]')
        self.my_list.remove_after(self.my_list.head)
        self.assertEqual(repr(self.my_list), '[3, -17]')
        self.my_list.remove_after(self.my_list.tail)
        self.assertEqual(repr(self.my_list), '[3, -17]')
        self.my_list.remove_after(None)
        self.my_list.remove_after(None)
        self.my_list.remove_after(None)
        self.assertEqual(repr(self.my_list), '[]')

    def test_array(self):
        self.my_list.append(4)
        self.my_list.append(3)
        self.my_list.append(7)
        self.my_list.append(-17)
        self.assertEqual(self.my_list.array(), [4, 3, 7, -17])

    def test_search(self):
        self.my_list.append(4)
        self.my_list.append(3)
        self.my_list.append(-17)
        self.my_list.append(7)
        self.assertEqual(self.my_list.search(4).data, 4)
        self.assertEqual(self.my_list.search(3).data, 3)
        self.assertEqual(self.my_list.search(-17).data, -17)
        self.assertEqual(self.my_list.search(17), None)

    def test_reverse(self):
        self.my_list.append(4)
        self.my_list.append(3)
        self.my_list.append(7)
        self.my_list.append(-17)
        self.assertEqual(repr(self.my_list), '[4, 3, 7, -17]')
        self.my_list.reverse()
        self.assertEqual(repr(self.my_list), '[-17, 7, 3, 4]')
        self.my_list.reverse()
        self.assertEqual(repr(self.my_list), '[4, 3, 7, -17]')

    def test_remove_duplicates(self):
        self.my_list.append(4)
        self.my_list.append(3)
        self.my_list.append(3)
        self.my_list.append(3)
        self.my_list.append(7)
        self.my_list.append(-17)
        self.assertEqual(repr(self.my_list), '[4, 3, 3, 3, 7, -17]')
        self.my_list.remove_duplicates()
        self.assertEqual(repr(self.my_list), '[4, 3, 7, -17]')
Exemplo n.º 12
0
        current.next = previous
        previous = current
        current = next

    return previous


def reverse_linked_list_recursive(head):

    if head.next is None:
        return head

    temp = reverse_linked_list_recursive(head.next)
    head.next.next = head
    head.next = None

    return temp


if __name__ == '__main__':

    lst = SinglyLinkedList()
    lst.append('0')
    lst.append('1')
    lst.append('2')
    lst.append('3')
    lst.head = reverse_linked_list(lst.head)
    lst.head = reverse_linked_list_recursive(lst.head)

    print(lst)
    test_stack.add_tail(2)
    test_stack.add_tail(3)
    print(test_stack)
    test_stack.remove_tail()
    print(test_stack)
    test_stack.remove_tail()
    test_stack.remove_tail()
    print(test_stack)

    print()
    print(
        'Stack implementation using collections.deque (TC append() - O(1), TC pop() - O(1))'
    )
    test_stack = deque()
    print(test_stack)
    test_stack.append(1)
    test_stack.append(2)
    test_stack.append(3)
    print(test_stack)
    test_stack.pop()
    print(test_stack)
    test_stack.pop()
    test_stack.pop()
    print(test_stack)

    print()
    print(
        'Stack implementation using queue.LifoQueue (TC put() - O(1), TC get() - O(1))'
    )
    test_stack = LifoQueue()
    print(test_stack.qsize())
Exemplo n.º 14
0
from singly_linked_list import SinglyLinkedList

my_list = SinglyLinkedList()
my_list.print()

for i in range(10):
    my_list.append(i + 1)

my_list.print()

for i in range(10):
    my_list.prepend(i + 1)

my_list.print()

value = my_list.access(3)
print('my_list.access(3) = ' + str(value))

my_list.insert(8, 128)
my_list.print()

my_list.remove(4)
my_list.print()

my_list.set_head(10)
my_list.print()
Exemplo n.º 15
0
 def test_insert(self):
     ls = SinglyLinkedList()
     ls.append("a").append("b").append("d")
     ls.insert(2, "c")
     self.assertEqual("c", ls.head.next.next.value)
Exemplo n.º 16
0
 def test_prepend(self):
     ls = SinglyLinkedList()
     ls.append("b").append("c")
     ls.prepend("a")
     self.assertEqual("a", ls.head.value)
Exemplo n.º 17
0
def test_singly_linked_list_append(N):
    print("Testing SinglyLinkedList")
    l = SinglyLinkedList()

    print(f"Appending {int(N)} values")
    [l.append(i) for i in range(int(N))]
Exemplo n.º 18
0
 def test_append_start_filled(self):
     linkedlist = SinglyLinkedList([1, 2, 3, 4, 5])
     linkedlist.append(6)
     assert linkedlist[5] == 6
     linkedlist.append("hello")
     assert linkedlist[6] == "hello"
Exemplo n.º 19
0
    test_queue.add_tail(2)
    test_queue.add_tail(3)
    print(test_queue)
    test_queue.remove_head()
    print(test_queue)
    test_queue.remove_head()
    test_queue.remove_head()
    print(test_queue)

    print()
    print(
        'Queue implementation using collections.deque (TC append() - O(1), TC popleft() - O(1))'
    )
    test_queue = deque()
    print(test_queue)
    test_queue.append(1)
    test_queue.append(2)
    test_queue.append(3)
    print(test_queue)
    test_queue.popleft()
    print(test_queue)
    test_queue.popleft()
    test_queue.popleft()
    print(test_queue)

    print()
    print(
        'Queue implementation using queue.Queue (TC put() - O(1), TC get() - O(1))'
    )
    test_queue = Queue()
    print(test_queue.qsize())
Exemplo n.º 20
0
 def test_append(self):
     ls = SinglyLinkedList()
     ls.append("a").append("b")
     self.assertEqual(2, ls.length)
     self.assertEqual("a", ls.head.value)
     self.assertEqual("b", ls.head.next.value)