Bird
Raised Fist0
DSA Pythonprogramming~10 mins

Dynamic Stack Using Resizable Array in DSA Python - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to add an element to the top of the stack.

DSA Python
def push(self, item):
    if self.size == len(self.array):
        self.resize()
    self.array[self.size] = [1]
    self.size += 1
Drag options to blanks, or click blank then click option'
Aitem
Bself.size
Clen(self.array)
Dself.array
Attempts:
3 left
💡 Hint
Common Mistakes
Using self.size instead of item to assign the value.
Trying to assign to self.array instead of an index.
2fill in blank
medium

Complete the code to remove and return the top element from the stack.

DSA Python
def pop(self):
    if self.size == 0:
        raise IndexError('pop from empty stack')
    self.size -= 1
    item = self.array[[1]]
    return item
Drag options to blanks, or click blank then click option'
A0
Bself.size
Clen(self.array) - 1
Dself.size - 1
Attempts:
3 left
💡 Hint
Common Mistakes
Accessing self.array[self.size - 1] which is incorrect after decrement.
Returning the wrong element index.
3fill in blank
hard

Fix the error in the resize method to double the array size correctly.

DSA Python
def resize(self):
    new_capacity = len(self.array) [1] 2
    new_array = [None] * new_capacity
    for i in range(self.size):
        new_array[i] = self.array[i]
    self.array = new_array
Drag options to blanks, or click blank then click option'
A//
B+
C-
D*
Attempts:
3 left
💡 Hint
Common Mistakes
Using addition instead of multiplication.
Using integer division which reduces size.
4fill in blank
hard

Fill both blanks to create a dictionary comprehension that maps each word to its length if length is greater than 3.

DSA Python
{word: [1] for word in words if len(word) [2] 3}
Drag options to blanks, or click blank then click option'
Alen(word)
B>
C<
Dword
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong comparison operator.
Mapping to the word itself instead of its length.
5fill in blank
hard

Fill all three blanks to create a dictionary comprehension that maps uppercase keys to values only if values are positive.

DSA Python
result = { [1]: [2] for k, [2] in data.items() if [2] [3] 0 }
Drag options to blanks, or click blank then click option'
Ak.upper()
Bv
C>
Dk
Attempts:
3 left
💡 Hint
Common Mistakes
Using the original key instead of uppercase.
Using wrong comparison operator or variable names.

Practice

(1/5)
1. What is the main advantage of using a dynamic stack implemented with a resizable array over a fixed-size array stack?
easy
A. It always has a fixed capacity.
B. It uses less memory than a linked list stack.
C. It does not require resizing when full.
D. It can grow or shrink automatically as elements are pushed or popped.

Solution

  1. Step 1: Understand fixed-size array stack limitation

    A fixed-size array stack has a set capacity and cannot grow beyond it, causing overflow if exceeded.
  2. Step 2: Analyze dynamic stack behavior

    A dynamic stack using a resizable array automatically increases or decreases its size when needed, avoiding overflow and wasted space.
  3. Final Answer:

    It can grow or shrink automatically as elements are pushed or popped. -> Option D
  4. Quick Check:

    Dynamic resizing = automatic growth/shrink [OK]
Hint: Dynamic stacks resize arrays automatically when full or empty [OK]
Common Mistakes:
  • Thinking dynamic stack never resizes
  • Confusing dynamic stack with linked list stack
  • Assuming fixed capacity for dynamic stack
2. Which of the following is the correct way to double the size of the internal array in a dynamic stack implemented in Python?
easy
A. self.array.extend([None] * len(self.array))
B. self.array = self.array * 2
C. self.array = [None] * (len(self.array) * 2)
D. self.array.append(self.array)

Solution

  1. Step 1: Understand array resizing in Python list

    To double the size, we add extra None elements equal to current length to the list.
  2. Step 2: Check each option

    self.array.extend([None] * len(self.array)) correctly extends the list by adding None elements equal to current length, doubling size.
  3. Final Answer:

    self.array.extend([None] * len(self.array)) -> Option A
  4. Quick Check:

    Extend with None * current length = double size [OK]
Hint: Use extend with None times current length to double array [OK]
Common Mistakes:
  • Using multiplication on list copies elements, not size
  • Assigning new list loses old elements
  • Appending array inside itself causes nested list
3. Consider this Python code for a dynamic stack push operation:
def push(self, item):
    if self.top == len(self.array):
        self.array.extend([None] * len(self.array))
    self.array[self.top] = item
    self.top += 1

stack = DynamicStack()
stack.push(10)
stack.push(20)
stack.push(30)
print(stack.array[:stack.top])
What will be the printed output?
medium
A. [10, 20, 30]
B. [10, 20, 30, None, None, None]
C. [None, None, None]
D. IndexError

Solution

  1. Step 1: Trace push calls and array state

    Initially array is empty or small. On first push, item 10 is placed at index 0, top becomes 1. Similarly for 20 and 30 at indices 1 and 2.
  2. Step 2: Print array slice up to top

    Printing array[:top] shows only elements at indices 0,1,2 which are [10, 20, 30].
  3. Final Answer:

    [10, 20, 30] -> Option A
  4. Quick Check:

    Print array slice up to top = pushed elements [OK]
Hint: Print only up to top index to see current stack elements [OK]
Common Mistakes:
  • Printing full array including None values
  • Confusing top index with length
  • Expecting error due to resizing
4. Given this buggy pop method for a dynamic stack:
def pop(self):
    if self.top == 0:
        return None
    self.top -= 1
    item = self.array[self.top]
    self.array[self.top] = None
    if self.top < len(self.array) // 4:
        self.array = self.array[:len(self.array) // 2]
    return item
What is the main issue with this code?
medium
A. It does not set popped element to None.
B. It does not check for empty stack before popping.
C. It shrinks the array too early, causing frequent resizing.
D. It doubles the array size instead of shrinking.

Solution

  1. Step 1: Understand shrinking condition

    The array shrinks when top is less than one-fourth of array length, which can cause frequent resizing if elements fluctuate near this threshold.
  2. Step 2: Identify problem with frequent resizing

    Frequent shrinking and expanding wastes time and resources, so better to shrink less aggressively.
  3. Final Answer:

    It shrinks the array too early, causing frequent resizing. -> Option C
  4. Quick Check:

    Shrink threshold too high = frequent resize [OK]
Hint: Shrink array only when usage is very low to avoid thrashing [OK]
Common Mistakes:
  • Ignoring empty stack check (it is present)
  • Confusing shrinking with doubling
  • Not clearing popped element
5. You want to implement a dynamic stack that minimizes memory usage by shrinking the internal array only when the number of elements is less than 1/8 of the array size. Which change should you make to the pop method's shrinking condition?
def pop(self):
    if self.top == 0:
        return None
    self.top -= 1
    item = self.array[self.top]
    self.array[self.top] = None
    if ???:
        self.array = self.array[:len(self.array) // 2]
    return item
hard
A. if self.top == 0
B. if self.top < len(self.array) // 8
C. if self.top <= len(self.array) // 2
D. if self.top < len(self.array) // 4

Solution

  1. Step 1: Understand shrinking threshold

    To shrink only when usage is less than 1/8, the condition must check if top is less than array length divided by 8.
  2. Step 2: Match condition to code

    if self.top < len(self.array) // 8 correctly uses 'if self.top < len(self.array) // 8' to trigger shrinking at 1/8 usage.
  3. Final Answer:

    if self.top < len(self.array) // 8 -> Option B
  4. Quick Check:

    Shrink when usage < 1/8 = condition in if self.top < len(self.array) // 8 [OK]
Hint: Use 1/8 threshold to shrink less often and save memory [OK]
Common Mistakes:
  • Using 1/4 threshold shrinks too early
  • Using equality instead of less than
  • Shrinking when stack is empty only
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard