CSCE 3110 Data Structures & Algorithm Analysis: Rada Mihalcea
CSCE 3110 Data Structures & Algorithm Analysis: Rada Mihalcea
Queues
Reading: Chap. 3 Weiss
Queue
Stores a set of elements in a particular order
Stack principle: FIRST IN FIRST OUT
= FIFO
It means: the first element inserted is the first one to
be removed
Example
D rear
C rear C D rear
B rear B B C
rear front A front
A A front A front B
front
Applications: Job Scheduling
front rear Q[0] Q[1] Q[2] Q[3] Comments
-1 -1 queue is empty
-1 0 J1 Job 1 is added
-1 1 J1 J2 Job 2 is added
-1 2 J1 J2 J3 Job 3 is added
0 2 J2 J3 Job 1 is deleted
1 2 J3 Job 2 is deleted
Queue ADT
objects: a finite ordered list with zero or more elements.
methods:
for all queue Queue, item element,
max_ queue_ size positive integer
Queue createQ(max_queue_size) ::=
create an empty queue whose maximum size is
max_queue_size
Boolean isFullQ(queue, max_queue_size) ::=
if(number of elements in queue == max_queue_size)
return TRUE
else return FALSE
Queue Enqueue(queue, item) ::=
if (IsFullQ(queue)) queue_full
else insert item at rear of queue and return queue
Queue ADT (cont’d)
Implementation 1
Implementation 2
Implementation 1:
createQ, isEmptyQ, isFullQ
Queue createQ(max_queue_size) ::=
# define MAX_QUEUE_SIZE 100/* Maximum queue size */
typedef struct {
int key;
/* other fields */
} element;
element queue[MAX_QUEUE_SIZE];
int rear = -1;
int front = -1;
Boolean isEmpty(queue) ::= front == rear
Boolean isFullQ(queue) ::= rear == MAX_QUEUE_SIZE-1
Implementation 1:
enqueue
front = 0 front = 0
rear = 0 rear = 3
J5 J6 J5
front =0 front =4
rear = 5 rear =3
How to test when queue is empty?
How to test when queue is full?
Enqueue in a Circular Queue
enqueue O(?)
dequeue O(?)
size O(?)
isEmpty O(?)
isFull O(?)