I need to implement a priority queue in C programming using singly linked list.
I do not have a clear idea about priority queue. I googled but didn’t fully understand what I found. My understanding is that a priority queue is a queue whose elements are ordered by priority. Insertions into the list are positioned within the list on the basis of the element priorities.
Lets say,we have following scenario. (Note : I assume, higher value goes with higher priority):
Element-->2 (priority=2) (Now in position 0)
If another element needs to be inserted, say Element-->3 (priority=3) which has a higher priority.
I can move the previous element, Element-->2 (priority=2), and insert this new Element-->3 (priority=3) at position 0 with Element-->2 (priority=2) moved to position 1 in the list.
Now the list becomes,
Element-->3 (priority=3) followed by Element-->2 (priority=2)
Similarly, on the basis of insertion, do I have to shift all the elements in the list?
Is this correct?
You don’t have to “shift” the list, instead when inserting you do something like this (pseudo-code):
If your list has a pointer to the end, you can add a special check for a priority lower than the end as well.