Hey everyone!
In our previous blog, we learned how to delete elements from an array without using loops by manually shifting each element one by one.
It worked fine, but it was like doing a workout with each variable manually.
So today, let’s do Deletion and Shifting in Arrays using Loops.
What’s the Idea?
Whenever we delete an element from an array, we move all the elements after it one step to the left, using a for loop.
For example:
If we delete element at position 3,
then arr[3] = arr[4], arr[4] = arr[5], and so on.
The last element is then made 0 or NULL to show it’s empty.
Code: Deletion and Shifting (Using Loops)
/* Deletion and shifting of arrays in C (using loops) */
#include <stdio.h>
int main() {
printf("Initial array:\n");
printf("| 10 | 20 | 30 | 40 | 50 | 60 | 70 |\n\n");
int magic_numbers[7] = {10, 20, 30, 40, 50, 60, 70};
/* Print initial array */
printf("Initial array:\n");
printf("| %d | %d | %d | %d | %d | %d | %d |\n\n",
magic_numbers[0], magic_numbers[1], magic_numbers[2],
magic_numbers[3], magic_numbers[4], magic_numbers[5],
magic_numbers[6]);
/* Delete 40 at position 3 */
int delete_position = 3;
printf("Deleting element at position %d (value %d) and shifting.\n",
delete_position, magic_numbers[delete_position]);
for (int i = delete_position; i < 6; i++) {
magic_numbers[i] = magic_numbers[i + 1];
}
magic_numbers[6] = 0;
printf("| %d | %d | %d | %d | %d | %d | %d |\n",
magic_numbers[0], magic_numbers[1], magic_numbers[2],
magic_numbers[3], magic_numbers[4], magic_numbers[5],
magic_numbers[6]);
/* Delete 10 at position 0 */
delete_position = 0;
printf("\nDeleting element at position %d (value %d) and shifting.\n",
delete_position, magic_numbers[delete_position]);
for (int i = delete_position; i < 6; i++) {
magic_numbers[i] = magic_numbers[i + 1];
}
magic_numbers[6] = 0;
printf("| %d | %d | %d | %d | %d | %d | %d |\n",
magic_numbers[0], magic_numbers[1], magic_numbers[2],
magic_numbers[3], magic_numbers[4], magic_numbers[5],
magic_numbers[6]);
/* Delete 30 at position 1 */
delete_position = 1;
printf("\nDeleting element at position %d (value %d) and shifting.\n",
delete_position, magic_numbers[delete_position]);
for (int i = delete_position; i < 6; i++) {
magic_numbers[i] = magic_numbers[i + 1];
}
magic_numbers[6] = 0;
printf("| %d | %d | %d | %d | %d | %d | %d |\n",
magic_numbers[0], magic_numbers[1], magic_numbers[2],
magic_numbers[3], magic_numbers[4], magic_numbers[5],
magic_numbers[6]);
/* Delete 50 at position 1 */
delete_position = 1;
printf("\nDeleting element at position %d (value %d) and shifting.\n",
delete_position, magic_numbers[delete_position]);
for (int i = delete_position; i < 6; i++) {
magic_numbers[i] = magic_numbers[i + 1];
}
magic_numbers[6] = 0;
printf("| %d | %d | %d | %d | %d | %d | %d |\n",
magic_numbers[0], magic_numbers[1], magic_numbers[2],
magic_numbers[3], magic_numbers[4], magic_numbers[5],
magic_numbers[6]);
return 0;
}
Output :
Initial Array:
| 10 | 20 | 30 | 40 | 50 | 60 | 70 |
1.Delete 40 (Position 3)
| 10 | 20 | 30 | 50 | 60 | 70 | 0 |
2.Delete 10 (Position 0)
| 20 | 30 | 50 | 60 | 70 | 0 | 0 |
3.Delete 30 (Position 1)
| 20 | 50 | 60 | 70 | 0 | 0 | 0 |
4.Delete 50 (Position 1 again)
| 20 | 60 | 70 | 0 | 0 | 0 | 0 |
What are Loops?
In the previous version, we wrote multiple lines like:
magic_numbers[3] = magic_numbers[4];
magic_numbers[4] = magic_numbers[5];
magic_numbers[5] = magic_numbers[6];
That worked but it’s not scalable.
If the array size increases, we’ll have to repeat those lines again and again
Using loops, we replaced all that repetition with just:
for (int i = delete_position; i < 6; i++) {
magic_numbers[i] = magic_numbers[i + 1];
}
No comments:
Post a Comment