Professional Documents
Culture Documents
Daa Lab Prgrams PDF
Daa Lab Prgrams PDF
if n==1:
print('Move disk 1','from rod',from_rod,'to rod',to_rod)
return
TowerOfHanoi(n-1,from_rod,aux_rod,to_rod)
print('Move disk',n,'from rod',from_rod,'to rod',to_rod)
TowerOfHanoi(n-1,aux_rod,to_rod,from_rod)
def isempty(self):
return self.items==[]
#Push Function
def push(self,items):
self.items.append(items)
#Pop Function
def pop(self):
return self.items.pop()
print ("pop sucessfully")
#Traverse Function
def traverse(self):
for i in range(len(self.items)-1,-1,-1):
print(self.items[i])
#Function call
s=stack()
s.push(100)
s.push(99)
s.push(88)
s.push(77)
s.push(66)
s.push(55)
s.push(44)
s.push(33)
s.push(22)
s.push(11)
print('The Stack Elements are:')
s.traverse()
s.push(10)
print('After inserting 10 into the Stack')
s.traverse()
s.push(9)
print('After inserting 9 into the Stack')
s.traverse()
s.push(8)
print('After inserting 8 into the Stack')
s.traverse()
s.pop()
print('After popping the last element from the Stack')
s.traverse()
3. QUEUE USING LINKEDLIST
#Queue Creation
class queue:
def __init__(self,initval=None):
self.val=initval
self.next=None
def isempty(self):
return self.val==None
#Enqueue
def enqueue(self,v):
if self.isempty():
self.val=v
else:
newnode=queue(v)
temp=self
while(temp.next != None):
temp=temp.next
temp.next=newnode
#Dequeue
def dequeue(self):
if self.isempty():
print("Nothing to delete")
elif(self.next==None):
self.val=None
else:
self.val=self.next.val
self.next=self.next.next
#Traverse
def traverse(self):
if self.isempty():
print("Nothing to show")
else:
temp=self
while(temp != None):
print(temp.val)
temp=temp.next
#Function call
q=queue()
q.enqueue(101)
q.enqueue(202)
q.enqueue(303)
q.enqueue(404)
q.enqueue(505)
q.traverse()
q.enqueue(606)
q.traverse()
q.dequeue()
q.traverse()
4. MIN HEAP ANAYSIS
import heapq
class Heap:
#Initializing Heap
def __init__(self):
self.heapList=[0]
self.size=0
def SearchElement(self,item):
i=1
while(i<=self.size):
if item==self.heapList[i]:
return i
i+=1
#To percolate Up
def percolateUp(self,i):
while i//2>0:
if self.heapList[i]<self.heapList[i//2]:
tmp=self.heapList[i//2]
self.heapList[i//2]=self.heapList[i]
self.heapList[i]=tmp
i=i//2
#To Insert
def insert(self,k):
self.heapList.append(k)
self.size = self.size + 1
self.percolateUp(self.size)
def printHeap(self):
print(self.heapList[1:])
#Function Call
HOrig = Heap()
HOrig.insert(1)
HOrig.insert(3)
HOrig.insert(6)
HOrig.insert(7)
HOrig.insert(9)
HOrig.insert(8)
HOrig.printHeap()
HOrig.insert(5)
HOrig.printHeap()
print('Selection sort')
def selectionsort(A):
least = i
for k in range(i+1,len(A)):
if A[k]<A[least]:
least=k
swap(A,least,i)
#Swap Function
def swap(A,x,y):
temp=A[x]
A[x]=A[y]
A[y]=temp
A=[45,85,74,12,65,10,6,8,36]
print(A)
selectionsort(A)
print(A)
6. QUICK SORT
print(“Quick Sort”)
#Function Definition
import random
def QuickSort(A,low,high):
if low<high:
pivot=partition(A,low,high)
QuickSort(A,low,pivot-1)
QuickSort(A,pivot+1,high)
def partition(A,low,high):
pivot=low
swap(A,low,high)
for i in range(low,high):
if A[i]<=A[high]:
swap(A,i,low)
low+=1
swap(A,low,high)
return low
def swap(A,x,y):
temp=A[x]
A[x]=A[y]
A[y]=temp
A=[43,32,22,78,63,57,91,13]
print(A)
#Quick Sort Function Call
QuickSort(A,0,len(A)-1)
print(A)
7. BINARY SEARCH TREE
class Node:
self.data = key
self.left = None
self.right = None
#Insert Function
if node is None:
return (Node(data))
else:
else:
return node
def minValue(node):
current = node
current = current.left
return current.data
def maxValue(node):
current = node
while(current.right is not None):
current = current.right
return current.data
#Finding Height
def height(node):
if node is None:
return 0
else:
lheight = height(node.left)
rheight = height(node.right)
return lheight+1
else:
return rheight+1
def levelorder(node):
h = height(node)
printlevel(node, i)
if node is None:
return
if level == 1:
print(node.data)
printlevel(node.right,level-1)
#Function Call
root = None
root = insert(root,27)
insert(root,14)
insert(root,35)
insert(root,10)
insert(root,19)
insert(root,31)
insert(root,42)
levelorder(root)
class Graph(object):
def __init__(self):
self.graph = defaultdict(list)
self.graph[u].append(v)
def depth_first_search(self,node):
visited = []
stack = [node]
while stack:
node = stack.pop()
print node
visited.append(node)
for i in self.graph[node]:
stack.append(i)
#Function Call
G = Graph()
G.add_edge(0,1)
G.add_edge(0,4)
G.add_edge(1,2)
G.add_edge(1,3)
G.add_edge(1,4)
G.add_edge(2,3)
G.add_edge(3,4)
G.depth_first_search(0)
9. MINIMUM COST SPANNING TREE
adjMatrix = []
adjMatrix.append([])
adjMatrix[i].append(0)
adjMatrix[G[i][0]][G[i][1]] = G[i][2]
adjMatrix[G[i][1]][G[i][0]] = G[i][2]
return adjMatrix
adjMatrix = createAdjMatrix(V, G)
vertex = 0
MST = []
edges = []
visited = []
minEdge = [None,None,float('inf')]
visited.append(vertex)
if adjMatrix[vertex][r] != 0:
edges.append([vertex,r,adjMatrix[vertex][r]])
# find edge with the smallest weight to a vertex that has not yet been visited
minEdge = edges[e]
edges.remove(minEdge)
MST.append(minEdge)
vertex = minEdge[1]
minEdge = [None,None,float('inf')]
return MST
graph = [
[0,1,2],
[0,2,3],
[1,3,3],
[1,2,5],
[1,4,4],
[2,4,4],
[3,4,2],
[3,5,3],
[4,5,5]]