Learn how to implement stacks in Python using lists, OOP, and deque from collections.
# Stack using list
stack = []
stack.append(1)
stack.append(2)
stack.append(3)
print(stack.pop())
print(stack)
# Stack OOP
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop() if self.items else None
def peek(self):
return self.items[-1] if self.items else None
def is_empty(self):
return not self.items
def size(self):
return len(self.items)
s = Stack()
s.push(10)
s.push(20)
print(s.pop())
print(s.peek())
# Stack using deque
from collections import deque
d = deque()
d.append('a')
d.append('b')
print(d.pop())
print(d)
Implement queues in Python using lists and OOP.
# Queue using list
queue = []
queue.append(1)
queue.append(2)
queue.append(3)
print(queue.pop(0))
print(queue)
# Queue OOP
class Queue:
def __init__(self):
self.items = []
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
return self.items.pop(0) if self.items else None
def is_empty(self):
return not self.items
def size(self):
return len(self.items)
q = Queue()
q.enqueue(10)
q.enqueue(20)
print(q.dequeue())
print(q.items)
Explore linked lists in Python: basic, OOP, singly, doubly, and circular linked lists.
# Singly Linked List Node
class Node:
def __init__(self, data):
self.data = data
self.next = None
# Singly Linked List
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
new = Node(data)
if not self.head:
self.head = new
return
curr = self.head
while curr.next:
curr = curr.next
curr.next = new
def print_list(self):
curr = self.head
while curr:
print(curr.data, end=' -> ')
curr = curr.next
print('None')
ll = LinkedList()
ll.append(1)
ll.append(2)
ll.append(3)
ll.print_list()
# Doubly Linked List Node
class DNode:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
# Doubly Linked List
class DoublyLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new = DNode(data)
if not self.head:
self.head = new
return
curr = self.head
while curr.next:
curr = curr.next
curr.next = new
new.prev = curr
def print_list(self):
curr = self.head
while curr:
print(curr.data, end=' <-> ')
curr = curr.next
print('None')
dl = DoublyLinkedList()
dl.append(1)
dl.append(2)
dl.append(3)
dl.print_list()
# Circular Linked List
class CNode:
def __init__(self, data):
self.data = data
self.next = None
class CircularLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new = CNode(data)
if not self.head:
self.head = new
new.next = new
return
curr = self.head
while curr.next != self.head:
curr = curr.next
curr.next = new
new.next = self.head
def print_list(self):
curr = self.head
if not curr:
return
while True:
print(curr.data, end=' -> ')
curr = curr.next
if curr == self.head:
break
print('(head)')
cll = CircularLinkedList()
cll.append(1)
cll.append(2)
cll.append(3)
cll.print_list()
Learn about binary trees in Python. This is a playlist covering all major tree topics.
# Binary Tree Node
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def inorder(root):
if root:
inorder(root.left)
print(root.val, end=' ')
inorder(root.right)
def preorder(root):
if root:
print(root.val, end=' ')
preorder(root.left)
preorder(root.right)
def postorder(root):
if root:
postorder(root.left)
postorder(root.right)
print(root.val, end=' ')
# Build a tree
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
print('Inorder:')
inorder(root)
print('\nPreorder:')
preorder(root)
print('\nPostorder:')
postorder(root)