260 likes | 390 Vues
Introduction to C Programming CE00312-1. Lecture 12 Circular Queue and Priority Queue Data Structures. Addition to a queue (enqueue) addq (item , queue) begin if rear = size then queuefull else begin q[rear] = item increment rear end end. Deletion from a queue (dequeue)
E N D
Introduction to C ProgrammingCE00312-1 Lecture 12 Circular Queue and Priority Queue Data Structures
Addition to a queue (enqueue) addq (item , queue)begin if rear = size then queuefull else begin q[rear] = item increment rear endend Deletion from a queue (dequeue) deleteq (item , queue) beginif front = rear then queueempty else begin item = q[front] front = front+1 endend Recap on Queues
4 4 4 4 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0 Queues e d c c c b a Front = 2 Rear = 5 Array size = 5 Front = 0 Rear = 0 Front = 0 Rear = 3 Front = 2 Rear = 3
Circular Array • Allows array to wrap round to the front • Array bounds no longer dictate empty or full • How do I define empty /Full • Underflow/Overflow • If pointer to front catches up with rear on dequeuing then underflow • If result of enqueing means rear pointer = front then overflow
4 4 4 4 3 3 3 3 2 2 2 2 1 1 1 1 0 0 0 0 C Queue e e e d d c c g f f f Front = 2 Rear = 0 Front = 2 Rear = 1 Front = 4 Rear = 1 Front = 0 Rear = 2
Circular Queue • Front = rear is used to define both empty and full • Sacrifice one element in the array by initialising size to size –1 • If rear = front can’t add element • Test for remove happened before front is updated
Circular Queues 4 • If rear++ == front • Insertion would cause overflow • If rear = front • Removal would cause underflow c 3 d 2 1 b a 0 Front = 3 Rear = 2
Addition to a queue (enqueue) addq (item , queue)begin if rear + 1 = front then queueoverflow else begin q[rear] = item increment rear rear = rear mod (size –1)endend Deletion from a queue (dequeue) deleteq (item , queue) beginif front = rear then queueunderflow else begin item = q[front] front = front+1 front = front mod (size –1) endend Circular Queue Functions
Priority Queue • Stacks and queues are linear structures • Very efficient in terms of insertion and deletion • Not so efficient for locating specific data • We have to do several operations of load and unload to access specific data • Priority is a means of storing data such that unloading produces most relevant data to an operation • E.g. most important process running in job scheduler • Uses ‘heap sort’ which always puts highest priority at head of queue • Not the same as a conventional ordinal sort
Priority • Priority is defined as the largest or highest ranking • Stack deletes newest • Queue deletes oldest • Priority queue deletes highest priority • Newest item inserted to retain integrity of priority • Employs heap sort
Heap sort Add 44 to heap
Heap sort Now add 47
Heap sort End result
Heap • Attempts to maintain complete tree • Balanced • Fills from left to right on each level • No more than one level between leaves • Root always contains highest priority value • Deletion always is from root • Heap reorganised on deletion • How?
Heap sort Root removed
45 44 33 22 29 12 24 1 2 3 4 5 6 7 8 9 Array Implementation Where leaf nodes are 2n and 2n+1 Or root is n div 2 using integer division
45 44 33 22 29 12 24 21 24 1 2 3 4 5 6 7 8 9 21 is in position 8 – 8/2 = 4 22 is in pos 4 – no swap 24 is in position 9 – 9/2 = 4 22 is in pos 4 – swap Array Implementation
Recap • Circular queues more efficient than standard queue • Linked list implementation of queue obviates need for circular queue. Dynamic. • Priority Queue always yields highest priority for deletion • Implements heap sort • Maintains complete tree structure