Skip to main content

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


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)

Uploaded Source

Built Distribution

simpledsa-0.1.0-py3-none-any.whl (6.6 kB view details)

Uploaded Python 3

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

Hashes for simpledsa-0.1.0.tar.gz
Algorithm Hash digest
SHA256 aaad5c40f74c198259c0693b414ea977e5fa0ed0b0a988ec05eb4e3d46acfcb1
MD5 f48209040e4f7ae56266f4631d29ca49
BLAKE2b-256 c616b2081de445fec2cc4e64b7226fa6fe18fe11ab6ef35dddcd91a6f22b9102

See more details on using hashes here.

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

Hashes for simpledsa-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b685b9c17c3ce9fca1071cb15d89c74952d5ef3fa37172ad56a07e189627405f
MD5 5bb13ac62348f154d1deee12c980e5a2
BLAKE2b-256 f942da0aca5dbc490130d174d4dc8f8ca7c5318dec8eef4ec5427309e4c05a78

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page