MSC FINAL ALGORITHM LAB
MSC FINAL ALGORITHM LAB
PROGRAM:
if n == 1:
return
OUTPUT:
self.key = key
self.left = None
self.right = None
class BinarySearchTree:
self.root = None
if root is None:
return Node(key)
return root
def in_order_traversal(self):
result = []
self._in_order_traversal(self.root, result)
return result
if root:
self._in_order_traversal(root.left, result)
result.append(root.key)
self._in_order_traversal(root.right, result)
def pre_order_traversal(self):
result = []
self._pre_order_traversal(self.root, result)
return result
if root:
result.append(root.key)
self._pre_order_traversal(root.left, result)
self._pre_order_traversal(root.right, result)
def post_order_traversal(self):
result = []
self._post_order_traversal(self.root, result)
return result
def _post_order_traversal(self, root, result):
if root:
self._post_order_traversal(root.left, result)
self._post_order_traversal(root.right, result)
result.append(root.key)
bst = BinarySearchTree()
keys = [3, 1, 4, 2]
bst.insert(key)
OUTPUT:
In-order traversal: [1, 2, 3, 4]
Pre-order traversal: [3, 1, 2, 4]
Post-order traversal: [2, 1, 4, 3]
self.data = data
self.next = None
class Stack:
def init (self):
self.top = None
def is_empty(self):
new_node = Node(data)
new_node.next = self.top
self.top = new_node
def pop(self):
if self.is_empty():
return None
popped_data = self.top.data
self.top = self.top.next
return popped_data
def peek(self):
return None if self.is_empty() else self.top.data
def display(self):
current = self.top
while current:
current = current.next
print()
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
stack.display()
popped_element = stack.pop()
stack.display()
OUTPUT:
321
Top element: 3
Popped element: 3
Stack after popping element:
21
self.capacity = capacity
self.front = self.rear = -1
def is_empty(self):
return self.front == -1
def is_full(self):
return (self.rear + 1) % self.capacity == self.front
if self.is_full():
else:
if self.is_empty():
self.front = self.rear = 0
else:
self.rear = (self.rear + 1) % self.capacity
self.queue[self.rear] = item
print(f"Enqueued: {item}")
def dequeue(self):
if self.is_empty():
print("Queue is empty. Cannot dequeue element.")
return None
else:
item = self.queue[self.front]
if self.front == self.rear:
self.front = self.rear = -1
else:
print(f"Dequeued: {item}")
return item
def display(self):
if self.is_empty():
print("Queue is empty.")
else:
print("Circular Queue:")
i = self.front
while True:
if i == self.rear:
break
i = (i + 1) % self.capacity
print()
cq = CircularQueue(5)
cq.enqueue(1)
cq.enqueue(2)
cq.enqueue(3)
cq.enqueue(4)
cq.display()
cq.dequeue()
cq.display()
cq.enqueue(5)
cq.display()
cq.enqueue(6)
cq.dequeue()
cq.dequeue()
cq.dequeue()
cq.dequeue()
OUTPUT:
Is the circular queue empty? True
Enqueued: 1
Enqueued: 2
Enqueued: 3
Enqueued: 4
Circular Queue:
1234
Dequeued: 1
Circular Queue:
234
Enqueued: 5
Circular Queue:
2345
Enqueued: 6
Dequeued: 2
Dequeued: 3
Dequeued: 4
Dequeued: 5
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
sorted_array = quick_sort(array_to_sort)
OUTPUT:
n = len(arr)
heapify(arr, n, i)
heapify(arr, i, 0)
largest = i
left_child = 2 * i + 1
right_child = 2 * i + 2
largest = left_child
largest = right_child
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
heap_sort(array_to_sort)
OUTPUT:
Original array: [3, 6, 8, 10, 1, 2, 1]
Sorted array: [1, 1, 2, 3, 6, 8, 10]
n = len(weights)
total_value = 0.0
knapsack = [0] * n
for i in range(n):
if ratios[i][1] <= capacity:
knapsack[i] = 1 # Take the whole item
total_value += ratios[i][2]
capacity -= ratios[i][1]
else:
print("Items selected:")
for i in range(len(result)):
OUTPUT:
Items selected:
Item 1: 1.00 fraction taken
Item 2: 1.00 fraction taken
Item 3: 1.00 fraction taken
Item 4: 0.50 fraction taken
Total value in the knapsack: 270.0
self.key = key
self.left = None
self.right = None
if root is None:
return False
if root.key == target:
return True
else:
root = TreeNode(3)
root.left = TreeNode(1)
root.right = TreeNode(4)
root.left.right = TreeNode(2)
target_element = 2
if search_in_tree(root, target_element):
else:
OUTPUT:
Element 2 found in the tree.
for i in range(row):
if board[i][col] == 1:
return False
if board[i][j] == 1:
return False
for i, j in zip(range(row, -1, -1), range(col, n)):
if board[i][j] == 1:
return False
return True
if row == n:
return True
board[row][col] = 1
return True
board[row][col] = 0
return False
def solve_n_queens(n):
# Initialize an empty chessboard
return
print_solution(board)
def print_solution(board):
solve_n_queens(8)
OUTPU