Array Insertion at End in DSA C - Time & Space Complexity
We want to understand how long it takes to add a new item at the end of an array.
How does the time needed change as the array grows bigger?
Analyze the time complexity of the following code snippet.
void insertAtEnd(int arr[], int *size, int capacity, int value) {
if (*size < capacity) {
arr[*size] = value;
(*size)++;
}
}
This code adds a new value at the end of the array if there is space available.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Assigning the new value to the last position in the array.
- How many times: Exactly once per insertion.
Adding one item at the end always takes the same small number of steps, no matter how big the array is.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1 |
| 100 | 1 |
| 1000 | 1 |
Pattern observation: The time stays the same even if the array grows larger.
Time Complexity: O(1)
This means adding an item at the end takes a fixed amount of time regardless of array size.
[X] Wrong: "Adding at the end takes longer as the array gets bigger because we have to move all elements."
[OK] Correct: We do not move existing elements when adding at the end; we just place the new item in the next free spot.
Knowing that adding at the end is quick helps you explain why some data structures are faster for certain tasks.
"What if the array is full and we need to resize it before adding? How would the time complexity change?"
Practice
Solution
Step 1: Understand array insertion at end
When an element is inserted at the end, it is placed at the next free index if space is available.Step 2: Effect on array size
The logical size of the array increases by one because a new element is added.Final Answer:
The element is added at the last position and the array size increases by one. -> Option AQuick Check:
Insert at end adds element and increases size [OK]
- Thinking array size changes physically (fixed size in C)
- Assuming insertion replaces existing elements
- Believing array sorts automatically after insertion
Solution
Step 1: Identify correct index for insertion
The next free position is at index 'n' since array indexing starts at 0 and current size is 'n'.Step 2: Update size after insertion
After inserting, increment 'n' to reflect the new size.Final Answer:
arr[n] = x; n++; -> Option BQuick Check:
Insert at arr[n], then increment n [OK]
- Using arr[n+1] causes out-of-bounds error
- Using arr[n-1] overwrites last element
- Confusing element and index positions
int arr[5] = {1, 2, 3};
int n = 3;
arr[n] = 4;
n++;
for(int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}Solution
Step 1: Insert element at arr[3]
arr[3] is assigned 4, so array becomes {1, 2, 3, 4, ?}.Step 2: Increment size and print elements
n becomes 4, loop prints arr[0] to arr[3]: 1 2 3 4.Final Answer:
1 2 3 4 -> Option AQuick Check:
Inserted 4 at end, printed all elements [OK]
- Ignoring increment of n, printing only first 3 elements
- Assuming uninitialized arr[3] is zero
- Confusing array size and capacity
int arr[5] = {10, 20, 30};
int n = 3;
arr[n+1] = 40;
n++;Solution
Step 1: Check insertion index
Inserting at arr[n+1] means arr[4], skipping arr[3], which is incorrect for sequential insertion.Step 2: Consequence of wrong index
This causes a gap in the array; correct index is arr[n].Final Answer:
The element is inserted at wrong index (arr[n+1] instead of arr[n]). -> Option DQuick Check:
Insert at arr[n], not arr[n+1] [OK]
- Using arr[n+1] instead of arr[n]
- Not updating size after insertion
- Ignoring array bounds
int arr[6] = {5, 10, 15, 20}; with current size n = 4, which code snippet correctly inserts the element 25 at the end and prints the updated array?Solution
Step 1: Identify correct insertion index
Current size n=4 (indices 0-3 used), so end insertion at arr[4] (arr[n]), then n=5.Step 2: Evaluate options
A: arr[4]=25, n=5, prints 5 10 15 20 25 [correct].
B: arr[5]=25, n=5, prints 0-4 (5 10 15 20 <uninit>) [misses 25].
C: arr[3]=25 overwrites 20 [wrong].
D: arr[5]=25, n=5, prints 0-4 [misses 25].Final Answer:
arr[n] = 25; n++; for(int i=0; i -> Option CQuick Check:
Insert at arr[n], n++, print 0 to n-1 [OK]
- Inserting at wrong index causing overwrite
- Not updating size correctly
- Printing wrong number of elements
Ready to prove it?
Pass the test and this pattern moves unknown
