mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-04-30 04:36:08 -04:00
Fun day, but i miss rust already 😅 (#36)
This commit is contained in:
parent
0f455a0322
commit
5732cfcc61
82
linked_lists/LinkedListFIFO.py
Normal file
82
linked_lists/LinkedListFIFO.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# author: bt3gl
|
||||||
|
|
||||||
|
class Node():
|
||||||
|
"""Implementation of a Node for a binary tree"""
|
||||||
|
|
||||||
|
def __init__(self, value=None):
|
||||||
|
self.value = value
|
||||||
|
self.left = None
|
||||||
|
self.right = None
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
"""Prints the node"""
|
||||||
|
return f'{self.value}'
|
||||||
|
|
||||||
|
|
||||||
|
class LinkedListFIFO:
|
||||||
|
'''A Linked-List class with a first-in-first-out logic'''
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.head = None
|
||||||
|
self.tail = None
|
||||||
|
self.length = 0
|
||||||
|
|
||||||
|
def add_first(self, value):
|
||||||
|
self.length = 1
|
||||||
|
node = Node(value)
|
||||||
|
self.head = node
|
||||||
|
self.tail = node
|
||||||
|
|
||||||
|
def delete_first(self):
|
||||||
|
self.length = 0
|
||||||
|
self.head = None
|
||||||
|
self.tail = None
|
||||||
|
|
||||||
|
def add(self, value):
|
||||||
|
self.length += 1
|
||||||
|
node = Node(value)
|
||||||
|
if self.tail:
|
||||||
|
self.tail.right = node
|
||||||
|
self.tail = node
|
||||||
|
|
||||||
|
def _delete(self, node):
|
||||||
|
if not self.head or not self.head.pointer:
|
||||||
|
self.delete_first()
|
||||||
|
else:
|
||||||
|
node, prev, i = self._find(index)
|
||||||
|
if i == index and node:
|
||||||
|
self.length -= 1
|
||||||
|
if i == 0 or not prev:
|
||||||
|
self.head = node.pointer
|
||||||
|
else:
|
||||||
|
prev.pointer = node.pointer
|
||||||
|
if not self.tail == node:
|
||||||
|
self.tail = prev
|
||||||
|
|
||||||
|
def find(self, index):
|
||||||
|
prev = None
|
||||||
|
node = self.head
|
||||||
|
i = 0
|
||||||
|
while node and i < index:
|
||||||
|
prev = node
|
||||||
|
node = node.right
|
||||||
|
i += 1
|
||||||
|
return node, prev, i
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
print('Linked List FIFO')
|
||||||
|
ll = LinkedListFIFO()
|
||||||
|
print(f'Add 1: {ll.add(1)}')
|
||||||
|
print(f'Add 2: {ll.add(2)}')
|
||||||
|
print(f'Add 3: {ll.add(3)}')
|
||||||
|
|
||||||
|
print(f'Length: {ll.length}')
|
||||||
|
print(f'Find 1: {ll.find(1)}')
|
||||||
|
|
||||||
|
print(f'Delete 1: {ll._delete(1)}')
|
||||||
|
print(f'Length: {ll.length}')
|
||||||
|
print(f'Find 1: {ll.find(1)}')
|
@ -0,0 +1,23 @@
|
|||||||
|
## Linked List
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
### `LinkedListFIFO.py`
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
```python
|
||||||
|
python LinkedListFIFO.py
|
||||||
|
|
||||||
|
Linked List FIFO
|
||||||
|
Add 1: None
|
||||||
|
Add 2: Nonew
|
||||||
|
Add 3: None
|
||||||
|
Length: 3
|
||||||
|
Find 1: (None, None, 0)
|
||||||
|
Delete 1: None
|
||||||
|
Length: 0
|
||||||
|
Find 1: (None, None, 0)
|
||||||
|
```
|
||||||
|
|
||||||
|
<br>
|
@ -20,7 +20,7 @@ class Node(object):
|
|||||||
self.right = new_node
|
self.right = new_node
|
||||||
else:
|
else:
|
||||||
self.left = self.left.add(value)
|
self.left = self.left.add(value)
|
||||||
return self # without this, it doesn't add!
|
return self
|
||||||
|
|
||||||
def search(self, item):
|
def search(self, item):
|
||||||
if self.value == item:
|
if self.value == item:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user