Linked Lists/Python/Single
From charlesreid1
Contents
Notes
Interface
Linked list class implements the following interface:
- length
- is empty
- to string
- addFront
- addBack
- removeFront
Implementation
Basic implementation, nothing fancy: https://git.charlesreid1.com/cs/python/src/master/lists/linked-lists/LinkedList.py
Exceptions
class Empty(Exception): pass
Linked list nodes
class Node: """ Linked List Node class. """ def __init__(self,data,next_node=None): self.data = data self.next_node = next_node def __str__(self): return str(self.data) def get_next(self): return self.next_node def set_next(self,new_next): self.next_node = new_next def get_data(self): return self.data
Core class
class LinkedList: """ Linked list class. Exposes the following interface: - size - is empty - addFront - addBack - removeFront """ def __init__(self): self.size = 0 self.head = None def __len__(self): return self.size def __str__(self): if(self.is_empty()): return str([]) sb = [] runner = self.head while(runner!=None): sb.append(str(runner)) runner = runner.get_next() return str(sb) def is_empty(self): return self.size==0 def add_front(self,e): n = Node(e) # point to old head: oldhead = self.head n.set_next(oldhead) # set new head: self.head = n self.size += 1 def add_rear(self,e): if(self.is_empty()): add_front(e) return # make next tail n = Node(e) # find old tail runner = head while(runner.get_next()!=None): runner = runner.get_next() # set old tail to point to new tail runner.set_next(n) self.size += 1 def remove_front(self): if(self.is_empty()): raise Empty # save old and new oldhead = self.head newhead = self.head.get_next() # set new head self.head = newhead # return old head data return oldhead.get_data()
driver unit test
Simple driver unit test to ensure this thing works as expected:
if __name__=="__main__": z = LinkedList() print("Is it empty?") print(z.is_empty()) z.add_front(10) print("Added to front:") print(len(z)) z.add_front(20) print("Added to front:") print(len(z)) z.add_front(30) z.add_front(40) z.add_front(50) z.add_front(60) print("Added to front:") print(len(z)) print("Is it empty?") print(z.is_empty()) print("About to remove from front:") print(z) z.remove_front() z.remove_front() z.remove_front() z.remove_front() print("Removed from front:") print(z) print("Here is the list:") print(z)
Flags
Data Structures Part of Computer Science Notes
This is the staging ground for computer science notes as part of the 2017 CS Study Plan.
Classes of data structures: Abstract Data Types Array-based and Link-based memory management: ArrayLists and Linked Lists Algorithmic Analysis of Data Structures: Algorithmic Analysis of Data Structures Advanced data structures: Advanced Data Structures
|
Arrays Part of Computer Science Notes
Series on Data Structures Python: Arrays/Python · Arrays/Python/Sizeof · Arrays/Python/AppendCost · Arrays/Python/CaesarCipher · Arrays/Python/CompactArrays · Arrays/Python/DynamicArray Java: Arrays/Java · Arrays/Java/CaesarCipher · Arrays/Java/FisherYates · Arrays/Java/PythonList · Arrays/Java/Repeatedly_Remove Categories: Category:Python Arrays
|
Stacks and Queues Part of Computer Science Notes
Series on Data Structures
Stacks and Queues: Python StacksQueues/Python · StacksQueues/Python/ArrayStack · StacksQueues/Python/ArrayQueue · StacksQueues/Python/ArrayDeque StacksQueues/Python/LinkedStack
Stacks and Queues: Java StacksQueues/Java · StacksQueues/Java/ArrayStack · StacksQueues/Java/ArrayQueue · StacksQueues/Java/ArrayQueueFS · StacksQueues/Java/ArrayDeque StacksQueues/Java/LinkedStack · StacksQueues/Java/LinkedQueue · StacksQueues/Java/LinkedDeque
Applications Postfix_Expressions#Stacks · StacksQueues/Subsets · StacksQueues/Subsets/Java
|
Priority Queues and Heaps Part of Computer Science Notes
Series on Data Structures
Java: Priority Queues/Java · Priority Queues/ADT · Priority Queues/Sorted · Priority Queues/Unsorted Performance: Priority Queues/Timing and Performance Applications: Maximum Oriented Priority Queue · Priority Queues/Stack
Priority Queues/Heap · Priority Queues/Java · Priority Queues/Comparators
|
Linked List Part of Computer Science Notes
Series on Data Structures Java: Linked Lists/Java · Linked Lists/Java/Single · Linked Lists/Java/Double · Linked Lists/Java/Circular Performance: Linked Lists/Java/Timing · Linked Lists/Java/Reverse Python: Linked Lists/Python · Linked Lists/Python/Single
|
Trees Part of Computer Science Notes
Series on Data Structures Abstract data type: Trees/ADT Concrete implementations: Trees/LinkedTree · Trees/ArrayTree · SimpleTree
Tree Traversal Preorder traversal: Trees/Preorder Postorder traversal: Trees/Postorder In-Order traversal: Binary Trees/Inorder Breadth-First Search: BFS Breadth-First Traversal: BFT Depth-First Search: DFS Depth-First Traversal: DFT OOP Principles for Traversal: Tree Traversal/OOP · Tree Traversal/Traversal Method Template Tree operations: Trees/Operations Performance · Trees/Removal
Tree Applications Finding Minimum in Log N Time: Tree/LogN Min Search
Abstract data type: Binary Trees/ADT Concrete implementations: Binary Trees/LinkedBinTree · Binary Trees/ArrayBinTree Binary Trees/Cheat Sheet · Binary Trees/OOP · Binary Trees/Implementation Notes
|
Search Trees Part of Computer Science Notes
Series on Data Structures
Binary Search Trees · Balanced Search Trees Trees/OOP · Search Trees/OOP · Tree Traversal/OOP · Binary Trees/Inorder
(Note that heaps are also value-sorting trees with minimums at the top. See Template:PriorityQueuesFlag and Priority Queues.)
|
Maps and Dictionaries Part of Computer Science Notes
Series on Data Structures
Maps/Dictionaries Maps · Maps/ADT · Maps in Java · Maps/OOP · Maps/Operations and Performance Map implementations: Maps/AbstractMap · Maps/UnsortedArrayMap · Maps/SortedArrayMap Dictionary implementations: Dictionaries/LinkedDict · Dictionaries/ArrayDict
Hashes Hash Maps/OOP · Hash Maps/Operations and Performance Hash Maps/Dynamic Resizing · Hash Maps/Collision Handling with Chaining Hash functions: Hash Functions · Hash Functions/Cyclic Permutation Hash map implementations: Hash Maps/AbstractHashMap · Hash Maps/ChainedHashMap
Skip Lists · Java/ConcurrentSkipList · Java implementations: SkipList
Sets Sets · Sets/ADT · Sets in Java · Sets/OOP · Multisets
|