Presentation is loading. Please wait.

Presentation is loading. Please wait.

Introduction to C Programming CE00312-1 Lecture 12 Circular Queue and Priority Queue Data Structures.

Similar presentations


Presentation on theme: "Introduction to C Programming CE00312-1 Lecture 12 Circular Queue and Priority Queue Data Structures."— Presentation transcript:

1 Introduction to C Programming CE00312-1 Lecture 12 Circular Queue and Priority Queue Data Structures

2 Recap on Queues 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) deleteq (item, queue) begin if front = rear then queueempty else begin item = q[front] front = front+1 end end

3 Queues Front = 0 Rear = 0 4 3 1 2 0 4 3 1 2 0 4 3 1 2 0 4 3 1 2 0 Front = 0 Rear = 3 Front = 2 Rear = 3 Front = 2 Rear = 5 Array size = 5 d c e a b cc

4 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

5 C Queue Front = 2 Rear = 0 4 3 1 2 0 4 3 1 2 0 4 3 1 2 0 4 3 1 2 0 Front = 2 Rear = 1 Front = 4 Rear = 1 Front = 0 Rear = 2 d c e e c d e f ff g

6 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

7 Circular Queues If rear++ == front Insertion would cause overflow If rear = front Removal would cause underflow 4 3 1 2 0 Front = 3 Rear = 2 c d b a

8 Circular Queue Functions 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) end end Deletion from a queue (dequeue) deleteq (item, queue) begin if front = rear then queueunderflow else begin item = q[front] front = front+1 front = front mod (size –1) end end

9 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

10 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

11 Heap sort

12 Add 44 to heap

13 Heap sort

14

15 Now add 47

16 Heap sort

17 End result

18 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?

19 Heap sort Root removed

20 Heap sort

21

22

23 Array Implementation 4544332229 1 2 3 4 5678 9 1224 Where leaf nodes are 2n and 2n+1 Or root is n div 2 using integer division

24 Array Implementation 4544332229 1 2 3 4 5678 9 12242124 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

25 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


Download ppt "Introduction to C Programming CE00312-1 Lecture 12 Circular Queue and Priority Queue Data Structures."

Similar presentations


Ads by Google