+ All Categories
Home > Documents > Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A...

Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A...

Date post: 11-Aug-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
30
Data Structures in Java Lecture 7: Queues. 9/30/2015 1 Daniel Bauer
Transcript
Page 1: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Data Structures in JavaLecture 7: Queues.

9/30/2015

1

Daniel Bauer

Page 2: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

The Queue ADT• A Queue Q is a sequence of N objects

A0, A1, A2, …, AN-1

• A0 is called the front of Q, AN-1 is called the back of Q.

• A queue has two operations:

• void enqueue(x) - append element x to the back of Q.

• Object dequeue() - remove and return the front of Q.

• Queues are also known as First In First Out (FIFO) storage.

Page 3: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Queue Example

5

front back

Page 4: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Queue Example

5

front back

2

enqueue(2)

Page 5: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Queue Example

5

front back

2

enqueue(2) enqueue(17)

17

Page 6: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Queue Example

5

front back

2

enqueue(2) enqueue(17)

17

enqueue(23)

23

Page 7: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Queue Examplefront back

2

enqueue(2) enqueue(17)

17

enqueue(23)

23

dequeue() -> 5

Page 8: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Queue Examplefront back

enqueue(2) enqueue(17)

17

enqueue(23)

23

dequeue() -> 5 dequeue() -> 2

Page 9: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Implementing Queues• Think of a Queue as a specialized List:

• enqueue: Inserts only allowed at the end of the list.

• dequeue: Remove only allowed at the beginning of the list.

• Can implement Queue using LinkedList implementation or using arrays.

• enqueue and dequeue run in O(1) time with LinkedList.

• What happens during dequeue in an Array?

Page 10: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

A Queue Interfaceinterface Queue<T> { /** * Insert a new item at the back of the queue */ public void enqueue(T x); /** * Remove and return the next item from the * front of the queue. */ public T dequeue(); /** * Return the next item from the * front of the queue but do not remove it. */ public T getFront();

}

Page 11: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Using MyLinkedList to implement Queue

public class LinkedListQueue<T> extends MyLinkedList<T> implements Queue<T> {

public void enqueue(T x) { add(size(), x); }

public T dequeue() { return remove(0); }}

Page 12: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Dequeue on ArrayLists

5 2 17

front back

Page 13: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Dequeue on ArrayLists

5 2 17

front back

23

enqueue(23)

Page 14: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Dequeue on ArrayLists

2 17

front back

23

enqueue(23) dequeue() -> 5

Page 15: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Dequeue on ArrayLists

17

front back

23

enqueue(23) dequeue() -> 5 dequeue() -> 2

Page 16: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Dequeue on ArrayLists

17

front back

23

enqueue(23) dequeue() -> 5 dequeue() -> 2

enqueue(7)

7

Page 17: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Dequeue on ArrayLists

17

front back

23

enqueue(23) dequeue() -> 5 dequeue() -> 2

enqueue(7)

7

enqueue(42)

Page 18: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Dequeue on ArrayLists

5 2 17

front back

23 7

enqueue(42)

Need to reserve larger array, even though there is plenty of space at the beginning of the array.

Page 19: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Dequeue on ArrayLists

5 2 17

front back

23 7

enqueue(42)

Need to reserve larger array, even though there is plenty of space at the beginning of the array.

42

Page 20: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Circular Array

5 9 17

front back

23 7

enqueue(42) enqueue(9)

Page 21: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Circular Array

5 9 17

frontback

23 7

enqueue(42) enqueue(9)

Page 22: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Circular Array

5 9 17

frontback

23 7

enqueue(42) enqueue(9)

Page 23: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Circular Array

5 9 17

frontback

23 7

enqueue(42) enqueue(9)

dequeue() -> 17

Page 24: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Implementing Queue with a Circular Array

(example code)

Page 25: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Java Collections API

http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html

interface Collection

interface Listinterface Set interface Queue

interface IterableIterator (T) iterator()

interface Deque

LinkedList

ArrayList

ArayDeque

Page 26: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

The Java Collection API

http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html

package java.util;

interface Collection<E> extends Iterable<E> { boolean add(E e); boolean addAll(Collection<? extends E> c); void clear(); boolean contains(Object o); boolean containsAll(Collection<?> c); boolean isEmpty(); Iterator<E> iterator(); // via Iterable boolean remove(Object o); boolean removeAll(Collection<?> c); boolean retainAll(Collection<?> c); int size(); Object[] toArray(); <T> T[] toArray(T[] a); }

Page 27: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Java API List Interface

http://docs.oracle.com/javase/7/docs/api/java/util/List.html

package java.util;

interface List<E> extends Collection<E> { E get(int index); int indexOf(Object o); int lastIndexOf(Object o); E remove(int index); E set(int index, E element); List<E> subList(int fromIndex, int toIndex) }

Page 28: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Java Queue Interface

http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html

package java.util;

interface Queue<E> extends Collection<E> { /* These methods throw exception on failure */ boolean add(E e); // enqueue E remove(); // dequeue E element(); // Retrieve, but do not remove, front /* These methods return null on failure */ boolean offer(E e); //enqueue E poll(); // dequeue E peek();}

Page 29: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Java Deque Interface

http://docs.oracle.com/javase/7/docs/api/java/util/Dequeue.html

package java.util;

interface Deque<E> extends Collection<E> { /* These methods throw exception on failure */ boolean addFirst(E e); boolean addLast(E e); E removeFirst(); // dequeue E removeLast(); // dequeue E getFirst(); E getLast(); /* These methods return null on failure */ …}

A linear collection that supports element insertion and removal at both ends. The name deque is short for "double ended queue" and is usually pronounced "deck"

Page 30: Data Structures in Java - Columbia Universitybauer/cs3134-f15/slides/w3134-1...The Queue ADT • A Queue Q is a sequence of N objects A0, A1, A2, …, AN-1 • A0 is called the front

Deques can be Queues or Stacks

• Stack view: addFirst(E e) ~ push(E e) E removeFirst() ~ E pop()E getFirst() ~ E peek() / top()

• Queue view: addLast(E e) ~ enqueue(E e) / add(E e) E removeFirst() ~ dequeue() / remove() E getFirst() ~ element()


Recommended