0% found this document useful (0 votes)
114 views13 pages

CSE 373 Data Structures and Algorithms: Lecture 2: Queues

This document discusses queues and their implementation. It begins by defining queues as lists with FIFO behavior, allowing insertion at one end and deletion at the other. Common queue operations like enqueue, dequeue and peek are introduced. Real-world examples of queues in operating systems, programming and everyday life are provided. Implementation of queues using arrays and linked lists are covered, highlighting advantages of each approach. The document concludes with interfaces for a generic queue and string-specific queue.

Uploaded by

Pushpa Pathak
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
114 views13 pages

CSE 373 Data Structures and Algorithms: Lecture 2: Queues

This document discusses queues and their implementation. It begins by defining queues as lists with FIFO behavior, allowing insertion at one end and deletion at the other. Common queue operations like enqueue, dequeue and peek are introduced. Real-world examples of queues in operating systems, programming and everyday life are provided. Implementation of queues using arrays and linked lists are covered, highlighting advantages of each approach. The document concludes with interfaces for a generic queue and string-specific queue.

Uploaded by

Pushpa Pathak
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 13

CSE 373

Data Structures and Algorithms


Lecture 2: Queues
Queue ADT
 queue: A list with the restriction that insertions are done
at one end and deletions are done at the other
 First-In, First-Out ("FIFO”)
 Elements are stored in order of
insertion but don't have indexes.
 Client can only add to the end of the
queue, and can only examine/remove
the front of the queue.

 basic queue operations:


 add (enqueue): Add an element to the back.
 remove (dequeue): Remove the front element.
 peek: Examine the element at the front.

2
Queues in computer science
 Operating systems:
 queue of print jobs to send to the printer
 queue of programs / processes to be run
 queue of network data packets to send

 Programming:
 modeling a line of customers or clients
 storing a queue of computations to be performed in order

 Real world examples:


 people on an escalator or waiting in a line
 cars at a gas station (or on an assembly line)

3
Using Queues
add(value) places given value at back of queue
remove() removes value from front of queue and returns it;
throws a NoSuchElementException if queue is empty
peek() returns front value from queue without removing it;
returns null if queue is empty
size() returns number of elements in queue
isEmpty() returns true if queue has no elements
Queue<Integer> q = new LinkedList<Integer>();
q.add(42);
q.add(-3);
q.add(17); // front [42, -3, 17] back
System.out.println(q.remove()); // 42

 IMPORTANT: When constructing a queue you must use a new


LinkedList object instead of a new Queue object.

4
Queue idioms
 As with stacks, must pull contents out of queue to view them.
while (!q.isEmpty()) {
do something with q.remove();
}

 another idiom: Examining each element exactly once.


int size = q.size();
for (int i = 0; i < size; i++) {
do something with q.remove();
(including possibly re-adding it to the queue)
}

 Why do we need the size variable

5
Implementing Queue ADT: Array Queue
 Keep track of the number of elements in the queue,
size.
 Enqueue at the back of the array (size).
 Dequeue at the front of the array (index 0).

 what is bad about this implementation?


 what if we enqueue at 0 and dequeue at size?

6
Implementing Queue ADT:
Circular Array Queue

 Neat trick: use a circular array to 7 0

insert and remove items from a queue 6 1


in constant time.
 The idea of a circular array is that the 5 2
end of the array “wraps around” to the
start of the array. 4 3

Q: 0 size - 1
b c d e f
front back

7
Circular Array Queue
Q: 0 size - 1
b c d e f
front back
// Basic idea only!
enqueue(x) {
Q[back] = x;
back = (back + 1) % size
}
// Basic idea only!
dequeue() {
x = Q[front];
front = (front + 1) % size;
return x;
}
8
Linked List Queue
b c d e f

front back

// Basic idea only!


enqueue(x) {
back.next = new Node(x);
back = back.next;
}
// Basic idea only!
dequeue() {
x = front.item;
front = front.next;
return x;
}
9
Queue: Circular Array vs. Linked List
 Circular Array  Linked List
 May waste unneeded space  Always just enough space
or run out of space  But more space per
 Space per element element
excellent  Operations very simple /
 Operations very simple / fast
fast

 If we wanted add the ability to access the kth element to


our queue, could both implementations support this?

10
Exercise: Linked List Queue Implementation
 Implement a queue class that stores String values using a
singly linked list with both nodes to indicate the front and
the back of the queue as below. The queue should
implement the interface on the next slide.

b c d e f

front back

11
String Queue Interface
/**
* Interface for a queue of Strings.
*/
public interface StrQueue {
/**
* Tests if the queue is empty.
*/
public boolean isEmpty();

/**
* Inserts an element at the end of the queue.
*/
public void enqueue(String str);

/**
* Deletes and returns the element at the front of the queue.
* @return the deleted value; throws NoSuchElementException if empty
*/
public String dequeue();
}

12
Generic Queue Interface
/**
* Interface for a queue.
*/
public interface Queue<E> {
/**
* Tests if the queue is empty.
*/
public boolean isEmpty();

/**
* Inserts an element at the end of the queue.
*/
public void enqueue(E e);

/**
* Deletes and returns the element at the front of the queue.
* @return the deleted value; throws NoSuchElementException if empty
*/
public E dequeue();
}

13

You might also like