Wednesday 29 November 2017

Java Program to implement Priority Queue


Code:

import java.util.Scanner;

/** class Task **/
class Task
{
    String job;
    int priority;

    /** Constructor **/
    public Task(String job, int priority)
    {
        this.job = job;
        this.priority = priority; 
    }
    /** toString() **/
    public String toString() 
    {
        return "Job Name : "+ job +"\nPriority : "+ priority;
    }
}

/** Class PriorityQueue **/
class PriorityQueue
{
    private Task[] heap; 
    private int heapSize, capacity;

    /** Constructor **/
    public PriorityQueue(int capacity)
    {    
        this.capacity = capacity + 1;
        heap = new Task[this.capacity];
        heapSize = 0;
    }
    /** function to clear **/
    public void clear()
    {
        heap = new Task[capacity];
        heapSize = 0;
    }
    /** function to check if empty **/
    public boolean isEmpty()
    {
        return heapSize == 0;
    }
    /** function to check if full **/
    public boolean isFull()
    {
        return heapSize == capacity - 1;
    }
    /** function to get Size **/
    public int size()
    {
        return heapSize;
    }
    /** function to insert task **/
    public void insert(String job, int priority)
    {
        Task newJob = new Task(job, priority);

        heap[++heapSize] = newJob;
        int pos = heapSize;
        while (pos != 1 && newJob.priority > heap[pos/2].priority)
        {
            heap[pos] = heap[pos/2];
            pos /=2;
        }
        heap[pos] = newJob;    
    }
    /** function to remove task **/
    public Task remove()
    {
        int parent, child;
        Task item, temp;
        if (isEmpty() )
        {
            System.out.println("Heap is empty");
            return null;
        }

        item = heap[1];
        temp = heap[heapSize--];

        parent = 1;
        child = 2;
        while (child <= heapSize)
        {
            if (child < heapSize && heap[child].priority < heap[child + 1].priority)
                child++;
            if (temp.priority >= heap[child].priority)
                break;

            heap[parent] = heap[child];
            parent = child;
            child *= 2;
        }
        heap[parent] = temp;

        return item;
    }
}

/** Class PriorityQueueTest **/
public class PriorityQueueTest
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Priority Queue Test\n");   

        System.out.println("Enter size of priority queue ");
        PriorityQueue pq = new PriorityQueue(scan.nextInt() );

        char ch;
        /*  Perform Priority Queue operations */
        do    
        {
            System.out.println("\nPriority Queue Operations\n");
            System.out.println("1. insert");
            System.out.println("2. remove");
            System.out.println("3. check empty");
            System.out.println("4. check full");
            System.out.println("5. clear");
            System.out.println("6. size");

            int choice = scan.nextInt();            
            switch (choice) 
            {
            case 1 : 
                System.out.println("Enter job name and priority");
                pq.insert(scan.next(), scan.nextInt() );                     
                break;                          
            case 2 : 
                System.out.println("\nJob removed \n\n"+ pq.remove()); 
                break;        
            case 3 : 
                System.out.println("\nEmpty Status : "+ pq.isEmpty() );
                break; 
            case 4 : 
                System.out.println("\nFull Status : "+ pq.isFull() );
                break; 
            case 5 : 
                System.out.println("\nPriority Queue Cleared");
                pq.clear();
                break;    
            case 6 : 
                System.out.println("\nSize = "+ pq.size() );
                break;         
            default : 
                System.out.println("Wrong Entry \n ");
                break;   
            }    

            System.out.println("\nDo you want to continue (Type y or n) \n");
            ch = scan.next().charAt(0);                        
        } while (ch == 'Y'|| ch == 'y');            
    }
}


Output:

Priority Queue Test

Enter size of priority queue
7

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
1
Enter job name and priority
job1 24

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
1
Enter job name and priority
job2 6

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
1
Enter job name and priority
job3 28

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
1
Enter job name and priority
job4 63

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
1
Enter job name and priority
job5 5

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
1
Enter job name and priority
job6 94

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
1
Enter job name and priority
job7 14

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
6

Size = 7

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
4

Full Status : true

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
2

Job removed

Job Name : job6
Priority : 94

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
2

Job removed

Job Name : job4
Priority : 63

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
2

Job removed

Job Name : job3
Priority : 28

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
2

Job removed

Job Name : job1
Priority : 24

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
2

Job removed

Job Name : job7
Priority : 14

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
2

Job removed

Job Name : job2
Priority : 6

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
2

Job removed

Job Name : job5
Priority : 5

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
2
Heap is empty

Job removed

null

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
3

Empty Status : true

Do you want to continue (Type y or n)

y

Priority Queue Operations

1. insert
2. remove
3. check empty
4. check full
5. clear
6. size
6

Size = 0

Do you want to continue (Type y or n)

n



More Java programs:

















100+ Best Home Decoration Ideas For Christmas Day 2019 To Make Home Beautiful

Best gifts for Christmas Day | Greeting cards for Christmas Day | Gift your children a new gift on Christmas day This Christmas d...