Presentation is loading. Please wait.

Presentation is loading. Please wait.

Queues by Dr. Bun Yue Professor of Computer Science 2013 CSCI 3333 Data Structures.

Similar presentations


Presentation on theme: "Queues by Dr. Bun Yue Professor of Computer Science 2013 CSCI 3333 Data Structures."— Presentation transcript:

1 Queues by Dr. Bun Yue Professor of Computer Science yue@uhcl.edu http://sce.uhcl.edu/yue/ 2013 yue@uhcl.edu http://sce.uhcl.edu/yue/ CSCI 3333 Data Structures

2 Acknowledgement  Mr. Charles Moen  Dr. Wei Ding  Ms. Krishani Abeysekera  Dr. Michael Goodrich

3 Queues  First In First Out (FIFO) data structure.

4 Queues  The Queue ADT stores arbitrary objects  Insertions and deletions follow the first-in first-out scheme  Insertions are at the rear of the queue and removals are at the front of the queue  Main queue operations: enqueue(object): inserts an element at the end of the queue object dequeue(): removes and returns the element at the front of the queue

5 Queue Operations  Some auxiliary queue operations: object front(): returns the element at the front without removing it integer size(): returns the number of elements stored boolean isEmpty(): indicates whether no elements are stored  Exceptions Attempting the execution of dequeue or front on an empty queue throws an EmptyQueueException

6 Queue Example OperationOutputQ enqueue( 5 ) – ( 5 ) enqueue( 3 ) – ( 5, 3 ) dequeue() 5 ( 3 ) enqueue( 7 ) – ( 3, 7 ) dequeue() 3 ( 7 ) front() 7 ( 7 ) dequeue() 7 () dequeue() “error” () isEmpty() true () enqueue( 9 ) – ( 9 ) enqueue( 7 ) – ( 9, 7 ) size( )2 ( 9, 7 ) enqueue( 3 ) – ( 9, 7, 3 ) enqueue( 5 ) – ( 9, 7, 3, 5 ) dequeue() 9 ( 7, 3, 5 )

7 Queue Interface in Java  Not a class!  Super-interfaces: Collection Iterable  Sub-interfaces: BlockingDeque : waits for queue to become non-empty when dequeue. Deque

8 Known Implementations of Queue  AbstractQueue  ArrayBlockingQueue  ArrayDeque  ConcurrentLinkedQueue  DelayQueue  LinkedBlockingDeque  LinkedBlockingQueue  LinkedList  PriorityBlockingQueue  PriorityQueue  SynchronousQueue

9 Some Implementation Criteria  As queues are general data structures for widespread use, there are variations to fit different applications. Some considerations: Implementation: array vs. linked list. Thread safe or not. Blocking or not. Synchronous or not: i.e. rendezvous in Ada Allow null elements or not.

10 Applications of Queues  Some direct applications Waiting lists, bureaucracy Access to shared resources (e.g., printer) Simulation Breadth-first traversals Multiprogramming Messaging  Indirect applications Auxiliary data structure for algorithms Component of other data structures

11 Array-based Queue  Use an array of size N in a circular fashion  Two variables keep track of the front and rear f index of the front element r index immediately past the rear element  Array location r is kept empty Q 012rf normal configuration Q 012fr wrapped-around configuration

12 Queue Operations  We use the modulo operator (remainder of division) Algorithm size() return (N  f + r) mod N Algorithm isEmpty() return (f  r) Q 012rf Q 012fr

13 Queue Operations (cont.) Algorithm enqueue(o) if size() = N  1 then throw FullQueueException else Q[r]  o r  (r + 1) mod N  Operation enqueue throws an exception if the array is full  This exception is implementation- dependent Q 012rf Q 012fr

14 Queue Operations (cont.)  Operation dequeue throws an exception if the queue is empty  This exception is specified in the queue ADT Algorithm dequeue() if isEmpty() then throw EmptyQueueException else o  Q[f] f  (f + 1) mod N return o Q 012rf Q 012fr

15 Queue Interface in Java  Java interface corresponding to our Queue ADT  Requires the definition of class EmptyQueueException  No corresponding built-in Java class public interface Queue { public int size(); public boolean isEmpty(); public Object front() throws EmptyQueueException; public void enqueue(Object o); public Object dequeue() throws EmptyQueueException; }

16 Linked List Implementation  We have already implemented methods necessary for the queue ADT (under different method names) using a singly linked list.

17 Application: Round Robin Schedulers  We can implement a round robin scheduler using a queue, Q, by repeatedly performing the following steps: 1. e = Q.dequeue() 2. Service element e 3. Q.enqueue(e) The Queue Shared Service 1.Deque the next element 3.Enqueue the serviced element 2.Service the next element

18 Palindrome in C++: Spot the error #include “Stack.h”; #include “Queue.h”; #include using namespace std; int main() {// Incorrect solution. Can you see it? StackS; QueueQ; charch; cout << “Enter string to be tested as palindrome: “; while (cin >> ch) { S.push(ch); Q.enqueue(ch); } bool pal = true; while (!Q.isEmpty()) pal = Q.dequeue() == S.pop(); if (pal) cout << “Palindrome!!” << endl; return EXIT_SUCCESS; }

19 Example: Queue in Ruby  Ruby is a newer object oriented scripting language using some software engineering principles.  We use a queue example in Ruby to illustrative the use of queues for concurrent processes.  There is no need to understand all details of the example.

20 Queue.rb require 'thread' queue = Queue.new producer = Thread.new do# concurrent thread 1 5.times do |i| sleep rand(i) # simulate expense queue << i puts "#{i} produced" end consumer = Thread.new do# concurrent thread 2 5.times do |i| value = queue.pop sleep rand(i/2) # simulate expense puts "consumed #{value}" end consumer.join

21 Executing Queue.rb 0 produced 1 produced consumed 0 2 produced consumed 1 consumed 2 3 produced consumed 3 4 produced consumed 4

22 Discussion  Similar operations because of similar ADT new << (push): enqueue pop: dequeue  “thread-safe”

23 Questions and Comments?


Download ppt "Queues by Dr. Bun Yue Professor of Computer Science 2013 CSCI 3333 Data Structures."

Similar presentations


Ads by Google