Download presentation
Presentation is loading. Please wait.
Published byJune Barker Modified over 9 years ago
1
Data Structures Using Java1 Chapter 7 Queues
2
Data Structures Using Java2 Chapter Objectives Learn about queues Examine various queue operations Learn how to implement a queue as an array Learn how to implement a queue as a linked list Discover priority queues Discover queue applications
3
Data Structures Using Java3 Queues Definition: data structure in which the elements are added at one end, called the rear, and deleted from the other end, called the front or first First In First Out (LIFO) data structure
4
Data Structures Using Java4 Basic Operations on a Queue initializeQueue: Initializes the queue to an empty state isEmptyQueue: Determines whether the queue is empty. If the queue is empty, it returns the value true; otherwise, it returns the value false
5
Data Structures Using Java5 Basic Operations on a queue isFullQueue: Determines whether the queue is full. If the queue is full, it returns the value true; otherwise, it returns the value false front: Returns the front (first) element of the queue; the queue must exist back: Returns the front (first) element of the queue; the queue must exist
6
Data Structures Using Java6 Basic Operations on a queue addQueue: Adds a new element to the rear of the queue; the queue must exist and must not be full deleteQueue: Removes the front element of the queue; the queue must exist and must not be empty
7
Data Structures Using Java7 Queue Exception Class Adding an element to a full queue, and removing an element from an empty queue, generates errors and exceptions called queue overflow and queue underflow exception Exception classes designed to handle these exceptions
8
Data Structures Using Java8 Implementation of Queues as Arrays Initially queue is empty; queueFront and queueRear point directly to first and last elements of queue To implement a queue as an array we need: –An array –The variables queueFront and queueRear to keep track of the first and last elements of the queue –The variable maxQueueSize to specify the maximum size of the queue
9
Data Structures Using Java9 Implementation of Queues as Arrays
10
Data Structures Using Java10 Implementation of Queues as Arrays
11
Data Structures Using Java11 Circular Queue Possible problem: If a sequence of operations eventually sets index queueRear to point to last array position, it gives the impression that the queue is full. However, the queue has only two or three elements and front of the array is empty (see Figure 7-4).
12
Data Structures Using Java12 Circular Queue
13
Data Structures Using Java13 Circular Queue
14
Data Structures Using Java14 Circular Queue
15
Data Structures Using Java15 Implementation of Queues as Arrays Case 1: Suppose that after certain operations, the array containing the queue is as shown below
16
Data Structures Using Java16 Implementation of Queues as Arrays deleteQueue operation results in an empty queue
17
Data Structures Using Java17 Implementation of Queues as Arrays Case 2: Let us now consider the queue shown below
18
Data Structures Using Java18 Implementation of Queues as Arrays Resulting array in Figure 7-11 represents a full queue
19
Data Structures Using Java19 Full Queue vs. Empty Queue Problem: distinguishing between an empty and a full queue Arrays in Figures 7-9 and 7-11 have identical values for queueFront and queueRear Solutions: –Keep a count –Let queueFront indicate index of array position preceding first element of queue, rather than index of actual first element itself (see Figure 7-12)
20
Data Structures Using Java20 UML Diagram of the class QueueClass
21
Data Structures Using Java21 Initialize Queue public void initializeQueue() { for(int i = queueFront; i < queueRear; i = (i + 1) % maxQueueSize) list[i] = null; queueFront = 0; queueRear = maxQueueSize - 1; count = 0; }
22
Data Structures Using Java22 Empty Queue and Full Queue public boolean isEmptyQueue() { return (count == 0); } public boolean isFullQueue() { return (count == maxQueueSize); }
23
Data Structures Using Java23 front public DataElement front() throws QueueUnderflowException { if(isEmptyQueue()) throw new QueueUnderflowException(); DataElement temp = list[queueFront].getCopy(); return temp; }
24
Data Structures Using Java24 back public DataElement back() throws QueueUnderflowException { if(isEmptyQueue()) throw new QueueUnderflowException(); DataElement temp = list[queueRear].getCopy(); return temp; }
25
Data Structures Using Java25 Add Queue public void addQueue(DataElement queueElement) throws QueueOverflowException { if(isFullQueue()) throw new QueueOverflowException(); queueRear = (queueRear + 1) % maxQueueSize; //use the mod //operator to advance queueRear //because the array is circular count++; list[queueRear] = queueElement.getCopy(); }
26
Data Structures Using Java26 Delete Queue public void deleteQueue() throws QueueUnderflowException { if(isEmptyQueue()) throw new QueueUnderflowException(); count--; list[queueFront] = null; queueFront = (queueFront + 1) % maxQueueSize; //use the mod //operator to advance queueFront //because the array is circular }
27
Data Structures Using Java27 Constructor –creates an array of the size specified by the user –Default value is 100 –Initializes queueFront queueRear to indicate that the queue is empty
28
Data Structures Using Java28 Linked Queue as an ADT
29
Data Structures Using Java29 Empty and Full Queue Queue is empty if queueFront is NULL Queue is full only if we run out of memory
30
Data Structures Using Java30 addQueue Adds a new element to the end of the queue Access the reference variable queueRear to implement addQueue
31
Data Structures Using Java31 Front, Back, and Delete Queue If queue is nonempty: –operation front returns the first element of the queue –operation back returns the last element of the queue –operation deleteQueue removes the first element of the queue If queue is empty: –method front terminates the program –method back terminates the program
32
Data Structures Using Java32 Priority Queue FIFO rules of a queue are relaxed Customers or jobs with higher priority are pushed to front of queue To implement: –use an ordinary linked list, which keeps the items in order from the highest to lowest priority –use a treelike structure
33
Data Structures Using Java33 Application of Queues Simulation: technique in which one system models the behavior of another system; used when it is too expensive or dangerous to experiment with real systems Simulation examples: –wind tunnels used to experiment with design of car bodies –flight simulators used to train airline pilots Computer simulations: objects being usually represented as data
34
Data Structures Using Java34 Theater Problem The manager of a local movie theater is hearing complaints from customers about the time they have to wait in line to buy tickets. The theater currently has only one cashier. Another theater is preparing to open in the neighborhood and the manager is afraid of losing customers. The manager wants to hire enough cashiers so that a customer does not have to wait too long to buy a ticket, but does not want to hire extra cashiers on a trial basis and potentially waste time and money. One thing that the manager would like to know is the average time a customer has to wait for service. The manager wants someone to write a program to simulate the behavior of the theater.
35
Data Structures Using Java35 Queuing System Server: object that provides the service Customer: object receiving the service transaction time: service time; time it takes to serve a customer time-driven simulation: clock is implemented as a counter and the passage of time (e.g. 1 minute) can be implemented by incrementing the counter (by 1)
36
Data Structures Using Java36 Application of Queues
37
Data Structures Using Java37 Application of Queues
38
Data Structures Using Java38 Application of Queues
39
Data Structures Using Java39 waitingCustomerQueue class WaitingCustomerQueue extends QueueClass { //default constructor public WaitingCustomerQueue() { super(); } //constructor with a parameter public WaitingCustomerQueue(int size) { super(size); } //copy constructor public WaitingCustomerQueue(WaitingCustomerQueue otherQ) { super(otherQ); } //Method to increment the waiting time of each //customer in the queue by one time unit. //Postcondition: The waiting time of each customer in // the queue is incremented by one time unit. public void updateWaitingQueue() { //Definition as given below. }
40
Data Structures Using Java40 Poisson Distribution Need to know the number of customers arriving at a given time unit and how long it takes to serve each customer. Use Poisson distribution from statistics, which says probability of y events occurring at a given time is given by: where is the expected value that y events occur at that time.
41
Data Structures Using Java41 Chapter Summary Queue Data Structure –Restricted Version of arrays and linked list –Basic operations First In First Out (FIFO) Queues Implemented as Arrays
42
Data Structures Using Java42 Chapter Summary Queues Implemented as Linked Lists Priority Queues Application of Queues
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.