Queues in ADT: A Comprehensive Overview

undefined
 
Queues:
The ADT and Its Uses
 
Yih-Kuen Tsay
Dept. of Information Management
National Taiwan University
 
Based on [Carrano and Henry 2013]
With help from Chien Chin Chen
 
 
1
2
Queues (1/3)
 
A 
queue
 is like a line of people.
The first person to join a line is the first person served,
that is , to leave the line.
New items enter at the 
back
, or 
rear
, of the queue.
Items leave from the 
front
 of the queue.
First-in, first-out
 (
FIFO
) property:
The 
first item inserted
 into a queue is the 
first item to
leave
.
In contrast, a stack has the LIFO (Last-in, First-out)
property.
Yih-Kuen Tsay
DS 2016: Queues
3
Queues (2/3)
 
Queues are appropriate for many real-world
situations, e.g.,
A line to buy a movie ticket
A line to check out at the bookstore
Applications in computer science
A request to print a document
These involve waiting and people often study
them by simulations, to reduce the wait.
Yih-Kuen Tsay
DS 2016: Queues
4
Queues (3/3)
 
ADT queue operations:
Determine whether a queue is empty.
Add a new item to the queue.
Remove the item that was 
added earliest
.
Retrieve the item that was 
added earliest
.
Yih-Kuen Tsay
DS 2016: Queues
 
The ADT Queue (1/4)
 
 
Yih-Kuen Tsay
 
DS 2016: Queues
 
5
 
Source: 
FIGURE 13-1 in [Carrano and Henry 2013].
6
The ADT Queue (2/4)
 
Data
A finite number of objects, not necessarily distinct, having
the same type and 
ordered by when they were added
.
Operations
isEmpty()
Task: Determines whether this queue is empty.
Input: None.
Output: True if the queue is empty; false, otherwise.
enqueue(newEntry)
Task: Adds 
newEntry
 at the 
back
 of this queue.
Input: 
newEntry
Output: True if the operation is successful; false, otherwise.
Yih-Kuen Tsay
DS 2016: Queues
The ADT Queue (3/4)
 
dequeue()
Task: Removes the front of this queue. That is, removes the
item that was 
added earliest
.
Input: None.
Output: True if the operation is successful; false, otherwise.
 
peekFront()
Task: Returns the front of this queue. That is, gets the item
that was added earliest. The operation does not change the
queue.
Input: None.
Output: The front of the queue.
Yih-Kuen Tsay
DS 2016: Queues
7
The ADT Queue (4/4)
A scenario
Yih-Kuen Tsay
DS 2016: Queues
8
Source: 
FIGURE 13-2 in [Carrano and Henry 2013].
 
9
 
A C++ Interface for Queues (1/2)
 
 
 
 
 
 
 
 
Yih-Kuen Tsay
 
DS 2016: Queues
 
10
 
A C++ Interface for Queues (2/2)
 
 
 
 
 
 
 
 
Yih-Kuen Tsay
 
DS 2016: Queues
11
Reading a String of Characters (1/2)
 
A queue can retain characters in the order in which
they are typed:
 
 
 
 
 
 
Once the characters are in a queue, the system can
process them as necessary.
Yih-Kuen Tsay
DS 2016: Queues
12
Reading a String of Characters (2/2)
 
For example, convert
the typed digits into a
decimal value:
247
 
 247.
2 + (0 
× 
10) = 2
4 + (2 
× 
10) = 24
7 + (24 
× 
10) = 247
Yih-Kuen Tsay
DS 2016: Queues
13
Recognizing Palindromes (1/4)
 
Palindrome:
A string of characters that reads the same from left to right
as its does from right to left.
E.g., abcba (yes), abcbd (no).
 
To recognize a palindrome, you can use a 
queue
 in
conjunction with a 
stack
.
A stack reverses the order of occurrences.
A queue preserves the order of occurrences.
Yih-Kuen Tsay
DS 2016: Queues
14
Recognizing Palindromes (2/4)
 
A recognition algorithm for
palindromes:
 
As you traverse the
character string from left to
right, 
insert each character
into both a queue and a
stack
.
 
Compare the characters at
the front of the queue
 and
the top of the stack
.
Queue:
FIFO 
             
front
back
Stack:
LIFO 
 d
 b
 c
 b
 a
front
 
a
 
b
 
c
 
d
 
b
 
a
 
b
 
c
 
d
 
b
Yih-Kuen Tsay
DS 2016: Queues
Source: 
FIGURE 13-3 in [Carrano and Henry 2013].
15
Recognizing Palindromes (3/4)
Yih-Kuen Tsay
DS 2016: Queues
16
Recognizing Palindromes (4/4)
 
 // 
Compare the queue characters with the stack characters
  charactersAreEqual = 
true
  
while
 (aQueue 
is not empty
 
and
 charactersAreEqual) {
    queueFront
 = 
aQueue.peekFront()
    
stackTop
 = 
aStack.peek()
 
    
if
 (queueFront 
equals
 stackTop) {
      aQueue.dequeue()
      
aStack.pop()
    }
    
else
       charactersAreEqual = 
false
  }
  
return
 charactersAreEqual
Yih-Kuen Tsay
DS 2016: Queues
Priority Queues
 
Example : triage in a hospital’s emergency room
Operations
Test whether the priority queue is empty.
Add a new entry to the priority queue in its sorted
position based on priority value.
Remove from priority queue the entry with the highest
priority value.
Get the entry in the priority queue with the highest
priority value.
Yih-Kuen Tsay
DS 2016: Queues
17
 
The ADT Priority Queue (1/3)
 
 
Yih-Kuen Tsay
 
DS 2016: Queues
 
18
 
Source: 
FIGURE 13-4 in [Carrano and Henry 2013].
19
The ADT Priority Queue (2/3)
 
Data
A finite number of objects, not necessarily distinct, having
the same type and 
ordered by priorities
.
Operations
isEmpty()
Task: Determines whether this priority queue is empty.
Input: None.
Output: True if the priority queue is empty; false, otherwise.
add(newEntry)
Task: Adds 
newEntry
 to this priority queue.
Input: 
newEntry
Output: True if the operation is successful; false, otherwise.
Yih-Kuen Tsay
DS 2016: Queues
The ADT Priority Queue (3/3)
 
remove()
Task: Removes the entry with the highest priority from this
priority queue.
Input: None.
Output: True if the operation is successful; false, otherwise.
 
peek()
Task: Returns the entry in this priority queue with the highest
priority. The operation does not change the priority queue.
Input: None.
Output: The entry with the highest priority.
Yih-Kuen Tsay
DS 2016: Queues
20
Application: Tracking Assignments (1/2)
 
Yih-Kuen Tsay
DS 2016: Queues
21
Source: 
FIGURE 13-5 in [Carrano and Henry 2013].
 
Note : should also provide an operation for comparing the due dates
of two assignments.
Application: Tracking Assignments (2/2)
 
Yih-Kuen Tsay
DS 2016: Queues
22
assignmentLog = 
a new priority queue using due date as
                the priority value
 
project = 
a new instance of 
assignment
essay = 
a new instance of 
assignment
task = 
a new instance of 
assignment
errand = 
a new instance of 
assignment
 
assignmentLog.add(project)
assignmentLog.add(essay)
assignmentLog.add(task)
assignmentLog.add(errand)
 
cout << “I should do the following first: ”
cout << assignmenLog.peek()
23
Application: Simulation (1/12)
 
Simulation:
A technique for 
modeling the behavior
 of both natural and
human-made systems.
 
Goal:
Generate 
statistics
 that summarize the performance of an
existing system.
Predict the performance of a proposed system.
 
Example:
A simulation of the behavior of a bank.
How long (on average) does a customer have to wait for
service?
Predict the effect of hiring more tellers in the bank.
Yih-Kuen Tsay
DS 2016: Queues
24
Application: Simulation (2/12)
 
Central to a simulation is the
concept of 
simulation time
.
 
At time 0: no customers.
At time 20: the first customer arrives.
Begin the customer
s transaction
directly.
Wait 0 minutes.
At time 22: a second customer arrives.
Wait in line.
At time 26: the first transaction
completes.
The second customer waits (26-
22) = 4 minutes to begin a
transaction.
 
Average waiting time: (0+4)/2 = 2
minutes.
Yih-Kuen Tsay
DS 2016: Queues
Source: 
FIGURE 13-6 in
[Carrano and Henry 2013].
25
Application: Simulation (3/12)
 
The first step in simulating a system such as a bank is
to construct a 
mathematical model
:
Capture the relevant information about the system.
For example:
How many tellers does the bank employ?
How often do customers arrive?
A Poisson process with an average arrival rate λ
(customers/minute).
How long do transactions require?
an exponential distribution with an average service time, μ
(minute).
Yih-Kuen Tsay
DS 2016: Queues
 
Application: Simulation (4/12)
 
 
Yih-Kuen Tsay
 
DS 2016: Queues
 
26
 
Source: 
FIGURE 13-7 in [Carrano and Henry 2013].
 
A typical instance of (a) an arrival event; (b) a departure event
27
Application: Simulation (5/12)
An event-driven simulation:
Arrival events
 are generated by using a mathematical
model based on statistics and probability.
An 
arrival event
:
Time of each customer
s arrival.
The duration of that customer
s transaction.
Customer 1 arrive at time 20 and the transaction
requires 6 minutes to complete.
Generated (simulated) events,
usually stored in a file.
Yih-Kuen Tsay
DS 2016: Queues
28
Application: Simulation (6/12)
The file does not contain 
departure events
. The
simulation must determine when departures occurs.
By using the arrival time and the transaction length, the
simulation can easily determine the time at which a
customer departs.
Customer 1:    20      6
Customer 2:    22      4
Customer 3:    23      2
Customer 4:    30      3
arrival
length
start
departure
 
20
 
26
 
26
 
30
 
30
 
32
 
32
 
35
 
0
 
4
 
7
 
2
wait
 
average: 3.25
Yih-Kuen Tsay
DS 2016: Queues
29
Application: Simulation (7/12)
 
Implementation of the event-driven bank simulation:
Use an 
event list
 to keep track of 
arrival
 and
 departure
events
 that will occur but have not occurred yet.
The times of the events in the event list are in 
ascending
order
.
The next event to be processed is always at the beginning of
the list.
 
Use a 
queue
 to represent the line of customers in the bank.
Yih-Kuen Tsay
DS 2016: Queues
 
30
 
Application: Simulation (8/12)
 
Yih-Kuen Tsay
 
DS 2016: Queues
 
31
 
Application: Simulation (9/12)
 
Yih-Kuen Tsay
 
DS 2016: Queues
 
32
 
Application: Simulation (10/12)
 
Yih-Kuen Tsay
 
DS 2016: Queues
 
33
 
Application: Simulation (11/12)
 
Yih-Kuen Tsay
 
DS 2016: Queues
 
Application: Simulation (12/12)
 
Yih-Kuen Tsay
 
DS 2016: Queues
 
34
 
Source: 
FIGURE 13-8 in [Carrano and Henry 2013].
 
A trace of the bank simulation algorithm
 
data
35
Position-Oriented vs. Value-Oriented ADTs
 
Position-oriented
 ADTs:
Operations defined in terms of the 
positions
 of their data
items, e.g.,
Stack: only one end position can be accessed
List: all positions can be accessed
Queue:  only the two end positions can be accessed.
 
Value-Oriented
 ADTs:
Operations defined in terms of the 
values
 of their data
items, e.g.,
Sorted list (not covered)
Priority queue: entries ordered according to their priorities
 
The ADT bag is neither of these two categories.
Yih-Kuen Tsay
DS 2016: Queues
36
Stack vs. Queue
 
Stacks and queues are very similar.
 
Their operations can be 
paired off
 as:
isEmpty
 vs. 
isEmpty
.
push
 vs. 
enqueue
.
pop
 vs. 
dequeue
.
peek
 vs. 
peekFront
.
 
The difference lies in 
whether a function
manipulates the front or the back of the ADT.
Yih-Kuen Tsay
DS 2016: Queues
List vs. Stack and Queue
 
You can insert into, delete from, and inspect the
item at any position of the ADT list.
 
So, you can view the ADT list as 
general versions
 of
the ADT stack and queue.
getLength
 
can emulate 
isEmpty
insert
 
can emulate
 
push
 and 
enqueue
remove
 
can emulate
 
pop
 and 
dequeue
getEntry
 
can emulate
 
peek
 and 
peekFront
Yih-Kuen Tsay
DS 2016: Queues
37
Slide Note
Embed
Share

Queues, an abstract data type (ADT), play a crucial role in computer science and real-world scenarios. This article explores the concept of queues, their properties like FIFO (First-in, First-out), and common operations associated with them. Through illustrations and explanations, you will gain a deep understanding of how queues work and their significance in various applications. Dive into the world of queues to enhance your knowledge of data structures and algorithms.

  • Queues
  • Abstract Data Type
  • FIFO
  • Data Structures
  • Computer Science

Uploaded on Oct 03, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. SVVRL @ IM.NTU Queues: The ADT and Its Uses Yih-Kuen Tsay Dept. of Information Management National Taiwan University Based on [Carrano and Henry 2013] With help from Chien Chin Chen 1 / 37

  2. SVVRL @ IM.NTU Queues (1/3) A queue is like a line of people. The first person to join a line is the first person served, that is , to leave the line. New items enter at the back, or rear, of the queue. Items leave from the front of the queue. First-in, first-out (FIFO) property: The first item inserted into a queue is the first item to leave. In contrast, a stack has the LIFO (Last-in, First-out) property. 2 Yih-Kuen Tsay DS 2016: Queues / 37

  3. SVVRL @ IM.NTU Queues (2/3) Queues are appropriate for many real-world situations, e.g., A line to buy a movie ticket A line to check out at the bookstore Applications in computer science A request to print a document These involve waiting and people often study them by simulations, to reduce the wait. 3 Yih-Kuen Tsay DS 2016: Queues / 37

  4. SVVRL @ IM.NTU Queues (3/3) ADT queue operations: Determine whether a queue is empty. Add a new item to the queue. Remove the item that was added earliest. Retrieve the item that was added earliest. 4 Yih-Kuen Tsay DS 2016: Queues / 37

  5. SVVRL @ IM.NTU The ADT Queue (1/4) Source: FIGURE 13-1 in [Carrano and Henry 2013]. Yih-Kuen Tsay DS 2016: Queues 5 / 37

  6. SVVRL @ IM.NTU The ADT Queue (2/4) Data A finite number of objects, not necessarily distinct, having the same type and ordered by when they were added. Operations isEmpty() Task: Determines whether this queue is empty. Input: None. Output: True if the queue is empty; false, otherwise. enqueue(newEntry) Task: Adds newEntry at the back of this queue. Input: newEntry Output: True if the operation is successful; false, otherwise. 6 Yih-Kuen Tsay DS 2016: Queues / 37

  7. SVVRL @ IM.NTU The ADT Queue (3/4) dequeue() Task: Removes the front of this queue. That is, removes the item that was added earliest. Input: None. Output: True if the operation is successful; false, otherwise. peekFront() Task: Returns the front of this queue. That is, gets the item that was added earliest. The operation does not change the queue. Input: None. Output: The front of the queue. Yih-Kuen Tsay DS 2016: Queues 7 / 37

  8. SVVRL @ IM.NTU The ADT Queue (4/4) A scenario Source: FIGURE 13-2 in [Carrano and Henry 2013]. Yih-Kuen Tsay DS 2016: Queues 8 / 37

  9. SVVRL @ IM.NTU A C++ Interface for Queues (1/2) /** @file QueueInterface.h */ #ifndef _QUEUE_INTERFACE #define _QUEUE_INTERFACE template<class ItemType> class QueueInterface { public: /** Sees whether this queue is empty. @return True if the queue is empty, or false if not. */ virtual bool isEmpty() const = 0; /** Adds a new entry to the back of this queue. @post If the operation was successful, newEntry is at the back of the queue. @param newEntry The object to be added as a new entry. @return True if the addition is successful or false if not.*/ virtual bool enqueue(const ItemType& newEntry) = 0; 9 Yih-Kuen Tsay DS 2016: Queues / 37

  10. SVVRL @ IM.NTU A C++ Interface for Queues (2/2) /** Removes the front of this queue. @post If the operation was successful, the front of the queue has been removed. @return True if the removal is successful or false if not. */ virtual bool dequeue() = 0; /** Returns the front of this queue. @pre The queue is not empty. @post The front of the queue has been returned, and the queue is unchanged. @return The front of the queue. */ virtual ItemType peekFront() const = 0; }; // end QueueInterface #endif 10 Yih-Kuen Tsay DS 2016: Queues / 37

  11. SVVRL @ IM.NTU Reading a String of Characters (1/2) A queue can retain characters in the order in which they are typed: // Read a string of characters into a queue aQueue = a new empty queue while (not end of line) { Read a new character into ch aQueue.enqueue(ch) } Once the characters are in a queue, the system can process them as necessary. 11 Yih-Kuen Tsay DS 2016: Queues / 37

  12. SVVRL @ IM.NTU Reading a String of Characters (2/2) // Converts digits in a queue aQueue // into a decimal integer getInteger(aQueue: Queue): integer // Get first digit, ignoring blanks do { ch = aQueue.peekFront(); aQueue.dequeue(); } while (ch is blank) // Compute n from digits in queue n = 0 done = false do { n = 10*n + (integer that ch represents) done = aQueue.isEmpty() if (!done) { ch = aQueue.peekFront(); aQueue.dequeue(); } } while (!done and ch is a digit) return n For example, convert the typed digits into a decimal value: 247 247. 2 + (0 10) = 2 4 + (2 10) = 24 7 + (24 10) = 247 12 Yih-Kuen Tsay DS 2016: Queues / 37

  13. SVVRL @ IM.NTU Recognizing Palindromes (1/4) Palindrome: A string of characters that reads the same from left to right as its does from right to left. E.g., abcba (yes), abcbd (no). To recognize a palindrome, you can use a queue in conjunction with a stack. A stack reverses the order of occurrences. A queue preserves the order of occurrences. 13 Yih-Kuen Tsay DS 2016: Queues / 37

  14. SVVRL @ IM.NTU Recognizing Palindromes (2/4) A recognition algorithm for palindromes: a b c b d String: As you traverse the character string from left to right, insert each character into both a queue and a stack. Queue: FIFO a b c b d front back Stack: LIFO d b c b a front Compare the characters at the front of the queue and the top of the stack. Source: FIGURE 13-3 in [Carrano and Henry 2013]. 14 Yih-Kuen Tsay DS 2016: Queues / 37

  15. SVVRL @ IM.NTU Recognizing Palindromes (3/4) // Tests whether a given string is a palindrome. isPalindrome(someString: string): boolean // Create an empty queue and an empty stack aQueue = a new empty queue aStack = a new empty stack // Add each character of the string to both // the queue and the stack length = length of someString for (i = 1 through length) { nextChar = i-th character of someString aQueue.enqueue(nextChar) aStack.push(nextChar) } 15 Yih-Kuen Tsay DS 2016: Queues / 37

  16. SVVRL @ IM.NTU Recognizing Palindromes (4/4) // Compare the queue characters with the stack characters charactersAreEqual = true while (aQueue is not empty and charactersAreEqual) { queueFront = aQueue.peekFront() stackTop = aStack.peek() if (queueFront equals stackTop) { aQueue.dequeue() aStack.pop() } else charactersAreEqual = false } return charactersAreEqual 16 Yih-Kuen Tsay DS 2016: Queues / 37

  17. SVVRL @ IM.NTU Priority Queues Example : triage in a hospital s emergency room Operations Test whether the priority queue is empty. Add a new entry to the priority queue in its sorted position based on priority value. Remove from priority queue the entry with the highest priority value. Get the entry in the priority queue with the highest priority value. Yih-Kuen Tsay DS 2016: Queues 17 / 37

  18. SVVRL @ IM.NTU The ADT Priority Queue (1/3) Source: FIGURE 13-4 in [Carrano and Henry 2013]. Yih-Kuen Tsay DS 2016: Queues 18 / 37

  19. SVVRL @ IM.NTU The ADT Priority Queue (2/3) Data A finite number of objects, not necessarily distinct, having the same type and ordered by priorities. Operations isEmpty() Task: Determines whether this priority queue is empty. Input: None. Output: True if the priority queue is empty; false, otherwise. add(newEntry) Task: Adds newEntry to this priority queue. Input: newEntry Output: True if the operation is successful; false, otherwise. 19 Yih-Kuen Tsay DS 2016: Queues / 37

  20. SVVRL @ IM.NTU The ADT Priority Queue (3/3) remove() Task: Removes the entry with the highest priority from this priority queue. Input: None. Output: True if the operation is successful; false, otherwise. peek() Task: Returns the entry in this priority queue with the highest priority. The operation does not change the priority queue. Input: None. Output: The entry with the highest priority. Yih-Kuen Tsay DS 2016: Queues 20 / 37

  21. SVVRL @ IM.NTU Application: Tracking Assignments (1/2) Note : should also provide an operation for comparing the due dates of two assignments. Source: FIGURE 13-5 in [Carrano and Henry 2013]. Yih-Kuen Tsay DS 2016: Queues 21 / 37

  22. SVVRL @ IM.NTU Application: Tracking Assignments (2/2) assignmentLog = a new priority queue using due date as the priority value project = a new instance of assignment essay = a new instance of assignment task = a new instance of assignment errand = a new instance of assignment assignmentLog.add(project) assignmentLog.add(essay) assignmentLog.add(task) assignmentLog.add(errand) cout << I should do the following first: cout << assignmenLog.peek() Yih-Kuen Tsay DS 2016: Queues 22 / 37

  23. SVVRL @ IM.NTU Application: Simulation (1/12) Simulation: A technique for modeling the behavior of both natural and human-made systems. Goal: Generate statistics that summarize the performance of an existing system. Predict the performance of a proposed system. Example: A simulation of the behavior of a bank. How long (on average) does a customer have to wait for service? Predict the effect of hiring more tellers in the bank. 23 Yih-Kuen Tsay DS 2016: Queues / 37

  24. SVVRL @ IM.NTU Application: Simulation (2/12) Central to a simulation is the concept of simulation time. At time 0: no customers. At time 20: the first customer arrives. Begin the customer s transaction directly. Wait 0 minutes. At time 22: a second customer arrives. Wait in line. At time 26: the first transaction completes. The second customer waits (26- 22) = 4 minutes to begin a transaction. Average waiting time: (0+4)/2 = 2 minutes. Source: FIGURE 13-6 in [Carrano and Henry 2013]. 24 Yih-Kuen Tsay DS 2016: Queues / 37

  25. SVVRL @ IM.NTU Application: Simulation (3/12) The first step in simulating a system such as a bank is to construct a mathematical model: Capture the relevant information about the system. For example: How many tellers does the bank employ? How often do customers arrive? A Poisson process with an average arrival rate (customers/minute). How long do transactions require? an exponential distribution with an average service time, (minute). 25 Yih-Kuen Tsay DS 2016: Queues / 37

  26. SVVRL @ IM.NTU Application: Simulation (4/12) A typical instance of (a) an arrival event; (b) a departure event Source: FIGURE 13-7 in [Carrano and Henry 2013]. Yih-Kuen Tsay DS 2016: Queues 26 / 37

  27. SVVRL @ IM.NTU Application: Simulation (5/12) An event-driven simulation: Arrival events are generated by using a mathematical model based on statistics and probability. 20 6 An arrival event: Time of each customer s arrival. The duration of that customer s transaction. 22 4 23 2 Customer 1 arrive at time 20 and the transaction requires 6 minutes to complete. 30 3 Generated (simulated) events, usually stored in a file. 27 Yih-Kuen Tsay DS 2016: Queues / 37

  28. SVVRL @ IM.NTU Application: Simulation (6/12) The file does not contain departure events. The simulation must determine when departures occurs. By using the arrival time and the transaction length, the simulation can easily determine the time at which a customer departs. arrival length start 20 departure 26 wait Customer 1: 20 6 0 Customer 2: 22 4 Customer 3: 23 2 Customer 4: 30 3 26 30 32 30 32 35 4 7 2 average: 3.25 28 Yih-Kuen Tsay DS 2016: Queues / 37

  29. SVVRL @ IM.NTU Application: Simulation (7/12) Implementation of the event-driven bank simulation: Use an event list to keep track of arrival and departure events that will occur but have not occurred yet. The times of the events in the event list are in ascending order. The next event to be processed is always at the beginning of the list. Use a queue to represent the line of customers in the bank. 29 Yih-Kuen Tsay DS 2016: Queues / 37

  30. SVVRL @ IM.NTU Application: Simulation (8/12) // Performs the simulation. simulate(): void Create an empty queue bankQueue to represent the bank line Create an empty priority queue eventListPQueue for the event list tellerAvailable = true // Create and add arrival events to event list while (data file is not empty) { Get next arrival time a and transaction time t from file newArrivalEvent = a new arrival event containing a and t eventListPQueue.add(newArrivalEvent) } 30 Yih-Kuen Tsay DS 2016: Queues / 37

  31. SVVRL @ IM.NTU Application: Simulation (9/12) // Event loop while (eventListPQueue is not empty) { newEvent = eventListPQueue.peek() // Get current time currentTime = time of newEvent if (newEvent is an arrival event) processArrival(newEvent, eventListPQueue, bankQueue) else processDeparture(newEvent, eventListPQueue, bankQueue) } 31 Yih-Kuen Tsay DS 2016: Queues / 37

  32. SVVRL @ IM.NTU Application: Simulation (10/12) // Processes an arrival event. processArrival(arrivalEvent: Event, eventListPQueue:PriorityQueue, bankQueue:Queue) // Remove this event from the event list eventListPQueue.remove() customer = customer referenced in arrivalEvent if (bankQueue.isEmpty() && tellerAvailable) { departureTime = currentTime + transaction time in arrivalEvent newDepartureEvent = a new departure event with departureTime eventListPQueue.add(newDepartureEvent) tellerAvailable = false } else bankQueue.enqueue(customer) 32 Yih-Kuen Tsay DS 2016: Queues / 37

  33. SVVRL @ IM.NTU Application: Simulation (11/12) // Processes a departure event. processDeparture(departureEvent: Event, eventListPQueue:PriorityQueue, bankQueue:Queue) // Remove this event from the event list eventListPQueue.remove() if (!bankQueue.isEmpty()) { // Customer at front of line begins transaction customer = bankQueue.peek() bankQueue.dequeue() departureTime = currentTime + transaction time in customer newDepartureEvent = a new departure event with departureTime eventListPQueue.add(newDepartureEvent) } else tellerAvailable = true 33 Yih-Kuen Tsay DS 2016: Queues / 37

  34. SVVRL @ IM.NTU Application: Simulation (12/12) data A trace of the bank simulation algorithm Source: FIGURE 13-8 in [Carrano and Henry 2013]. Yih-Kuen Tsay DS 2016: Queues 34 / 37

  35. SVVRL @ IM.NTU Position-Oriented vs. Value-Oriented ADTs Position-oriented ADTs: Operations defined in terms of the positions of their data items, e.g., Stack: only one end position can be accessed List: all positions can be accessed Queue: only the two end positions can be accessed. Value-Oriented ADTs: Operations defined in terms of the values of their data items, e.g., Sorted list (not covered) Priority queue: entries ordered according to their priorities The ADT bag is neither of these two categories. 35 Yih-Kuen Tsay DS 2016: Queues / 37

  36. SVVRL @ IM.NTU Stack vs. Queue Stacks and queues are very similar. Their operations can be paired off as: isEmpty vs. isEmpty. push vs. enqueue. pop vs. dequeue. peek vs. peekFront. The difference lies in whether a function manipulates the front or the back of the ADT. 36 Yih-Kuen Tsay DS 2016: Queues / 37

  37. SVVRL @ IM.NTU List vs. Stack and Queue You can insert into, delete from, and inspect the item at any position of the ADT list. So, you can view the ADT list as general versions of the ADT stack and queue. getLength can emulate isEmpty insert can emulate push and enqueue remove can emulate pop and dequeue getEntry can emulate peek and peekFront Yih-Kuen Tsay DS 2016: Queues 37 / 37

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#