Push Operation on Stack in DSA Rust - Time & Space Complexity
We want to understand how long it takes to add an item to a stack.
Specifically, how the time changes as the stack grows.
Analyze the time complexity of the following code snippet.
struct Stack {
elements: Vec<i32>,
}
impl Stack {
fn push(&mut self, value: i32) {
self.elements.push(value);
}
}
This code adds a new value to the top of the stack using a vector.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Adding one element to the vector (stack).
- How many times: Once per push call.
Each push adds one item. Usually, this takes the same small amount of time no matter how big the stack is.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1 |
| 100 | 1 |
| 1000 | 1 |
Pattern observation: The time stays about the same no matter how many items are in the stack.
Time Complexity: O(1)
This means adding an item takes a constant amount of time regardless of stack size.
[X] Wrong: "Push takes longer as the stack grows because it has to move all elements."
[OK] Correct: The vector adds at the end, so it does not move existing elements each time. Occasionally it resizes, but that cost is spread out over many pushes.
Knowing push is fast and constant time helps you explain why stacks are good for quick adds and removes.
"What if the stack was implemented with a linked list instead of a vector? How would the time complexity change?"
Practice
push operation do in a stack data structure?Solution
Step 1: Understand stack behavior
A stack follows Last In First Out (LIFO) principle, where elements are added or removed from the top.Step 2: Define push operation
The push operation adds a new element on top of the existing elements in the stack.Final Answer:
Adds an element to the top of the stack -> Option BQuick Check:
Push = Add top element [OK]
- Confusing push with pop operation
- Thinking push removes elements
- Assuming push adds to the bottom
5 onto a stack implemented as a Vec<i32> named stack?Solution
Step 1: Recall Rust Vec push method
In Rust,Vechas a methodpushto add elements at the end (top of stack).Step 2: Check method names
add,insert, andappendhave different meanings or require different parameters.Final Answer:
stack.push(5); -> Option AQuick Check:
Vec push method = stack.push(5); [OK]
- Using .add() which does not exist for Vec
- Confusing .insert() which needs index
- Using .append() which merges vectors
let mut stack = Vec::new();
stack.push(10);
stack.push(20);
stack.push(30);
println!("{:?}", stack);Solution
Step 1: Trace push operations
Elements 10, 20, and 30 are pushed in order, so stack contains [10, 20, 30].Step 2: Understand Vec print format
Printing with {:?} shows elements in insertion order, so output is [10, 20, 30].Final Answer:
[10, 20, 30] -> Option AQuick Check:
Push order preserved in Vec print [OK]
- Assuming stack prints top element first
- Confusing push order with pop order
- Expecting reversed output
let stack = Vec::new(); stack.push(100);
Solution
Step 1: Check variable mutability
The variablestackis declared immutable by default, so push cannot modify it.Step 2: Understand push method requirements
push requires the vector to be mutable to add elements.Final Answer:
stack is immutable, cannot push -> Option DQuick Check:
Mutable vector needed for push [OK]
- Forgetting to add 'mut' keyword
- Thinking Vec::new() is wrong syntax
- Assuming push is not a Vec method
Vec<i32> and push elements 1, 2, 3 in that order. After pushing, you want to print the stack from top to bottom. Which code snippet correctly achieves this?Solution
Step 1: Push elements in order
Elements 1, 2, 3 are pushed in order, so stack is [1, 2, 3] with 3 at top.Step 2: Print from top to bottom
To print from top (last pushed) to bottom, iterate in reverse order usingiter().rev().Final Answer:
Code snippet with stack.iter().rev() -> Option CQuick Check:
Reverse iteration prints top to bottom [OK]
- Printing in normal order shows bottom to top
- Pushing elements in reverse order
- Using into_iter() which consumes the stack
Ready to prove it?
Pass the test and this pattern moves unknown
