Académique Documents
Professionnel Documents
Culture Documents
Queues part2
Dr. Bernard Chen Ph.D.
University of Central Arkansas
Introduction to Queues
Introduction to Queues
ADT in Queues
Queue ADT
Basic operations
Construct a queue
Check if empty
Enqueue (add element to back)
Front (retrieve value of element from
front)
Dequeue (remove element from front)
myFront, myBack
Picture a queue
object like this
Queue Operation
Empty Queue
Enqueue(70)
Queue Operation
Enqueue(80)
Enqueue(50)
Queue Operation
Dequeue()
Dequeue()
Queue Operation
Enqueue(90)
Enqueue(60)
Circular Queue
Problems
Possible solutions
Circular Queue
Circular Example
Front
b
Back
Front
QUEUE
Queue Operation
Construct:
Create an array, set capacity,
myFront=myBack=0
Empty:
test myFront==myBack
Front :
if not empty:
print array[myFront]
Algorithm for
Enqueue(value)
1. Set newBack ==
(myBack+1)%Queue_capacity
2. If newBack == myFront
Signal Queue Full
otherwise:
Set Array[myBack] == value
Set myBack == newBack
If queue is empty
signal Queue Empty
Otherwise
Set
myFront=(myFront+1)%Queue_capacity
Linked Queues
Linked Queues
Constructor initializes
myFront, myBack
Empty
myFront == Null
Front
return myFront->data
Dequeue
Delete first node (watch for empty queue)
Enqueue
Insert node at end of list
Enqueue
newptr= new Node(value)
if (empty())
myFront=myBack=newptr;
else
{
myBack->next=newptr;
myBack=newwptr;
}
Dequeue
(if not empty)
ptr=myFront
myFront=myFront->next
delete ptr;
Basic operations
Construct a queue
Check if empty
Enqueue (add element to back)
Front (retrieve value of element from
front)
Dequeue (remove element from front)
L.begin();
Dequeue
L.erase( L.begin() );
Constructor: vector<int> L;
Empty():
L.size() == 0?
Enqueue():
L.push_back(value);
Front():
L.begin();
Dequeue():
L.erase(L.begin());
QUEUE
Vector Functions
Queue + Stack
Push(value)=Enqueue(value)
Pop(); Top() --- top of stack
Dequeue(); Front()