Добавить элемент в любую позицию массива, размещенного в динамической памяти - C (СИ)
Формулировка задачи:
Требуется добавить элемент в какое-нибудь место массива, размещенного в динамической памяти. (на языке Си, если можно с объяснением)
Решение задачи: «Добавить элемент в любую позицию массива, размещенного в динамической памяти»
textual
Листинг программы
//требуется добавить элемент в какое-нибудь место массива, размещенного в динамической памяти
#include <stdio.h>
#include <stdlib.h>
//создать массив
int *Create (int N)
{ int *a = (int*) malloc (N * sizeof(int));
for(int i = 0; i<N; i++)
a[i] = i;
return a;
}
//показать массив
void Show (int *a, int N)
{ printf("\n");
for(int i = 0; i<N; i++)
printf("%5d", a[i]);
printf("\n");
}
//разместить новый элемент на позиции pos
void Insert (int *a, int &N, int num, int pos)
{ if (pos<N)
{ //расширяем область, на которую показывает указатель
a = (int*) realloc (a, (N+1) * sizeof(int));
//сдвигаем элементы до позиции pos вправо
for (int i = N; i >= pos; i--)
a[i] = a[i-1];
//вставляем новый элемент
a[pos] = num;
N = N+1; //возвращаем новое N
}
}
int main()
{ int N = 20, *arr;
arr = Create (N); //создаем массив
Show (arr,N); //смотрим
Insert (arr, N, 5, 3); //вставляем 5 на позицию 3
Show (arr,N); //смотрим (тут N уже на 1 больше)
free (arr);
getchar();
return 0;
}
Объяснение кода листинга программы
- Создание массива: int Create (int N) { int a = (int) malloc (N sizeof(int)); for(int i = 0; i<N; i++) a[i] = i; return a; }
- Показ массива:
void Show (int *a, int N)
{
printf(
\n); for(int i = 0; i<N; i++) printf(%5d, a[i]); printf(\n); } - Вставка элемента в массив: void Insert (int a, int &N, int num, int pos) { if (pos<N) { //расширяем область, на которую показывает указатель a = (int) realloc (a, (N+1) * sizeof(int)); //сдвигаем элементы до позиции pos вправо for (int i = N; i >= pos; i--) a[i] = a[i-1]; //вставляем новый элемент a[pos] = num; N = N+1; //возвращаем новое N } }
- Работа программы: int main() { int N = 20, *arr; arr = Create (N); //создаем массив Show (arr,N); //смотрим Insert (arr, N, 5, 3); //вставляем 5 на позицию 3 Show (arr,N); //смотрим (тут N уже на 1 больше) free (arr); getchar(); return 0; }