Priority Queues are abstract data structures where each data/value in the queue has a certain priority. For example, In airlines, baggage with the title “Business” or “First-class” arrives earlier than the rest.

Priority Queue is an extension of the queue with the following properties.

1) An element with high priority is dequeued before an element with low priority.

2) If two elements have the same priority, they are served according to their order in the queue.

Various **applications** of Priority queue in Computer Science are:

Job Scheduling algorithms, CPU and Disk Scheduling, managing resources that are shared among different processes, etc.

**Key differences between Priority Queue and Queue:**

1)In Queue, the oldest element is dequeued first. While, in Priority Queue, element based on highest priority is dequeued.

2)When elements are popped out of a priority queue then result obtained in either sorted in Increasing order or in Decreasing Order. While, when elements are popped from a simple queue, a FIFO order of data is obtained in the result.

Below is **simple implementation** of priority queue.

`# A simple implementation of Priority Queue ` `# using Queue. ` `class` `PriorityQueue(` `object` `): ` ` ` `def` `__init__(` `self` `): ` ` ` `self` `.queue ` `=` `[] ` ` ` ` ` `def` `__str__(` `self` `): ` ` ` `return` `' '` `.join([` `str` `(i) ` `for` `i ` `in` `self` `.queue]) ` ` ` ` ` `# for checking if the queue is empty ` ` ` `def` `isEmpty(` `self` `): ` ` ` `return` `len` `(` `self` `.queue) ` `=` `=` `0` ` ` ` ` `# for inserting an element in the queue ` ` ` `def` `insert(` `self` `, data): ` ` ` `self` `.queue.append(data) ` ` ` ` ` `# for popping an element based on Priority ` ` ` `def` `delete(` `self` `): ` ` ` `try` `: ` ` ` `max` `=` `0` ` ` `for` `i ` `in` `range` `(` `len` `(` `self` `.queue)): ` ` ` `if` `self` `.queue[i] > ` `self` `.queue[` `max` `]: ` ` ` `max` `=` `i ` ` ` `item ` `=` `self` `.queue[` `max` `] ` ` ` `del` `self` `.queue[` `max` `] ` ` ` `return` `item ` ` ` `except` `IndexError: ` ` ` `print` `() ` ` ` `exit() ` ` ` `if` `__name__ ` `=` `=` `'__main__'` `: ` ` ` `myQueue ` `=` `PriorityQueue() ` ` ` `myQueue.insert(` `12` `) ` ` ` `myQueue.insert(` `1` `) ` ` ` `myQueue.insert(` `14` `) ` ` ` `myQueue.insert(` `7` `) ` ` ` `print` `(myQueue) ` ` ` `while` `not` `myQueue.isEmpty(): ` ` ` `print` `(myQueue.delete()) ` |

*chevron_right*

*filter_none*

**Output:**

12 1 14 7 14 12 7 1

Note that the time complexity of delete is O(n) in the above code.

A **better implementation** is to use Binary Heap which is typically used to implement priority queue. Note that Python provides **heapq** in library also.

By using heap datastructure to implement Priority Queues, Time complexity: Insert Operation: O(log(n)) Delete Operation: O(log(n))

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Priority Queue using Queue and Heapdict module in Python
- Multithreaded Priority Queue in Python
- Applications of Priority Queue
- Priority Queue | Set 1 (Introduction)
- Huffman Coding using Priority Queue
- Priority Queue of Vectors in C++ STL with Examples
- Priority Queue using Linked List
- Implementation of Priority Queue in Javascript
- Double ended priority queue
- Priority queue of pairs in C++ (Ordered by first)
- Implementation of Non-Preemptive Shortest Job First using Priority Queue
- Priority queue of pairs in C++ with ordering by first and second element
- Priority Queue using doubly linked list
- Priority Queue in C++ Standard Template Library (STL)
- How to implement stack using priority queue or heap?
- Why is Binary Heap Preferred over BST for Priority Queue?
- Find the K closest points to origin using Priority Queue
- CPU Scheduling in Operating Systems using priority queue with gantt chart
- Stack and Queue in Python using queue Module
- Python - Combine dictionary with priority

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.