コード例 #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
コード例 #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])
コード例 #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()
コード例 #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)))
コード例 #5
0
ファイル: stack.py プロジェクト: M-Lambda/Data-Structures
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
コード例 #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')
コード例 #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
コード例 #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')
コード例 #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
コード例 #10
0
ファイル: test.py プロジェクト: SazzadR/pyano
 def test_find(self):
     ls = SinglyLinkedList()
     ls.append("a").append("b").append("c")
     self.assertIsInstance(ls.find("c"), Node)
     self.assertIsNone(ls.find("d"))
コード例 #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]')
コード例 #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)
コード例 #13
0
    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())
コード例 #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()
コード例 #15
0
ファイル: test.py プロジェクト: SazzadR/pyano
 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)
コード例 #16
0
ファイル: test.py プロジェクト: SazzadR/pyano
 def test_prepend(self):
     ls = SinglyLinkedList()
     ls.append("b").append("c")
     ls.prepend("a")
     self.assertEqual("a", ls.head.value)
コード例 #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))]
コード例 #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"
コード例 #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())
コード例 #20
0
ファイル: test.py プロジェクト: SazzadR/pyano
 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)