structlinks

Easily Access and visualize different Data structures including Linked lists, Doubly Linked lists, Binary trees, Graphs, Stacks, Queues, and Matrices.

View on GitHub

DoublyLinkedLists

Initializing a Doubly Linked list

You can initialize a Doubly linked list by simply creating a Doubly linked list object and optionally pass in a list object witch would contain the initial list items.

from structlinks.DataStructures import DoublyLinkedList

# create an empty linked list
lst = DoublyLinkedList()
# create a linked list with initial values
lst = DoublyLinkedList([1, 10, -3, 5])

Basic Operations

The idea for all of the basic operations is similar to that of Linked lists, which were taken from the University of Toronto’s CSC111 course.

from structlinks.DataStructures import DoublyLinkedList

lst = DoublyLinkedList([1, 10, 3, 5])

# print the list
print(lst)  # this will print : [1 <--> 10 <--> 3 <--> 5]

# Length of the list
length = len(lst)  # length = 4

# Append items
lst.append(2)  # After the call, lst = [1 <--> 10 <--> 3 <--> 5 <--> 2]

# Insert items
lst.insert(0, 200)  # After the call, lst = [200 <--> 1 <--> 10 <--> 3 <--> 5 <--> 2]

# Get & Set item by index
item = lst[1]  # here item = 10
lst[2] = 100  # set element at index 2 to be 100, so lst = [200 <--> 1 <--> 100 <--> 3 <--> 5 <--> 2]

# Slicing the list
part = lst[2:]  # here part = [100 <--> 3 <--> 5 <--> 2]

# Removing element
# 1) by index
popped = lst.pop(0)  # here popped = 200, and lst = [1 <--> 100 <--> 3 <--> 5 <--> 2]
# 2) by item value
lst.remove(1) # now list lst = [100 <--> 3 <--> 5 <--> 2]

# Checking for Element
cond1 = 2 in lst  # here cond1 is True as 2 is in lst
cond2 = 1 in lst  # here cond2 is False as 1 is not in lst

# Adding to Doubly Linked Lists
lst1 = DoublyLinkedList([1, 10, 3, 5])
lst2 = DoublyLinkedList([2, 100, 4, 0])
lst3 = lst1 + lst2  # lst3 = [1 <--> 10 <--> 3 <--> 5 <--> 2 <--> 100 <--> 4 <--> 0]

# Count of an item
count = lst.count(2)  # count = 1 as 2 appears only once

# Index of an item (return -1 if element not in lst)
index = lst.index(100)  # index = 0 as 100 is at index 0

# Equating to lists
cond3 = lst1 == lst2  # cond3 = False as lst1 and lst2 have different elements

# Sort the list
lst.sort()  # lst will be mutated to [2 <--> 3 <--> 5 <--> 100]

# Extend the list
lst.extend(lst2)  # lst will be mutated to [2 <--> 3 <--> 5 <--> 100 <--> 2 <--> 100 <--> 4 <--> 0]

# Copy the list
lst4 = lst.copy()  # lst4 is a copy of lst

Additional Operations

Inverting a Doubly Linked List

from structlinks.DataStructures import DoublyLinkedList

lst = DoublyLinkedList([1, 10, 3, 5])

print(lst)
# Output:
# [1 <--> 10 <--> 3 <--> 5]

lst.invert()  # mutate lst

print(lst)
# Output:
# [5 <--> 3 <--> 10 <--> 1]

Mapping functions to a Doubly Linked List

from structlinks.DataStructures import DoublyLinkedList

lst = DoublyLinkedList([1, 10, 3, 5])

# Map function f(x) = x^2
new_lst = lst.map(lambda x: x ** 2)

print(new_lst)
# Output:
# [25 <--> 9 <--> 100 <--> 1]

Inbuilt Mapping functions

from structlinks.DataStructures import DoublyLinkedList

lst = DoublyLinkedList([1.1, 10.5, -3.7, 5.2])

#abs
abs_lst = lst.abs()

print(abs_lst)
# Output:
# [1.1 <--> 10.5 <--> 3.7 <--> 5.2]

# floor
floor_lst = lst.floor()

print(floor_lst)
# Output:
# [1.0 <--> 10.0 <--> 3.0 <--> 5.0]

# ceil
ceil_lst = lst.ceil()

print(ceil_lst)
# Output:
# [2.0 <--> 11.0 <--> 4.0 <--> 6.0]