Удаление элементов из целочисленного массива - C (СИ)
Формулировка задачи:
Описать функцию RemoveX(A, N, X), удаляющую из целочисленного массива A размера N элементы, равные целому числу X. Массив A и число N являются входными и выходными параметрами. С помощью этой функции удалить числа XA, XB, XC из массивов A, B, C размера NA, NB, NC соответственно и вывести размер и содержимое полученных массивов.
Решение задачи: «Удаление элементов из целочисленного массива»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void rem_elt(int *A, int *n, int x)
{
int i_from, i_to;
i_from=0;
i_to=0;
while (1)
{
if (i_from > *n) break;
if (A[i_from]==x)
i_from++;
else
A[i_to++]=A[i_from++];
}
*n=i_to-1;
return;
}
int main(int argc, char *argv[])
{
int Z[]={1,2,3,1,2,3,1,2,3,2,2,2};
int n=sizeof(Z)/sizeof(int);
int i;
printf("Initial array: ");
for (i=0; i<n; i++) printf("%d ",Z[i]);
printf("\n");
rem_elt(Z,&n,2);
printf("Array after removing: ");
for (i=0; i<n; i++) printf("%d ",Z[i]);
printf("\n");
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
В данном коде реализована функция rem_elt для удаления элементов из целочисленного массива.
- В функции rem_elt объявлены три переменные:
- i_from и i_to — индексы, которые используются для обхода массива,
- x — элемент, который необходимо удалить из массива.
- В цикле while происходит обход массива от начала до конца. Если встретится элемент x, то его пропускают, увеличивая i_from на 1. Если элемент не равен x, то его копируют в новую позицию i_to, увеличивая i_to и i_from на 1.
- После выхода из цикла, количество элементов в массиве уменьшается на 1, так как один элемент был удален.
- В функции main создается массив Z и инициализируется значениями {1,2,3,1,2,3,1,2,3,2,2,2}.
- Размер массива вычисляется как разница между размером массива и размером одного элемента, делится на размер одного элемента и округляется до целого числа в меньшую сторону.
- В цикле printf выводится начальный массив.
- Вызывается функция rem_elt, передавая в нее указатель на массив Z и указатель на переменную n. Функция удаляет из массива все вхождения элемента 2.
- Выводится массив после удаления элемента 2.
- Вызывается функция system для приостановки выполнения программы до нажатия клавиши.
- Возвращается 0, что означает успешное выполнение программы.