Check if Stack is Empty or Full in DSA Python - Time & Space Complexity
We want to understand how fast we can check if a stack is empty or full.
This helps us know how much time these checks take as the stack size changes.
Analyze the time complexity of the following code snippet.
class Stack:
def __init__(self, capacity):
self.capacity = capacity
self.items = []
def is_empty(self):
return len(self.items) == 0
def is_full(self):
return len(self.items) == self.capacity
This code checks if the stack has no items or if it has reached its capacity.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Checking the length of the list (stack items).
- How many times: Once per call to
is_emptyoris_full.
The length check is a simple operation that takes the same time no matter how many items are in the stack.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1 |
| 100 | 1 |
| 1000 | 1 |
Pattern observation: The time to check does not grow with the number of items; it stays constant.
Time Complexity: O(1)
This means checking if the stack is empty or full takes the same small amount of time no matter how big the stack is.
[X] Wrong: "Checking if a stack is full or empty takes longer as the stack grows because it needs to look at all items."
[OK] Correct: The check only looks at the count of items, not each item, so it takes the same time regardless of stack size.
Knowing that these checks are very fast helps you focus on more complex stack operations during interviews.
"What if the stack was implemented using a linked list instead of a list? How would the time complexity of checking if it is empty or full change?"
Practice
isEmpty() function check in a stack?Solution
Step 1: Understand the purpose of
TheisEmpty()isEmpty()function checks whether the stack contains any elements or not.Step 2: Identify what empty means for a stack
An empty stack means it has zero elements, soisEmpty()returns true if no elements are present.Final Answer:
If the stack has no elements -> Option DQuick Check:
Empty stack means no elements = true [OK]
- Confusing empty with full
- Thinking it checks for one element
- Assuming it checks for capacity
stack is full in Python assuming max size is stored in max_size and current size in top?Solution
Step 1: Understand stack full condition
A stack is full when the current top index equals the maximum allowed size.Step 2: Match condition with syntax
The correct check istop == max_sizeto confirm fullness.Final Answer:
if top == max_size: print('Stack is full') -> Option AQuick Check:
Full stack when top equals max size [OK]
- Using greater than instead of equal
- Using less than for full check
- Using not equal instead of equal
class Stack:
def __init__(self, max_size):
self.stack = []
self.max_size = max_size
def isFull(self):
return len(self.stack) == self.max_size
def isEmpty(self):
return len(self.stack) == 0
s = Stack(2)
s.stack.append(10)
s.stack.append(20)
print(s.isFull())
print(s.isEmpty())Solution
Step 1: Check stack contents after append
Two elements (10, 20) are added, so length is 2 which equals max_size.Step 2: Evaluate isFull and isEmpty
isFull()returns True because length equals max_size;isEmpty()returns False because stack is not empty.Final Answer:
True False -> Option CQuick Check:
Stack full = True, empty = False [OK]
- Confusing isFull and isEmpty return values
- Ignoring stack length after append
- Assuming stack is empty after append
class Stack:
def __init__(self):
self.stack = []
def isEmpty(self):
if self.stack == 0:
return True
else:
return False
s = Stack()
print(s.isEmpty())Solution
Step 1: Analyze the isEmpty condition
The code comparesself.stack == 0, butself.stackis a list, not a number.Step 2: Identify correct way to check empty list
To check if list is empty, uselen(self.stack) == 0or simplynot self.stack.Final Answer:
Comparing list to integer zero causes error -> Option BQuick Check:
List cannot be compared to number 0 [OK]
- Comparing list directly to 0
- Forgetting list length check
- Using wrong comparison operator
isFull() and isEmpty() methods?class Stack:
def __init__(self, max_size):
self.stack = []
self.max_size = max_size
def push(self, val):
if len(self.stack) < self.max_size:
self.stack.append(val)
def pop(self):
if not self.isEmpty():
return self.stack.pop()
def isFull(self):
return len(self.stack) == self.max_size
def isEmpty(self):
return len(self.stack) == 0
s = Stack(3)
s.push(1)
s.push(2)
s.push(3)
s.pop()
print(s.isFull())
print(s.isEmpty())Solution
Step 1: Track stack size after operations
Initially push 3 elements, stack size = 3 (full). After pop, size reduces to 2.Step 2: Evaluate isFull and isEmpty
Since size is 2 and max_size is 3,isFull()returns False. Stack is not empty, soisEmpty()returns False.Final Answer:
False False -> Option AQuick Check:
Stack size 2 < max size 3, not empty [OK]
- Assuming stack is still full after pop
- Assuming stack is empty after pop
- Ignoring size changes after pop
Ready to prove it?
Pass the test and this pattern moves unknown
