Basic Data Types Queues Richard Newman Based on Sedgewick and Wayne 1
Stacks and Queues Stacks Dynamic Resizing Queues Generics Iterators Applications 2
Fundamental data types • Values: sets of objects • Operations: insert, remove, test if empty. • Intent is clear when we insert. • Which item do we remove? 3
Fundamental data types Stack: Remove the item most recently added. (*LIFO – “last in first out”) Analogy: Cafeteria trays. Web surfing. Queue: Remove the item least recently added. (*FIFO – “first in first out”) Analogy: Grocery store checkout line. 4
Queue API Public class Queue: Can be any type (stay tuned) ENQUEUE Queue ( ) Create an empty queue Void enqueue (String S) Insert a new item onto stack String dequeue ( ) Remove and return the item least recently added Boolean isEmpty ( ) Is the queue empty? ENQUEUE DEQUEUE NEWEST OLDEST 5
Queue: linked-list implementation Can it be done with a singly linked list? a) No – not efficiently b) c) d) IDK Most recent Least recent of best the was it Most recent Least recent of best the was it
Dequeue: linked-list implementation tail head of best the was it String item = head.item; “it” tail head of best the was it head = head.next; tail head of best the was return item; “it”
Enqueue: linked-list implementation tail oldTail head best the was it Node oldTail = tail; tail oldTail head of best the was it tail = new Node(); tail.item = “of”; tail oldTail head of best the was it oldTail.next = tail;
Queues: array implementation Use array q[ ] to store items in queue enqueue() add new item at q[++tail] dequeue() remove item from q[head++] Update (increment) head and tail modulo capacity q[] it was the best of head 1 2 3 4 5 tail
Queues: array implementation enqueue() add new item at q[++tail] q[] it was the best of times 1 2 3 4 5 6 head tail
Queues: array implementation dequeue() remove item from q[head++] q[] it was the best of times 1 2 3 4 5 6 head tail
Queues: array implementation Update (increment) head and tail modulo capacity (7) q[] was was the best of times it 1 2 3 4 5 6 head tail
Dynamic Resizing Queues: array implementation Arrays are instantiated with a specific size Q: How to grow queue when capacity reached? Q: When to shrink array when queue shrinks? A: What do you think? :)
Next: Generics