0% found this document useful (0 votes)
35 views16 pages

Dsa Lab 11 Azlan

The document discusses implementing a queue data structure using Python. It includes classes for a node, queue and methods to enqueue, dequeue, display and sort the queue. Examples are provided to demonstrate adding ages to a queue, sorting it to place senior citizens at the front, and displaying the sorted queue.

Uploaded by

xi.am3cs09
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
35 views16 pages

Dsa Lab 11 Azlan

The document discusses implementing a queue data structure using Python. It includes classes for a node, queue and methods to enqueue, dequeue, display and sort the queue. Examples are provided to demonstrate adding ages to a queue, sorting it to place senior citizens at the front, and displaying the sorted queue.

Uploaded by

xi.am3cs09
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 16

DATA STRUCTURES AND ALGO LAB 11

SYED AZLAN SHAH


15435
1148514
QUESTION 1:
class Node:
def __init__(self, data):
self.data = data
self.next = None

class Queue:
def __init__(self):
self.front = None
self.rear = None

def is_empty(self):
return self.front is None

def enqueue(self, data):


new_node = Node(data)
if self.is_empty():
self.front = self.rear = new_node
else:
self.rear.next = new_node
self.rear = new_node

def dequeue(self):
if self.is_empty():
print("Queue is empty")
return None
else:
removed_item = self.front.data
if self.front == self.rear:
self.front = self.rear = None
else:
self.front = self.front.next
return removed_item

def update(self, old_data, new_data):


current = self.front
while current:
if current.data == old_data:
current.data = new_data
return True
current = current.next
return False

def search(self, data):


current = self.front
while current:
if current.data == data:
return True
current = current.next
return False

def display(self):
if self.is_empty():
print("Queue is empty")
else:
current = self.front
while current:
print(current.data, end=" ")
current = current.next
print()
q = Queue()

while True:
print("\n1. Enqueue")
print("2. Dequeue")
print("3. Update")
print("4. Search")
print("5. Display")
print("6. Exit")

choice = int(input("Enter your choice: "))

if choice == 1:
data = int(input("Enter data to enqueue: "))
q.enqueue(data)
elif choice == 2:
item = q.dequeue()
if item is not None:
print(f"Dequeued item: {item}")
elif choice == 3:
old_data = int(input("Enter data to update: "))
new_data = int(input("Enter new data: "))
if q.update(old_data, new_data):
print("Updated successfully")
else:
print("Data not found in the queue")
elif choice == 4:
data = int(input("Enter data to search: "))
if q.search(data):
print("Data found in the queue")
else:
print("Data not found in the queue")
elif choice == 5:
print("Queue contents:")
q.display()
elif choice == 6:
print("Exiting...")
break
else:
print("Invalid choice! Please enter a valid option.")

OUTPUT:
QUESTION 2:
class QueueUsingStacks:
def __init__(self):
self.main_stack = []
self.temp_stack = []

def push(self, stack, data):


stack.append(data)

def pop(self, stack):


if self.isEmpty(stack):
return None
return stack.pop()

def isEmpty(self, stack):


return len(stack) == 0

def enqueue(self, data):


while not self.isEmpty(self.main_stack):
self.push(self.temp_stack, self.pop(self.main_stack))
self.push(self.main_stack, data)

while not self.isEmpty(self.temp_stack):


self.push(self.main_stack, self.pop(self.temp_stack))

def dequeue(self):
if self.isEmpty(self.main_stack):
print("Queue is empty")
return None
return self.pop(self.main_stack)

queue = QueueUsingStacks()
queue.enqueue(6)
queue.enqueue(7)
queue.enqueue(8)
queue.enqueue(9)
print("Queue contents after enqueue:")
while True:
item = queue.dequeue()
if item is not None:
print(item, end=" ")
else:
break

print("\nQueue is empty after dequeue")


QUESTION 3:
class Node:

def __init__(self, age):

self.age = age

self.next = None

class Queue:

def __init__(self):

self.front = None

self.rear = None

def is_empty(self):

return self.front is None

def enqueue(self, age):

new_node = Node(age)

if self.is_empty():

self.front = self.rear = new_node

else:

self.rear.next = new_node

self.rear = new_node

def dequeue(self):

if self.is_empty():

print("Queue is empty")

return None

else:

removed_age = self.front.age
if self.front == self.rear:

self.front = self.rear = None

else:

self.front = self.front.next

return removed_age

def sort_queue(self):

if self.is_empty() or self.front == self.rear:

return

sorted_queue = Queue()

while not self.is_empty():

max_age = self.find_max_age()

self.remove_age(max_age)

sorted_queue.enqueue(max_age)

self.front = sorted_queue.front

self.rear = sorted_queue.rear

def find_max_age(self):

max_age = float('-inf')

current = self.front

while current:

if current.age > max_age:

max_age = current.age

current = current.next

return max_age

def remove_age(self, age):


current = self.front

prev = None

while current:

if current.age == age:

if prev:

prev.next = current.next

else:

self.front = current.next

if current == self.rear:

self.rear = prev

break

prev = current

current = current.next

def display(self):

current = self.front

while current:

print(current.age, end=" ")

current = current.next

print()

citizens_queue = Queue()

ages = [18, 35, 65, 68, 45, 55, 22, 58, 67, 43]

for age in ages:

citizens_queue.enqueue(age)

print("Queue before sorting:")


citizens_queue.display()

citizens_queue.sort_queue()

print("\nQueue after sorting (senior citizens first):")

citizens_queue.display()

You might also like