Files
MSCS532_Assignment6/examples/data_structures_demo.py
2025-11-23 15:59:23 -05:00

242 lines
5.1 KiB
Python

"""
Demonstration of elementary data structures.
This script demonstrates the usage of arrays, stacks, queues, linked lists,
and trees.
Author: Carlos Gutierrez
Course: MSCS532 - Data Structures and Algorithms
"""
import sys
import os
# Add parent directory to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from src.data_structures import (
DynamicArray, Matrix, Stack, Queue, LinkedList, Tree
)
def demo_dynamic_array():
"""Demonstrate DynamicArray operations."""
print("=" * 60)
print("Dynamic Array Demo")
print("=" * 60)
arr = DynamicArray()
# Append elements
print("Appending elements: 1, 2, 3, 4, 5")
for i in range(1, 6):
arr.append(i)
print(f"Array: {arr}")
print(f"Length: {len(arr)}")
print()
# Insert element
print("Inserting 10 at index 2")
arr.insert(2, 10)
print(f"Array: {arr}")
print()
# Delete element
print("Deleting element at index 3")
value = arr.delete(3)
print(f"Deleted value: {value}")
print(f"Array: {arr}")
print()
# Search
print(f"Searching for 10: index {arr.search(10)}")
print(f"Searching for 99: index {arr.search(99)}")
print()
def demo_matrix():
"""Demonstrate Matrix operations."""
print("=" * 60)
print("Matrix Demo")
print("=" * 60)
matrix = Matrix(3, 4)
# Fill matrix
value = 1
for i in range(3):
for j in range(4):
matrix[i, j] = value
value += 1
print("3x4 Matrix:")
print(matrix)
print()
print(f"Element at (1, 2): {matrix[1, 2]}")
print()
def demo_stack():
"""Demonstrate Stack operations."""
print("=" * 60)
print("Stack Demo")
print("=" * 60)
stack = Stack()
# Push elements
print("Pushing elements: 1, 2, 3, 4, 5")
for i in range(1, 6):
stack.push(i)
print(f"Stack: {stack}")
print(f"Size: {stack.size()}")
print()
# Peek
print(f"Top element (peek): {stack.peek()}")
print()
# Pop elements
print("Popping elements:")
while not stack.is_empty():
print(f" Popped: {stack.pop()}")
print()
def demo_queue():
"""Demonstrate Queue operations."""
print("=" * 60)
print("Queue Demo")
print("=" * 60)
queue = Queue()
# Enqueue elements
print("Enqueuing elements: 1, 2, 3, 4, 5")
for i in range(1, 6):
queue.enqueue(i)
print(f"Queue: {queue}")
print(f"Size: {queue.size()}")
print()
# Peek
print(f"Front element (peek): {queue.peek()}")
print()
# Dequeue elements
print("Dequeuing elements:")
while not queue.is_empty():
print(f" Dequeued: {queue.dequeue()}")
print()
def demo_linked_list():
"""Demonstrate LinkedList operations."""
print("=" * 60)
print("Linked List Demo")
print("=" * 60)
ll = LinkedList()
# Append elements
print("Appending elements: 1, 2, 3, 4, 5")
for i in range(1, 6):
ll.append(i)
print(f"Linked List: {ll}")
print(f"Length: {len(ll)}")
print()
# Prepend element
print("Prepending 0")
ll.prepend(0)
print(f"Linked List: {ll}")
print()
# Insert element
print("Inserting 10 at index 3")
ll.insert(3, 10)
print(f"Linked List: {ll}")
print()
# Get element
print(f"Element at index 2: {ll.get(2)}")
print()
# Search
print(f"Searching for 10: index {ll.search(10)}")
print(f"Searching for 99: index {ll.search(99)}")
print()
# Delete element
print("Deleting element at index 3")
value = ll.delete(3)
print(f"Deleted value: {value}")
print(f"Linked List: {ll}")
print()
def demo_tree():
"""Demonstrate Tree operations."""
print("=" * 60)
print("Tree Demo")
print("=" * 60)
tree = Tree(1)
# Build tree
print("Building tree:")
print(" 1")
print(" ├── 2")
print(" │ ├── 4")
print(" │ └── 5")
print(" └── 3")
print(" └── 6")
tree.insert(1, 2)
tree.insert(1, 3)
tree.insert(2, 4)
tree.insert(2, 5)
tree.insert(3, 6)
print()
# Search
print("Searching for values:")
for value in [1, 2, 3, 4, 5, 6, 7]:
found = tree.search(value)
print(f" {value}: {'Found' if found else 'Not found'}")
print()
# Traversal
print("Preorder traversal:", tree.traverse_preorder())
print("Postorder traversal:", tree.traverse_postorder())
print()
# Height
print(f"Tree height: {tree.height()}")
print()
# Delete
print("Deleting node 2")
tree.delete(2)
print("Preorder traversal after deletion:", tree.traverse_preorder())
print()
if __name__ == "__main__":
print("\n" + "=" * 60)
print("Elementary Data Structures Demonstration")
print("=" * 60 + "\n")
demo_dynamic_array()
demo_matrix()
demo_stack()
demo_queue()
demo_linked_list()
demo_tree()
print("=" * 60)
print("Demo Complete!")
print("=" * 60)