Bird
Raised Fist0
DSA Cprogramming

Array Deletion at End in DSA C

Choose your learning style10 modes available
Mental Model
Removing the last item from a list means just ignoring it from now on.
Analogy: Think of a stack of plates where you only take the top plate off to remove it.
Index: 0   1   2   3   4
Array: 10 -> 20 -> 30 -> 40 -> 50
Size: 5
Dry Run Walkthrough
Input: array: [10, 20, 30, 40, 50], delete last element
Goal: Remove the last element and reduce the size by one
Step 1: Check if array is empty
10 -> 20 -> 30 -> 40 -> 50, size=5
Why: We must ensure there is something to delete
Step 2: Reduce size by 1 to remove last element
10 -> 20 -> 30 -> 40, size=4
Why: Reducing size ignores the last element effectively deleting it
Step 3: Print updated array
10 -> 20 -> 30 -> 40, size=4
Why: To confirm the last element is removed
Result:
10 -> 20 -> 30 -> 40 -> null
Annotated Code
DSA C
#include <stdio.h>

void deleteAtEnd(int arr[], int *size) {
    if (*size == 0) {
        printf("Array is empty, nothing to delete.\n");
        return;
    }
    (*size)--; // reduce size by 1 to delete last element
}

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d", arr[i]);
        if (i != size - 1) printf(" -> ");
    }
    printf(" -> null\n");
}

int main() {
    int arr[5] = {10, 20, 30, 40, 50};
    int size = 5;

    deleteAtEnd(arr, &size);
    printArray(arr, size);

    return 0;
}
if (*size == 0) {
Check if array is empty to avoid deleting from empty array
(*size)--;
Reduce size by one to remove last element logically
for (int i = 0; i < size; i++) {
Traverse array up to current size to print elements
OutputSuccess
10 -> 20 -> 30 -> 40 -> null
Complexity Analysis
Time: O(1) because deleting last element just reduces size without shifting
Space: O(1) because no extra space is needed for deletion
vs Alternative: Compared to deleting from start or middle which requires shifting O(n), this is faster and simpler
Edge Cases
empty array
Prints message and does not change array
DSA C
if (*size == 0) {
array with one element
Size reduces to zero, array becomes empty
DSA C
(*size)--;
When to Use This Pattern
When you need to remove the last item quickly without rearranging others, use array deletion at end because it only changes size.
Common Mistakes
Mistake: Trying to shift elements after deleting last element
Fix: No shifting needed; just reduce size by one
Mistake: Not checking if array is empty before deletion
Fix: Add a check for size zero before deleting
Summary
Deletes the last element by reducing the array size by one.
Use when you want to remove the last item quickly without moving other elements.
The key is that reducing size ignores the last element without shifting.

Practice

(1/5)
1. What happens to the size of an array when you delete an element from the end in a typical static array implementation?
easy
A. The size decreases by one
B. The size stays the same
C. The size increases by one
D. The size becomes zero

Solution

  1. Step 1: Understand array size after deletion

    Deleting an element from the end means removing the last element, so the total number of elements reduces by one.
  2. Step 2: Effect on array size

    The size variable or count of elements decreases by one to reflect the removal.
  3. Final Answer:

    The size decreases by one -> Option A
  4. Quick Check:

    Deleting last element reduces size by 1 [OK]
Hint: Deleting end element reduces size by one [OK]
Common Mistakes:
  • Thinking size stays same after deletion
  • Assuming size increases after deletion
  • Confusing deletion with insertion
2. Which of the following is the correct way to delete the last element from an array arr of size n in C?
easy
A. free(arr[n-1]);
B. arr[n] = 0;
C. n = n - 1;
D. arr = arr - 1;

Solution

  1. Step 1: Understand array deletion in C

    In static arrays, deleting means reducing the size count. So, decreasing n by 1 removes last element logically.
  2. Step 2: Analyze options

    n = n - 1; correctly reduces size. arr[n] = 0; tries to set element but doesn't change size. free(arr[n-1]); is invalid as free is for dynamic memory. arr = arr - 1; is invalid pointer arithmetic.
  3. Final Answer:

    n = n - 1; -> Option C
  4. Quick Check:

    Decrease size variable to delete last element [OK]
Hint: Reduce size variable to delete last element [OK]
Common Mistakes:
  • Using free() on static array elements
  • Trying to set last element to zero without changing size
  • Incorrect pointer arithmetic
3. What will be the output of the following C code?
int arr[5] = {10, 20, 30, 40, 50};
int n = 5;
n = n - 1;
for(int i = 0; i < n; i++) {
    printf("%d ", arr[i]);
}
medium
A. 10 20 30 40 50
B. 10 20 30 40
C. 20 30 40 50
D. 10 20 30

Solution

  1. Step 1: Understand size after deletion

    Initially, n is 5. After n = n - 1;, n becomes 4, so loop runs from 0 to 3.
  2. Step 2: Loop prints elements from index 0 to 3

    Elements printed are arr[0]=10, arr[1]=20, arr[2]=30, arr[3]=40.
  3. Final Answer:

    10 20 30 40 -> Option B
  4. Quick Check:

    Loop runs n=4 times, prints first 4 elements [OK]
Hint: After reducing size, loop prints fewer elements [OK]
Common Mistakes:
  • Printing all 5 elements ignoring updated size
  • Starting loop from 1 instead of 0
  • Confusing array indices
4. Identify the error in the following code snippet that attempts to delete the last element of an array arr of size n.
void deleteEnd(int arr[], int n) {
    arr[n] = 0;
    n = n - 1;
}
medium
A. Accessing arr[n] is out of bounds
B. Size variable n should not be changed
C. Setting arr[n] to 0 deletes the element
D. Function should return the new size

Solution

  1. Step 1: Check array index usage

    Array indices go from 0 to n-1. Accessing arr[n] is out of bounds and causes undefined behavior.
  2. Step 2: Understand deletion logic

    To delete last element, reduce size n by 1. Setting arr[n] to 0 is invalid and does not delete element.
  3. Final Answer:

    Accessing arr[n] is out of bounds -> Option A
  4. Quick Check:

    Array index must be less than size [OK]
Hint: Array last index is n-1, not n [OK]
Common Mistakes:
  • Using arr[n] instead of arr[n-1]
  • Assuming setting element to zero deletes it
  • Not updating size correctly
5. Given a dynamic array implemented with a pointer int *arr and current size n, which of the following correctly deletes the last element and updates the array size safely in C?
hard
A. free(arr[n-1]); n = n - 1;
B. arr[n-1] = 0; n = n - 1;
C. arr = arr - 1; n = n - 1;
D. n = n - 1; arr = realloc(arr, n * sizeof(int));

Solution

  1. Step 1: Understand dynamic array deletion

    To delete last element, reduce size n by 1 and resize memory using realloc to avoid wasted space.
  2. Step 2: Analyze options

    n = n - 1; arr = realloc(arr, n * sizeof(int)); correctly reduces size and resizes memory. arr[n-1] = 0; n = n - 1; sets element to zero but wastes memory. free(arr[n-1]); n = n - 1; incorrectly uses free on element. arr = arr - 1; n = n - 1; does invalid pointer arithmetic.
  3. Final Answer:

    n = n - 1; arr = realloc(arr, n * sizeof(int)); -> Option D
  4. Quick Check:

    Reduce size and resize memory with realloc [OK]
Hint: Use realloc after reducing size for dynamic arrays [OK]
Common Mistakes:
  • Not resizing memory after deletion
  • Using free() on array elements
  • Incorrect pointer arithmetic
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