Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • DSA
  • Interview Problems on Queue
  • Practice Queue
  • MCQs on Queue
  • Queue Tutorial
  • Operations
  • Applications
  • Implementation
  • Stack vs Queue
  • Types of Queue
  • Circular Queue
  • Deque
  • Priority Queue
  • Stack using Queue
  • Advantages & Disadvantages
Open In App
Next Article:
Turn a Queue into a Priority Queue
Next article icon

Turn a Queue into a Priority Queue

Last Updated : 29 Nov, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

What is Queue?

Queue is an abstract data type that is open at both ends. One end is always used to insert data (enqueue) which is basically the rear/back/tail end and the other which is the front end is used to remove data (dequeue). Queue follows First-In-First-Out (FIFO) methodology, i.e., "the data item stored first will be accessed first".

Declaration:

queue<data_type> name

 What is a priority queue?

Priority Queue is an abstract data type that is similar to a queue, and every element has some priority value associated with it. The priority of the elements in a priority queue determines the order in which elements are served. If in any case, the elements have the same priority, they are served as per their ordering in the queue.

Declaration : 

priority_queue<data_type> name

Types of Priority Queue:

Ascending Order Priority Queue

As the name suggests, in ascending order priority queue, the element with a lower priority value is given a higher priority in the priority list. For example, if we have the following elements in a priority queue arranged in ascending order like {4, 6, 8, 9, 10}. Here, 4 is the smallest number. Therefore, it will get the highest priority in a priority queue.

Descending order Priority Queue

In a descending order priority queue, the elements with a higher priority value are given higher priority. For example, if we have a priority queue with the values {10, 4, 3, 2}, the element 10 will be given the highest priority as it has the largest value.

Types of priority queue
Types of priority queue

Turning a Queue into a Priority Queue

Given a queue. The task is to change a queue in a priority queue.

Example :

Input : Q = [ 3, 4, 2, 8, 1, 7 ]
Output : Q =[ 8, 7, 4, 3, 2, 1 ]

Approach :

The idea is to sort the queue elements either in ascending / descending order. We know that queue can be sorted using recursion that takes extra space due to function call stack.

After sorting the queue either in ascending or descending order we can change a queue into a priority queue. whenever we push any value inside the queue, just after that we have to sort the queue then all elements will be arranged according to their priority.

  • Create a queue q and push random elements in it.
  • Create sortqueue function to sort the array.
    • If the queue is empty then return back.
    • Initialize a variable item and store the topmost element of the queue in it and pop it out from the queue.
    • Again, make a recursive call inside sortqueue function.
  • Now, again insert elements in the queue by checking if q is empty or not.
    • If the queue is empty then push the front value inside the queue.
    • Check if the current element is greater than the element at the front.
      • If yes, then push the value inside the queue and make a recursive call for inserting the front element of the queue to the last.
        • If q is not empty then return back.
        • Pop the front element and push in the last of the queue.
        • Make recursive calls for further elements.
      • Otherwise, push the front element into the last of the queue and make a recursive call for pushing elements inside the queue.

 Below is the implementation of the above approach.

C++
// C++ code to implement the approach  #include <bits/stdc++.h> using namespace std;  // Function to push element in last // by popping from front until size becomes 0 void frontelement(queue<int>& q, int qsize) {     // Base condition     if (qsize <= 0)         return;      // Pop front element and push     // this last in a queue     q.push(q.front());     q.pop();      // Recursive call for pushing element     frontelement(q, qsize - 1); }  // Function for inserting element in the queue void insertelement(queue<int>& q, int val, int qsize) {     if (qsize == 0 || q.empty()) {         q.push(val);         return;     }      // If current element is greater than     // the element at the front     else if (val >= q.front()) {          // Call stack with front of queue         q.push(val);          // Recursive call for inserting         // a front element of the queue         // to the last         frontelement(q, qsize);     }     else {          // Push front element into last in a queue         q.push(q.front());         q.pop();          // Recursive call for pushing elements in a queue         insertelement(q, val, qsize - 1);     } }  // Function to sort queue void sortqueue(queue<int>& q) {     if (q.empty()) {         return;     }     int item = q.front();     q.pop();     sortqueue(q);     insertelement(q, item, q.size()); }  // Driver Code int main() {     queue<int> q;     q.push(3);     q.push(4);     q.push(2);     q.push(8);     q.push(1);     q.push(7);      // Initially queue is 3 4 2 8 1 7     sortqueue(q);      while (!q.empty()) {         cout << q.front() << " ";         q.pop();     }      return 0; } 
Java
// Java code to implement the approach import java.io.*; import java.util.*;  class GFG {    // Function to push element in last   // by popping from front until size becomes 0   static void frontelement(Queue<Integer> q, int qsize)   {     // Base condition     if (qsize <= 0) {       return;     }      // Pop front element and push     // this last in a queue     q.add(q.peek());     q.poll();      // Recursive call for pushing element     frontelement(q, qsize - 1);   }    // Function for inserting element in the queue   static void insertelement(Queue<Integer> q, int val,                             int qsize)   {     if (qsize == 0 || q.isEmpty()) {       q.add(val);       return;     }      // If current element is greater than     // the element at the front     else if (val >= q.peek()) {        // Call stack with front of queue       q.add(val);        // Recursive call for inserting       // a front element of the queue       // to the last       frontelement(q, qsize);     }     else {        // Push front element into last in a queue       q.add(q.peek());       q.poll();        // Recursive call for pushing elements in a       // queue       insertelement(q, val, qsize - 1);     }   }    // Function to sort queue   static void sortqueue(Queue<Integer> q)   {     if (q.isEmpty()) {       return;     }     int item = q.peek();     q.poll();     sortqueue(q);     insertelement(q, item, q.size());   }    public static void main(String[] args)   {     Queue<Integer> q = new LinkedList<>();     q.add(3);     q.add(4);     q.add(2);     q.add(8);     q.add(1);     q.add(7);      // Initially queue is 3 4 2 8 1 7     sortqueue(q);      while (!q.isEmpty()) {       System.out.print(q.peek() + " ");       q.poll();     }   } }  // This code is contributed by lokeshmvs21. 
Python3
# Python code to implement the approach  # Function to push element in last # by popping from front until size becomes 0 def frontelement(q, qsize):     # Base condition     if qsize <= 0:         return      # Pop front element and push     # this last in a queue     q.append(q[0])     q.pop(0)      # Recursive call for pushing element     frontelement(q, qsize - 1)  # function for inserting element in the queue def insertelement(q, val, qsize):     if qsize == 0 or len(q) == 0:         q.append(val)         return      # If current element is greater than     # the element at the front     elif val >= q[0]:         # Call stack with front of queue         q.append(val)          # Recursive call for inserting         # a front element of the queue         # to the last         frontelement(q, qsize)     else:         # Push front element into last in a queue         q.append(q[0])         q.pop(0)          # Recursive call for pushing elements in a queue         insertelement(q, val, qsize - 1)  # Function to sort queue def sortqueue(q):     if len(q) == 0:         return     item = q[0]     q.pop(0)     sortqueue(q)     insertelement(q, item, len(q))   # Driver Code q = [3, 4, 2, 8, 1, 7]  # Initially queue is 3 4 2 8 1 7 sortqueue(q) print(q)  # This code is contributed by Tapesh(tapeshdua420) 
C#
// C# code to implement the approach using System; using System.Collections.Generic;  class Program {     // Function to push element in last     // by popping from front until size becomes 0     static void frontelement(Queue<int> q, int qsize)     {         // Base condition         if (qsize <= 0)             return;          // Pop front element and push         // this last in a queue         q.Enqueue(q.Peek());         q.Dequeue();          // Recursive call for pushing element         frontelement(q, qsize - 1);     }      // Function for inserting element in the queue     static void insertelement(Queue<int> q, int val,                               int qsize)     {         if (qsize == 0 || q.Count == 0) {             q.Enqueue(val);             return;         }          // If current element is greater than         // the element at the front         else if (val >= q.Peek()) {             // Call stack with front of queue             q.Enqueue(val);              // Recursive call for inserting             // a front element of the queue             // to the last             frontelement(q, qsize);         }         else {             // Push front element into last in a queue             q.Enqueue(q.Peek());             q.Dequeue();              // Recursive call for pushing elements in a             // queue             insertelement(q, val, qsize - 1);         }     }      // Function to sort queue     static void sortqueue(Queue<int> q)     {         if (q.Count == 0) {             return;         }         int item = q.Peek();         q.Dequeue();         sortqueue(q);         insertelement(q, item, q.Count);     }      // Driver Code     static void Main(string[] args)     {         Queue<int> q = new Queue<int>();         q.Enqueue(3);         q.Enqueue(4);         q.Enqueue(2);         q.Enqueue(8);         q.Enqueue(1);         q.Enqueue(7);          // Initially queue is 3 4 2 8 1 7         sortqueue(q);          while (q.Count != 0) {             Console.Write(q.Peek() + " ");             q.Dequeue();         }     } }  // This code is contributed by Tapesh(tapeshdua420) 
JavaScript
  // Javascript code to implement the approach    // Function to push element in last   // by popping from front until size becomes 0   function frontelement(q, qsize) {       // Base condition       if (qsize <= 0) {           return;       }        // Pop front element and push       // this last in a queue       q.push(q[0]);       q.shift();        // Recursive call for pushing element       frontelement(q, qsize - 1);   }    // function for inserting element in the queue   function insertelement(q, val, qsize) {       if (qsize == 0 || q.length == 0) {           q.push(val);           return;       }        // If current element is greater than       // the element at the front       else if (val >= q[0]) {           // Call stack with front of queue           q.push(val);            // Recursive call for inserting           // a front element of the queue           // to the last           frontelement(q, qsize);       } else {           // Push front element into last in a queue           q.push(q[0]);           q.shift();            // Recursive call for pushing elements in a queue           insertelement(q, val, qsize - 1);       }   }    // Function to sort queue   function sortqueue(q) {       if (q.length == 0) {           return;       }       var item = q[0];       q.shift();       sortqueue(q);       insertelement(q, item, q.length);   }    // Driver Code   var q = [3, 4, 2, 8, 1, 7];    // Initially queue is 3 4 2 8 1 7   sortqueue(q);   console.log(q);    // This code is contributed by Tapesh(tapeshdua420) 

Output
8 7 4 3 2 1 

Time complexity: O(N2)
Auxiliary Space: O(N)

Related Articles:

  • What is Priority Queue | Introduction to Priority Queue
  • Introduction to Queue – Data Structure and Algorithm Tutorials

Next Article
Turn a Queue into a Priority Queue

P

prakash_mondal
Improve
Article Tags :
  • Queue
  • Technical Scripter
  • DSA
  • Technical Scripter 2022
  • priority-queue
Practice Tags :
  • priority-queue
  • Queue

Similar Reads

    Priority Queue using Queue and Heapdict module in Python
    Priority Queue is an extension of the queue with the following properties. An element with high priority is dequeued before an element with low priority. If two elements have the same priority, they are served according to their order in the queue. queue.PriorityQueue(maxsize) It is a constructor fo
    3 min read
    Priority Queue Using Array
    A priority queue is a data structure that stores elements with associated priorities. In a priority queue, elements are dequeued in order of their priority, with the highest priority elements being removed first. It is commonly used in algorithms like Dijkstra's for shortest path and in real-time sc
    8 min read
    C++ STL - Reverse Priority Queue
    A priority Queue is an abstract data type that resembles a queue, and each element has a corresponding priority value. Priority queues are built on the top of the max heap and use an array or vector as an internal structure. In C++ STL, by default, the first element of the queue is the greatest of a
    2 min read
    priority_queue::swap() in C++ STL
    Priority queues are a type of container adaptors, specifically designed such that the first element of the queue is either the greatest or the smallest of all elements in the queue. However, in C++ STL (by default) the largest element is at the top. We can also create a priority queue having the sma
    3 min read
    Priority Queue using Linked List
    Implement Priority Queue using Linked Lists. The Linked List should be so created so that the highest priority ( priority is assigned from 0 to n-1 where n is the number of elements, where 0 means the highest priority and n-1 being the least ) element is always at the head of the list. The list is a
    11 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences