Creating a stack using class in Python
class Stack:
def __init__(self):
[Link] = []
def push(self, element):
[Link](element)
def pop(self):
if [Link]():
return "Stack is empty"
return [Link]()
def peek(self):
if [Link]():
return "Stack is empty"
return [Link][-1]
def isEmpty(self):
return len([Link]) == 0
def size(self):
return len([Link])
# Create a stack
myStack = Stack()
[Link]('A')
[Link]('B')
[Link]('C')
print("Stack: ", [Link])
print("Pop: ", [Link]())
print("Stack after Pop: ", [Link])
print("Peek: ", [Link]())
print("isEmpty: ", [Link]())
print("Size: ", [Link]())
Using a Python class as a queue:
1
class Queue:
def __init__(self):
[Link] = []
def enqueue(self, element):
[Link](element)
def dequeue(self):
if [Link]():
return "Queue is empty"
return [Link](0)
def peek(self):
if [Link]():
return "Queue is empty"
return [Link][0]
def isEmpty(self):
return len([Link]) == 0
def size(self):
return len([Link])
# Create a queue
myQueue = Queue()
[Link]('A')
[Link]('B')
[Link]('C')
print("Queue: ", [Link])
print("Peek: ", [Link]())
print("Dequeue: ", [Link]())
print("Queue after Dequeue: ", [Link])
print("isEmpty: ", [Link]())
print("Size: ", [Link]())
2
Traversal of a singly linked list in Python:
class Node:
def __init__(self, data):
[Link] = data
[Link] = None
def traverseAndPrint(head):
currentNode = head
while currentNode:
print([Link], end=" -> ")
currentNode = [Link]
print("null")
node1 = Node(7)
node2 = Node(11)
node3 = Node(3)
node4 = Node(2)
node5 = Node(9)
[Link] = node2
[Link] = node3
[Link] = node4
[Link] = node5
traverseAndPrint(node1)
DELETING IN THE SIGNLY LINKED LIST
class Node:
def __init__(self, data):
[Link] = data
[Link] = None
def traverseAndPrint(head):
currentNode = head
while currentNode:
print([Link], end=" -> ")
currentNode = [Link]
print("null")
def deleteSpecificNode(head, nodeToDelete):
if head == nodeToDelete:
return [Link]
currentNode = head
while [Link] and [Link] != nodeToDelete:
currentNode = [Link]
3
if [Link] is None:
return head
[Link] = [Link]
return head
node1 = Node(7)
node2 = Node(11)
node3 = Node(3)
node4 = Node(2)
node5 = Node(9)
[Link] = node2
[Link] = node3
[Link] = node4
[Link] = node5
print("Before deletion:")
traverseAndPrint(node1)
# Delete node4
node1 = deleteSpecificNode(node1, node4)
print("\nAfter deletion:")
traverseAndPrint(node1)
Inserting a node in a singly linked list in Python:
class Node:
def __init__(self, data):
[Link] = data
[Link] = None
def traverseAndPrint(head):
currentNode = head
while currentNode:
print([Link], end=" -> ")
currentNode = [Link]
print("null")
def insertNodeAtPosition(head, newNode, position):
if position == 1:
[Link] = head
return newNode
currentNode = head
for _ in range(position - 2):
if [Link] is None:
break
4
currentNode = [Link]
[Link] = [Link]
[Link] = newNode
return head
node1 = Node(7)
node2 = Node(3)
node3 = Node(2)
node4 = Node(9)
[Link] = node2
[Link] = node3
[Link] = node4
print("Original list:")
traverseAndPrint(node1)
# Insert a new node with value 97 at position 2
newNode = Node(97)
node1 = insertNodeAtPosition(node1, newNode, 2)
print("\nAfter insertion:")
traverseAndPrint(node1)
Implement Quick Sort Method
def partition(array, low, high):
pivot = array[high]
i = low - 1
for j in range(low, high):
if array[j] <= pivot:
i += 1
array[i], array[j] = array[j], array[i]
array[i+1], array[high] = array[high], array[i+1]
return i+1
def quicksort(array, low=0, high=None):
if high is None:
high = len(array) - 1
if low < high:
pivot_index = partition(array, low, high)
quicksort(array, low, pivot_index-1)
quicksort(array, pivot_index+1, high)
mylist = [64, 34, 25, 5, 22, 11, 90, 12]
quicksort(mylist)
print(mylist) Output: [5, 11, 12, 22, 25, 34, 64, 90]
5
Implementing the Merge Sort algorithm in Python:
def mergeSort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
leftHalf = arr[:mid]
rightHalf = arr[mid:]
sortedLeft = mergeSort(leftHalf)
sortedRight = mergeSort(rightHalf)
return merge(sortedLeft, sortedRight)
def merge(left, right):
result = []
i=j=0
while i< len(left) and j < len(right):
if left[i] < right[j]:
[Link](left[i])
i += 1
else:
[Link](right[j])
j += 1
[Link](left[i:])
[Link](right[j:])
return result
mylist = [3, 7, 6, -10, 15, 23.5, 55, -13]
mysortedlist = mergeSort(mylist)
print("Sorted array:", mysortedlist)
6
defshell_sort(arr):
n = len(arr)
interval = n // 2
while interval > 0:
fori in range(interval, n):
temp = arr[i]
j=i
# Compare elements separated by interval
while j >= interval and arr[j - interval] > temp:
arr[j] = arr[j - interval]
j -= interval
arr[j] = temp
# Reduce interval by half
interval //= 2
# Test the shell sort algorithm
numbers = [45, 31, 62, 12, 89, 5, 9, 8]
print("Original array:")
print(numbers)
shell_sort(numbers)
print("\nArray after Shell Sort:")
print(numbers)
7
CREATE BINARY TREE IN PYTHON
class TreeNode:
def __init__(self, data):
[Link] = data
[Link] = None
[Link] = None
root = TreeNode('R')
nodeA = TreeNode('A')
nodeB = TreeNode('B')
nodeC = TreeNode('C')
nodeD = TreeNode('D')
nodeE = TreeNode('E')
nodeF = TreeNode('F')
nodeG = TreeNode('G')
[Link] = nodeA
[Link] = nodeB
[Link] = nodeC
[Link] = nodeD
[Link] = nodeE
[Link] = nodeF
[Link] = nodeG
# Test
print("[Link]:", [Link])
OUTPUT: [Link]: E
8
classTreeNode:
def __init__(self, data):
[Link] = data
[Link] = None
[Link] = None
defpreOrderTraversal(node):
if node is None:
return
print([Link], end=", ")
preOrderTraversal([Link])
preOrderTraversal([Link])
root = TreeNode('R')
nodeA = TreeNode('A')
nodeB = TreeNode('B')
nodeC = TreeNode('C')
nodeD = TreeNode('D')
nodeE = TreeNode('E')
nodeF = TreeNode('F')
nodeG = TreeNode('G')
[Link] = nodeA
[Link] = nodeB
[Link] = nodeC
[Link] = nodeD
[Link] = nodeE
[Link] = nodeF
[Link] = nodeG
# Traverse
preOrderTraversal(root)
OUTPUT:R, A, C, D, B, E, F, G,
9
classTreeNode:
def __init__(self, data):
[Link] = data
[Link] = None
[Link] = None
definOrderTraversal(node):
if node is None:
return
inOrderTraversal([Link])
print([Link], end=", ")
inOrderTraversal([Link])
root = TreeNode('R')
nodeA = TreeNode('A')
nodeB = TreeNode('B')
nodeC = TreeNode('C')
nodeD = TreeNode('D')
nodeE = TreeNode('E')
nodeF = TreeNode('F')
nodeG = TreeNode('G')
[Link] = nodeA
[Link] = nodeB
[Link] = nodeC
[Link] = nodeD
[Link] = nodeE
[Link] = nodeF
[Link] = nodeG
# Traverse
inOrderTraversal(root)
OUTPUT: C, A, D, R, E, B, G, F,
10
11