Learn-dsa..in 30 days!



























CC-7 : Implement Priority Queue.

Description:

In a priority queue elements are processed based on their order/priority, rather than their their insertion order. In remove/ de-queue operation a priority queue returns elements with higher priority before elements with lower priority. Implement a Priority Queue that stores integers in ascending order.

Test cases and expected outputs:

Input Parameters Expected outputs
QueuePriority queue=new QueuePriority();
queue.addByPriority(99);
queue.addByPriority(14);
queue.addByPriority(77);
queue.addByPriority(34);
queue.addByPriority(21);
queue.addByPriority(82);
Queue nodes: 14 <- 21 <- 34 <- 77 <- 99
queue.remove();
queue.remove();
queue.remove();
queue.add(44);
queue.add(55);
Queue nodes: 34 <-44<-55<-77<- 99

Pseudocode:

Refer to code for Queue implementation from code challenge1.
For Priority Queue we just to need to replace add() method in Queue code by addByPriority() method. Rest of the code remains the same.
addByPriority() method:
If Priority Queue is currently empty, set new node as firstNode of Priority Queue.
Else If new node’s data is greater than data of firstNode, set new node as firstNode of priority Queue.
Else Navigate the Priority Queue’s nodes from firstNode onwards. Keep going tonext node till we find a node thats data is lesser than data of new node. Insert new node between the current node and its previousNode.
Else if while navigating if we reach end of the Priority Queue (that is all nodes data is less than data of new node) then add new node as last node of the Priority Queue.

Code:

public class QueuePriority {	
	
private QueueNode firstNode=null;
	
public int get() {
	if (firstNode !=null) {
		return firstNode.getNodeData();
	}
	return Integer.MIN_VALUE;
}

public boolean addByPriority(int data){
	QueueNode node=new QueueNode();
	node.setNodeData(data);
	if (firstNode==null) { 
		firstNode=node; 
		node.setNextNode(null);
		return true;		
	}
	if (firstNode.getNodeData()<=data) {
		node.setNextNode(firstNode);
		firstNode=node;
		return true;				
	}
	QueueNode currNode=firstNode;
	QueueNode prevNode=null;
	while (( currNode != null) && (currNode.getNodeData() > data))	{
		prevNode=currNode;
		currNode=currNode.getNextNode();				
	}
	if (currNode != null) {
		prevNode.setNextNode(node);
		node.setNextNode(currNode);
		return true;
	} 
	if (currNode == null){
		prevNode.setNextNode(node);
		node.setNextNode(null);
	}	
	return true;
}

public int remove() {
	if (firstNode == null) { return Integer.MIN_VALUE; }
	int removedData=firstNode.getNodeData();
	if (firstNode.getNextNode()==null) {
		firstNode=null; 
		return removedData;
	}
	firstNode=firstNode.getNextNode();
	return removedData;
}
}

Click here to download and run code and test cases !