Queue Basics

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

QUEUE

A queue is a linear list of elements in which deletion can take place only at one

end, called the front, and insertions can take place only at the other end, called the rear.
The term front and rear are used in describing a linear list only when it is
implemented as a queue.
Queue is also called first-in-first-out (FIFO) lists. Since the first element in a

queue will be the first element out of the queue. In other words, the order in which
elements enters a queue is the order in which they leave.
There are main two ways to implement a queue :
1. Circular queue using array
2. Linked Structures (Pointers)

Primary queue operations:


Enqueue : insert an element at the rear of the queue
Dequeue : remove an element from the front of the queue Following is the algorithm
which describes the implementation of Queue using an Array.
Insertion in Queue:

Following Figure shows that how a queue may be maintained by a circular array with
MAXSIZE = 6 (Six memory locations). Observe that queue always occupies consecutive
locations except when it occupies locations at the beginning and at the end of the array.
If the queue is viewed as a circular array, this means that it still occupies consecutive
locations. Also, as indicated by Fig(k), the queue will be empty only when Count = 0 or
(Front = Rear but not null) and an element is deleted. For this reason, -1 (null) is
assigned to Front and Rear.

DEQUEUE (OR) DEQUE (DOUBLE ENDED QUEUE)


DeQueue is a data structure in which elements may be added to or deleted from
the front or the rear.
Like an ordinary queue, a double-ended queue is a data structure it supports the
following operations: enq_front, enq_back, deq_front, deq_back, and empty.
Dequeue can be behave like a queue by using only enq_front and deq_front , and
behaves like a stack by using only enq_front and deq_rear.

The DeQueue is represented as follows.

DeQueue can be represented in two ways they are,


1) Input restricted DeQueue 2) output restricted DeQueue
The out put restricted Dequeue allows deletions from only one end and input restricted
Dequeue allow insertions at only one end.
The DeQueue can be constructed in two ways they are
1.Using array 2. using linked list
Algorithm to add an element into DeQueue :
Assumptions: pointer f,r and initial values are -1,-1
Q[] is an array
max represent the size of a queue
enq_front
step1. Start
step2. Check the queue is full or not as if (f <>
step3. If false update the pointer f as f= f-1
step4. Insert the element at pointer f as Q[f] = element
step5. Stop
enq_back
step1. Start
step2. Check the queue is full or not as if (r == max-1) if yes queue is full
step3. If false update the pointer r as r= r+1
step4. Insert the element at pointer r as Q[r] = element
step5. Stop

Algorithm to delete an element from the DeQueue


deq_front
step1. Start
step2. Check the queue is empty or not as if (f == r) if yes queue is empty
step3. If false update pointer f as f = f+1 and delete element at position f as element =
Q[f]
step4. If ( f== r) reset pointer f and r as f=r=-1
step5. Stop
deq_back
step1. Start
step2. Check the queue is empty or not as if (f == r) if yes queue is empty
step3. If false delete element at position r as element = Q[r]
step4. Update pointer r as r = r-1
step5. If (f == r ) reset pointer f and r as f = r= -1
step6. Stop
PRIORITY QUEUE
Priority queue is a linear data structure. It is having a list of items in which each
item has associated priority. It works on a principle add an element to the queue with
an associated priority and remove the element from the queue that has the highest
priority. In general different items may have different priorities. In this queue highest or
the lowest priority item are inserted in random order. It is possible to delete an element
from a priority queue in order of their priorities starting with the highest priority.
While priority queues are often implemented with heaps, they are conceptually
distinct from heaps. A priority queue is an abstract concept like "a list" or "a map"; just as
a list can be implemented with a linked list or an array, a priority queue can be
implemented with a heap or a variety of other methods such as an unordered array.

Operations on Priority Queue:


A priority queue must at least support the following operations:
insert_with_priority: add an element to the queue with an associated priority.
pull_highest_priority_element: remove the element from the queue that has the
highest priority, and return it.

This

is

also

known

as

"pop_element(Off)",

"get_maximum_element"

or

"get_front(most)_element". Some conventions reverse the order of priorities, considering


lower

values

to

be

higher

priority,

so

this

may

also

be

known

as

"get_minimum_element", and is often referred to as "get-min" in the literature. This may


instead

be

specified

"delete_element"

as

functions,

separate
which

"peek_at_highest_priority_element"
can

be

combined

to

and

produce

"pull_highest_priority_element".
In addition, peek (in this context often called find-max or find-min), which
returns the highestpriority element but does not modify the queue, is very frequently
implemented, and nearly always executes in O(1) time. This operation and its O(1)
performance is crucial to many applications of priority queues.
More advanced implementations may support more complicated operations,
such as pull_lowest_priority_element, inspecting the first few highest- or lowestpriority elements, clearing the queue, clearing subsets of the queue, performing a batch
insert, merging two or more queues into one, incrementing priority of any element, etc.
CIRCULAR QUEUE:
In a standard queue data structure re-buffering problem occurs for each dequeue
operation. To solve this problem by joining the front and rear ends of a queue to make
the queue as a circular queue Circular queue is a linear data structure. It follows FIFO
principle.

In
a

circular queue the last node is connected back to the first node to make
circle.

Circular

linked list fallow the First In First Out principle.

Elements

are added at the rear end and the elements are deleted at front

end of the
Both
It

queue.

the front and the rear pointers points to the beginning of the array.
is also called as Ring buffer.

Items

can inserted and deleted from a queue in O(1) time.

Circular Queue can be created in three ways they are,


Using single linked list
Using double linked list
Using arrays
Using single linked list:
It is an extension for the basic single linked list. In circular linked list Instead of storing
a Null value in the last node of a single linked list, store the address of the 1st node
(root) forms a circular linked list. Using circular linked list it is possible to directly
traverse to the first node after reaching the last node.
The following figure shows circular single linked list:

Using double linked list


In double linked list the right side pointer points to the next node address or the
address of first node and left side pointer points to the previous node address or the
address of last node of a list. Hence the above list is known as circular double linked
list.
The following figure shows Circular Double linked list :-

Algorithm for creating circular linked list :Step 1) start


Step 2) create anode with the following fields to store information and the address of
the next node.
Structure node
begin
int info
pointer to structure node called next
end
Step 3) create a class called clist with the member variables of pointer to structure
nodes called root, prev, next and the member functions create ( ) to create the circular
linked list and display ( ) to display the circular linked list.
Step 4) create an object called C of clist type
Step 5) call C. create ( ) member function
Step 6) call C. display ( ) member function
Step 7) stop
Algorithm for create ( ) function:Step 1) allocate the memory for newnode
newnode = new (node )

Step 2) newnode->next=newnode. // circular


Step 3) Repeat the steps from 4 to 5 until choice = n
Step 4) if (root=NULL)
root = prev=newnode // prev is a running pointer which points last node of a
list
else
newnode->next = root
prev->next = newnode
prev = newnode
Step 5) Read the choice
Step 6) return
Algorithm for display ( ) function :Step 1) start
Step 2) declare a variable of pointer to structure node called temp, assign root to temp
temp = root
Step 3) display temp->info
Step 4) temp = temp->next
Step 5) repeat the steps 6 until temp = root
Step 6) display temp info
Step 7) temp=temp->next
Step 8) return
Using array
In arrays the range of a subscript is 0 to n-1 where n is the maximum size. To make
the array as a circular array by making the subscript 0 as the next address of the
subscript n-1 by using the formula subscript = (subscript +1) % maximum size. In
circular queue the front and rear pointer are updated by using the above formula.
Algorithm for Enqueue operation using array
Step 1. start
Step 2. if (front == (rear+1)%max)

Print error circular queue overflow


Step 3. else
{ rear = (rear+1)%max
Q[rear] = element;
If (front == -1 ) f = 0;
}
Step 4. stop

Algorithm for Dequeue operation using array


Step 1. start
Step 2. if ((front == rear) && (rear == -1))
Print error circular queue underflow
Step 3. else
{ element = Q[front]
If (front == rear) front=rear = -1
Else
Front = (front + 1) % max
}
Step 4. stop

You might also like