This is a Java Program to Implement Meldable Heap. A randomized meldable heap (also Meldable Heap or Randomized Meldable Priority Queue) is a priority queue based data structure in which the underlying structure is also a heap-ordered binary tree. However, there are no restrictions on the shape of the underlying binary tree.
Here is the source code of the Java Program to Implement Meldable Heap. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
** Java Program to Implement Meldable Heap
**/
import java.util.Scanner;
import java.util.Random;
/** Class Node **/
class Node
{
Node left, right, parent;
int x;
public Node(Node parent, Node left, Node right, int x)
{
this.parent = parent;
this.left = left;
this.right = right;
this.x = x;
}
}
/** Class MedlableHeap **/
class MeldableHeap
{
private Random rand;
private int n;
private Node root;
public MeldableHeap()
{
root = null;
rand = new Random();
n = 0;
}
/** Check if heap is empty **/
public boolean isEmpty()
{
return root == null;
}
/** clear heap **/
public void makeEmpty()
{
root = null;
rand = new Random();
n = 0;
}
/** function to get size **/
public int getSize()
{
return n;
}
/** function to insert an element **/
public void add(int x)
{
Node u = new Node(null, null, null, x);
root = meld(u, root);
root.parent = null;
n++;
}
/** function to remove an element **/
public int remove()
{
int x = root.x;
root = meld(root.left, root.right);
if (root != null)
root.parent = null;
n--;
return x;
}
/** function to merge two nodes **/
public Node meld(Node q1, Node q2)
{
if (q1 == null)
return q2;
if (q2 == null)
return q1;
if (q2.x < q1.x)
return meld(q2, q1);
if (rand.nextBoolean())
{
q1.left = meld(q1.left, q2);
q1.left.parent = q1;
}
else
{
q1.right = meld(q1.right, q2);
q1.right.parent = q1;
}
return q1;
}
/** function to print heap **/
public void displayHeap()
{
System.out.print("\nMeldable Heap : ");
if (root == null)
{
System.out.print("Empty\n");
return;
}
Node prev, w = root;
while (w.left != null)
w = w.left;
while (w != null)
{
System.out.print(w.x +" ");
prev = w;
w = nextNode(w);
}
System.out.println();
}
/** function to get next node in heap **/
private Node nextNode(Node w)
{
if (w.right != null)
{
w = w.right;
while (w.left != null)
w = w.left;
}
else
{
while (w.parent != null && w.parent.left != w)
w = w.parent;
w = w.parent;
}
return w;
}
}
/** Class MeldableHeapTest **/
public class MeldableHeapTest
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Meldable Heap Test\n\n");
/* Make object of MeldableHeap */
MeldableHeap mh = new MeldableHeap();
char ch;
/* Perform Meldable Heap operations */
do
{
System.out.println("\nMeldable Heap Operations\n");
System.out.println("1. add");
System.out.println("2. remove");
System.out.println("3. size");
System.out.println("4. check empty");
System.out.println("5. clear");
int choice = scan.nextInt();
switch (choice)
{
case 1 :
System.out.println("Enter integer element to insert");
mh.add( scan.nextInt() );
break;
case 2 :
System.out.println("Removed Element : "+ mh.remove() );
break;
case 3 :
System.out.println("Size = "+ mh.getSize());
break;
case 4 :
System.out.println("Empty status = "+ mh.isEmpty());
break;
case 5 :
mh.makeEmpty();
System.out.println("Heap Cleared\n");
break;
default :
System.out.println("Wrong Entry \n ");
break;
}
/* Display heap */
mh.displayHeap();
System.out.println("\nDo you want to continue (Type y or n) \n");
ch = scan.next().charAt(0);
} while (ch == 'Y'|| ch == 'y');
}
}
Meldable Heap Test Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 4 Empty status = true Meldable Heap : Empty Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 1 Enter integer element to insert 24 Meldable Heap : 24 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 1 Enter integer element to insert 6 Meldable Heap : 24 6 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 1 Enter integer element to insert 28 Meldable Heap : 28 24 6 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 1 Enter integer element to insert 94 Meldable Heap : 28 24 6 94 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 1 Enter integer element to insert 19 Meldable Heap : 28 24 6 19 94 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 1 Enter integer element to insert 5 Meldable Heap : 28 24 6 19 94 5 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 1 Enter integer element to insert 63 Meldable Heap : 28 24 6 19 94 5 63 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 3 Size = 7 Meldable Heap : 28 24 6 19 94 5 63 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 2 Removed Element : 5 Meldable Heap : 28 63 24 6 19 94 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 2 Removed Element : 6 Meldable Heap : 28 63 24 19 94 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 2 Removed Element : 19 Meldable Heap : 28 63 24 94 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 2 Removed Element : 24 Meldable Heap : 94 28 63 Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 5 Heap Cleared Meldable Heap : Empty Do you want to continue (Type y or n) y Meldable Heap Operations 1. add 2. remove 3. size 4. check empty 5. clear 4 Empty status = true Meldable Heap : Empty Do you want to continue (Type y or n) n
Related posts:
Giới thiệu thư viện Apache Commons Chain
Comparing Dates in Java
Java Program to Implement Iterative Deepening
Java Program to Perform Right Rotation on a Binary Search Tree
Java Program to Sort an Array of 10 Elements Using Heap Sort Algorithm
Java Program to Implement Cartesian Tree
Reading an HTTP Response Body as a String in Java
Hướng dẫn Java Design Pattern – Dependency Injection
Binary Numbers in Java
How to Read a Large File Efficiently with Java
Why String is Immutable in Java?
Giới thiệu Aspect Oriented Programming (AOP)
Using the Not Operator in If Conditions in Java
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
Using JWT with Spring Security OAuth
Java Program to Check Whether it is Weakly Connected or Strongly Connected for a Directed Graph
Java Program to Implement a Binary Search Tree using Linked Lists
Java – InputStream to Reader
Java Convenience Factory Methods for Collections
Annotation trong Java 8
Java Program to Solve the Fractional Knapsack Problem
Java – Delete a File
Spring Data Reactive Repositories with MongoDB
Spring MVC and the @ModelAttribute Annotation
Exploring the Spring 5 WebFlux URL Matching
Exception Handling in Java
Hashing a Password in Java
Spring JDBC
So sánh ArrayList và LinkedList trong Java
Collection trong java
Sử dụng CyclicBarrier trong Java
Tránh lỗi NullPointerException trong Java như thế nào?