16
Day 16: Advanced Data Structures
Chapter 16 • Advanced
50 min
Advanced data structures help you solve complex problems efficiently. They provide better ways to organize and access data.
What are Advanced Data Structures?
Advanced data structures are specialized ways to store and organize data that offer specific advantages for certain operations.
Key Advanced Structures:
- Stacks - Last In, First Out (LIFO)
- Queues - First In, First Out (FIFO)
- Deques - Double-ended queues
- Heaps - Priority queues
- Linked Lists - Dynamic data structures
- Trees - Hierarchical data organization
- Graphs - Network relationships
Stack Operations:
- push() - Add element to top
- pop() - Remove element from top
- peek() - View top element
- isEmpty() - Check if empty
Queue Operations:
- enqueue() - Add element to rear
- dequeue() - Remove element from front
- front() - View front element
- isEmpty() - Check if empty
Benefits:
- Efficient Operations - Fast access and modification
- Problem Solving - Solve complex algorithms
- Memory Management - Optimize memory usage
- Real-world Applications - Used in many systems
Hands-on Examples
Stack and Queue Implementation
# Stack implementation using list
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
return None
def peek(self):
if not self.is_empty():
return self.items[-1]
return None
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
# Queue implementation using list
class Queue:
def __init__(self):
self.items = []
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
if not self.is_empty():
return self.items.pop(0)
return None
def front(self):
if not self.is_empty():
return self.items[0]
return None
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
# Test Stack
print("Stack Operations:")
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(f"Stack: {stack.items}")
print(f"Peek: {stack.peek()}")
print(f"Pop: {stack.pop()}")
print(f"Stack after pop: {stack.items}")
# Test Queue
print("\nQueue Operations:")
queue = Queue()
queue.enqueue('A')
queue.enqueue('B')
queue.enqueue('C')
print(f"Queue: {queue.items}")
print(f"Front: {queue.front()}")
print(f"Dequeue: {queue.dequeue()}")
print(f"Queue after dequeue: {queue.items}")This example shows how to implement basic stack and queue data structures using Python lists. Stacks use LIFO while queues use FIFO principles.