A simple and intuitive implementation of data structures and algorithms
Project description
SimpleDSA
A simple and intuitive implementation of common data structures and algorithms in Python.
Features
- Flexible Priority Queue implementation supporting both min-heap and max-heap behavior
- Support for items with implicit or explicit priorities
- More features coming soon!
Installation
pip install simpledsa
Usage
Priority Queue
from simpledsa import PriorityQueue
# Create a min-heap priority queue (smaller values have higher priority)
pq = PriorityQueue()
# Create a max-heap priority queue (larger values have higher priority)
max_pq = PriorityQueue(lambda x: -x)
# Using items as their own priority
pq.push(3)
pq.push(1)
pq.push(4)
print(pq.pop()) # Output: 1 (smallest value has highest priority)
print(pq.pop()) # Output: 3
print(pq.pop()) # Output: 4
# Using explicit priorities
task_queue = PriorityQueue()
task_queue.push("Write docs", priority=2)
task_queue.push("Fix bug", priority=1)
task_queue.push("Add feature", priority=3)
print(task_queue.pop()) # Output: "Fix bug" (priority 1)
print(task_queue.pop()) # Output: "Write docs" (priority 2)
print(task_queue.pop()) # Output: "Add feature" (priority 3)
# Check if queue is empty
if not pq:
print("Queue is empty")
# Get length of queue
print(len(pq)) # Output: 0
# Peek at highest priority item without removing it
task_queue.push("Important task", priority=1)
print(task_queue.peek()) # Output: "Important task"
Advanced Usage Examples
Context Manager (with statement)
from simpledsa import PriorityQueue
# Queue is automatically cleared when exiting the with block
with PriorityQueue() as pq:
pq.push("task1", 1)
pq.push("task2", 2)
process_tasks(pq) # process tasks here
# queue is now empty
# Great for temporary task processing
with PriorityQueue() as pq:
pq.extend(tasks)
while pq:
process(pq.pop())
Batch Operations
# Add multiple items at once
pq = PriorityQueue()
pq.extend([1, 2, 3]) # items as their own priorities
pq.extend([("task1", 1), ("task2", 2)]) # (item, priority) pairs
# Create queue from items
pq = PriorityQueue.from_items([1, 2, 3])
# Create queue from (item, priority) pairs
pq = PriorityQueue.from_pairs([("task1", 1), ("task2", 2)])
Iteration
# Non-destructive iteration (keeps items in queue)
pq = PriorityQueue.from_items([3, 1, 4, 1, 5])
for item in pq:
print(item) # prints in priority order: 1, 1, 3, 4, 5
# Destructive iteration (removes items)
for item in pq.pop_all():
process(item) # process items in priority order
Queue Merging
# Merge multiple queues
pq1 = PriorityQueue.from_items([1, 3, 5])
pq2 = PriorityQueue.from_items([2, 4, 6])
merged = PriorityQueue.merge([pq1, pq2])
Priority Functions
from simpledsa import PriorityQueue, priority_functions
# Max heap (larger values have higher priority)
max_pq = PriorityQueue(priority_functions.reverse)
max_pq.extend([1, 2, 3])
print(max_pq.pop()) # 3
# Priority by length
length_pq = PriorityQueue(priority_functions.by_length)
length_pq.extend(["a", "ccc", "bb"])
print(length_pq.pop()) # "a" (shortest)
# Priority by attribute
class Task:
def __init__(self, name, priority):
self.name = name
self.priority = priority
task_pq = PriorityQueue(priority_functions.by_attr('priority'))
tasks = [Task("A", 2), Task("B", 1), Task("C", 3)]
task_pq.extend(tasks)
Features
- Supports both min-heap (default) and max-heap behavior
- Items can serve as their own priority or have explicit priorities
- Stable sorting: items with equal priorities maintain their insertion order
- Standard Python container operations:
len()
, boolean evaluation - O(log n) push and pop operations
- O(1) peek and is_empty operations
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
simpledsa-0.1.0.tar.gz
(7.3 kB
view details)
Built Distribution
File details
Details for the file simpledsa-0.1.0.tar.gz
.
File metadata
- Download URL: simpledsa-0.1.0.tar.gz
- Upload date:
- Size: 7.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aaad5c40f74c198259c0693b414ea977e5fa0ed0b0a988ec05eb4e3d46acfcb1 |
|
MD5 | f48209040e4f7ae56266f4631d29ca49 |
|
BLAKE2b-256 | c616b2081de445fec2cc4e64b7226fa6fe18fe11ab6ef35dddcd91a6f22b9102 |
File details
Details for the file simpledsa-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: simpledsa-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b685b9c17c3ce9fca1071cb15d89c74952d5ef3fa37172ad56a07e189627405f |
|
MD5 | 5bb13ac62348f154d1deee12c980e5a2 |
|
BLAKE2b-256 | f942da0aca5dbc490130d174d4dc8f8ca7c5318dec8eef4ec5427309e4c05a78 |