Дан целочеслинный массив размера N. Удалите из массива все одинаковые элементы, оставив их первое вхождение - C (СИ)
Формулировка задачи:
Дан целочеслинный массив размера N. Удалите из массива все одинаковые элементы, оставив их первое вхождение. Если будут комментарии, несомненно буду рад
Решение задачи: «Дан целочеслинный массив размера N. Удалите из массива все одинаковые элементы, оставив их первое вхождение»
textual
Листинг программы
int *getUniq(int *A, int n) { int *r; int i,j,f,p; r=(int *) calloc(n,sizeof(int)); r[0]=A[0]; p=1; for (i=1; i<n; i++) { f=0; for (j=0; j<p; j++) if (A[i]==r[j]) { f=1; break;} if (f==0) r[p++]=A[i]; } r=(int *) realloc(r,(p-1)); return r; }
Объяснение кода листинга программы
- В данном коде представлен функция
getUniq
, которая принимает два аргумента: массивA
и его размерn
. - Внутри функции объявлены следующие переменные:
r
- указатель на динамически выделяемую память, которая будет использоваться для хранения уникальных элементов массиваA
.i
,j
,f
,p
- вспомогательные переменные, используемые в процессе работы алгоритма.
- С помощью функции
calloc
выделяется память под массивr
размеромn
. Первый элемент массиваr
инициализируется значением первого элемента массиваA
. Переменнаяp
инициализируется значением 1. - В цикле
for
перебираются все элементы массиваA
, начиная со второго. - Для каждого элемента
A[i]
внутри циклаfor
инициализируется переменнаяf
равной 0. Переменнаяf
используется для проверки, был ли уже встречен данный элемент в массивеr
. - В цикле
for
перебираются все элементы массиваr
. Если текущий элемент массиваr
равенA[i]
, то переменнаяf
устанавливается равной 1 и цикл прерывается с помощью оператораbreak
. - Если после прохода по всем элементам массива
r
переменнаяf
осталась равной 0, то это означает, что элементA[i]
не был встречен ранее, и он добавляется в массивr
с помощью функцииrealloc
. Значениеp
увеличивается на 1. - После прохода по всем элементам массива
A
возвращается указатель на массивr
. - Если в процессе работы алгоритма произошла ошибка, например, не хватило памяти, то возвращается значение
NULL
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д