mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-04-29 20:26:07 -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
|
||||
else:
|
||||
self.left = self.left.add(value)
|
||||
return self # without this, it doesn't add!
|
||||
return self
|
||||
|
||||
def search(self, item):
|
||||
if self.value == item:
|
||||
|
Loading…
x
Reference in New Issue
Block a user