CMUQ 15-121 Stacks and Queues
1. Introduction
Let’s take a moment and talk about two new abstract data types: Stacks and Queues.
2. Stack
A stack is a data structure that is LIFO (Last-In-First-Out). You can picture it as a stack of items where you put new items on the top and also remove items from the top.
2.1. Interface
Here is a simple interface that could be used to describe a stack:
public interface Stack<DataType> { // Return true if the stack is empty, false otherwise boolean isEmpty(); // Put a new item on top of the stack void push(DataType value); // Remove the top item from the stack and return it DataType pop(); // Return the top item from the stack, but don't remove it from the stack DataType peek(); }
2.2. Real World Stacks
Here are some real-world example of stack usage:
- Stacks of plates at a buffet. (New plates are put on top, and plates are also removed from the top.)
- “Undo” operations in programs. (You undo the last change made.)
- RPN calculators.
3. Queue
A queue is a data structure that is FIFO (First-In-First-Out). You can picture it as a tube. You put items into one end, but you remove them from the other end.
3.1. Interface
Here is a simple interface that could be used to describe a queue:
public interface Queue<DataType> { // Return true if the queue is empty boolean isEmpty(); // Put a new item onto the end of the queue void enqueue(DataType value); // Remove an item from the head the queue and return it DataType dequeue(); // Return the item from the head of the queue, but don't remove it from the queue DataType peek(); }
3.2. Real World Queues
Here are some real-world examples of queue usage:
- The check-out line at the grocery store.
- The list of students on the whiteboard during a busy office hours session.
- The way food should be stored and used in your refrigerator.
4. Questions to Think About
- If you implement a stack with an
ArrayList
, can all the operations be \(O(1)\)? Why or why not? - If you implement a stack with a
LinkedList
, can all the operations be \(O(1)\)? Why or why not? - If you implement a queue with an
ArrayList
, can all the operations be \(O(1)\)? Why or why not? - If you implement a queue with a
LinkedList
, can all the operations be \(O(1)\)? Why or why not?