0% found this document useful (0 votes)
23 views

Data Structure Lab 9

The document defines two Java classes - Node and Queue that implement a queue data structure. Node defines a node with data and next pointer. Queue implements queue operations like enqueue, dequeue, display by maintaining a reference to the head of the queue. It also defines methods to get perfect squares in the queue, delete every third element, merge two queues and swap elements at odd indexes between two queues.

Uploaded by

tahaayyad0
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views

Data Structure Lab 9

The document defines two Java classes - Node and Queue that implement a queue data structure. Node defines a node with data and next pointer. Queue implements queue operations like enqueue, dequeue, display by maintaining a reference to the head of the queue. It also defines methods to get perfect squares in the queue, delete every third element, merge two queues and swap elements at odd indexes between two queues.

Uploaded by

tahaayyad0
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

EX1:

public class Node {


int data;
Node next;

public Node(int data) {


this.data = data;
this.next = null;
}

}
-------------------------
public class Queue {
private Node head;

public Queue() {
this.head = null;
}

public void enqueue(int data) {


Node newNode = new Node(data);

if (head == null) {
head = newNode;
} else {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = newNode;
}
}

public int dequeue() {


if (head == null)
return -1;

int data = head.data;


head = head.next;
return data;
}

public void display() {


Node temp = head;
while (temp != null) {
System.out.print(temp.data + " ");
temp = temp.next;
}
System.out.println();
}

public Queue getPerfectSquares() {


Queue perfectSquaresQueue = new Queue();
Node temp = head;

while (temp != null) {


int num = temp.data;
double sqrt = Math.sqrt(num);
if (sqrt == (int) sqrt) {
perfectSquaresQueue.enqueue(num);
}

temp = temp.next;
}

return perfectSquaresQueue;
}

public Queue deleteEveryThirdElement() {


Queue resultQueue = new Queue();
Node temp = head;
int count = 1;

while (temp != null) {


if (count % 3 != 0) {
resultQueue.enqueue(temp.data);
}

temp = temp.next;
count++;
}

return resultQueue;
}

public Queue merge2Queues(Queue q2) {


Queue mergedQueue = new Queue();
Node temp = head;

while (temp != null) {


mergedQueue.enqueue(temp.data);
temp = temp.next;
}

temp = q2.head;

while (temp != null) {


mergedQueue.enqueue(temp.data);
temp = temp.next;
}

return mergedQueue;
}

public void swapElementsAtOddIndex(Queue q2) {


Node temp1 = head;
Node temp2 = q2.head;
int index = 1;

while (temp1 != null && temp2 != null) {


if (index % 2 != 0) {
int tempData = temp1.data;
temp1.data = temp2.data;
temp2.data = tempData;
}
temp1 = temp1.next;
temp2 = temp2.next;
index++;
}
}

}
-----------------------
public static void main(String[] args) {
// TODO code application logic here

Queue queue1 = new Queue();


Queue queue2 = new Queue();

for (int i = 2; i <= 9; i++) {


queue1.enqueue(i);
}
queue1.enqueue(36);

System.out.print("The first queue: ");


queue1.display();

Queue perfectSquaresQueue = queue1.getPerfectSquares();


System.out.print("Perfect squares in the queue: ");
perfectSquaresQueue.display();

Queue afterDeleteQueue = queue1.deleteEveryThirdElement();


System.out.print("Queue after deleting every third element: ");
afterDeleteQueue.display();

for (int i = 20; i <= 60; i += 10) {


queue2.enqueue(i);
}

System.out.print("The second queue: ");


queue2.display();

Queue mergedQueue = queue1.merge2Queues(queue2);


System.out.print("After merging the two queues: ");
mergedQueue.display();

queue1.swapElementsAtOddIndex(queue2);
System.out.println("After swapping elements at odd indexes:");
System.out.print("First queue: ");
queue1.display();
System.out.print("Second queue: ");
queue2.display();
}

EX2:

public class Node {


int data;
int priority;
Node next;
public Node(int data, int priority) {
this.data = data;
this.priority = priority;
this.next = null;
}
}
--------------------
class PriorityQueue {
private Node head;

public PriorityQueue() {
this.head = null;
}

public void enqueue(int data, int priority) {


Node newNode = new Node(data, priority);

if (head == null || priority > head.priority) {


newNode.next = head;
head = newNode;
} else {
Node temp = head;
while (temp.next != null && temp.next.priority >= priority) {
temp = temp.next;
}
newNode.next = temp.next;
temp.next = newNode;
}
}

public int dequeue() {


if (head == null)
return -1;

int data = head.data;


head = head.next;
return data;
}

public void removeElement(int a) {


if (head == null)
return;

if (head.data == a) {
head = head.next;
return;
}

Node temp = head;


while (temp.next != null && temp.next.data != a) {
temp = temp.next;
}

if (temp.next != null) {
temp.next = temp.next.next;
}
}
public void reverseQueue() {
if (head == null || head.next == null)
return;

Node prev = null;


Node current = head;
Node nextNode;

while (current != null) {


nextNode = current.next;
current.next = prev;
prev = current;
current = nextNode;
}

head = prev;
}

public int maxElement() {


if (head == null)
return -1;

return head.data;
}

public void display() {


Node temp = head;
while (temp != null) {
System.out.print(temp.data + "(" + temp.priority + ") ");
temp = temp.next;
}
System.out.println();
}
}
----------------------
public static void main(String[] args) {
// TODO code application logic here

PriorityQueue priorityQueue = new PriorityQueue();

priorityQueue.enqueue(5, 2);
priorityQueue.enqueue(10, 1);
priorityQueue.enqueue(7, 3);
priorityQueue.enqueue(3, 2);

System.out.print("Priority Queue: ");


priorityQueue.display();

int dequeued = priorityQueue.dequeue();


System.out.println("Dequeued element: " + dequeued);
System.out.print("Priority Queue after dequeue: ");
priorityQueue.display();

priorityQueue.removeElement(10);
System.out.print("Priority Queue after removing element 10: ");
priorityQueue.display();

priorityQueue.reverseQueue();
System.out.print("Reversed Priority Queue: ");
priorityQueue.display();

int maxElement = priorityQueue.maxElement();


System.out.println("Max Element in Priority Queue: " + maxElement);
}

You might also like