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);
}