Priority queues are abstract data types where each element has a priority, and elements with higher priorities are dequeued before those with lower priorities. They are commonly implemented using heaps, which allow for efficient insertion and removal of the highest-priority elements.