fork(1) download
typedef struct {
    void** data;
    int size;
    int count;
} vector;

void vector_create(vector*);//Создание вектора
int vector_count(vector*);//Информация о количестве элементов в векторе
void vector_push_back(vector*, void*);//Добавление элемента в конец вектора
void vector_set(vector*, int, void*);//Замена определенного элемента в векторе на другое значение
void* vector_get(vector*, int);//Вывод элемента из вектора
void vector_delete(vector*, int);//Удаление элемента из вектора
void vector_free(vector*);//Очистка вектора

#include <stdio.h>
//#include <time.h>
//#include <conio.h>
#include <stdlib.h>
//#include "vector.h"
#include <string.h>

void vector_create(vector *v) //Функция создания нового вектора.
{
	v->data = 0;//Количество памяти выделенной вектору
	v->size = 0;//Размер вектора
	v->count = 0;//Количество данных в векторе
}

int vector_count(vector *v)//Функция получения информации о количестве данных
{
	return v->count;
}

void vector_push_back(vector *v, void *e)//Функция добавления данных в векторе
{
	if (v->size == 0) {//Проверка на размер, если размер равен нулю
		v->size = 5; //Увеличиваем размер вектора хотя бы до еденицы
		v->data = (void**)malloc(sizeof(void*) * v->size);//Добавление памяти в вектор
		memset(v->data, '\0', sizeof(void*) * v->size);//Заполнение памяти вектора
	}

	if (v->size == v->count) {//Если размер вектора равен количеству данных
        v->size *= 2;//Удваиваем размер вектора
		v->data = (void**)realloc(v->data, sizeof(void*) * v->size);//Перераспределение блоков памяти вектора
	}
	v->data[v->count] = e;
	v->count++;
}

void vector_set(vector *v, int index, void *e)//Функция замены элемента блока
{
	if (index >= v->count) {//Если номер элемента неверный, то выполнение прекращается
		return;
	}

	v->data[index] = e;//Замена элемента новыми данными
}

void* vector_get(vector *v, int index)//Функция получения значения элемента вектора
{
	if (index >= v->count) {//Если номер элемента неверный, то выполнение прекращается
		return 0;
	}

	return v->data[index];//Значение конкретного элемента
}

void vector_delete(vector *v, int index)//Функция удаления конкретного элемента вектора
{
	if (index >= v->count) {//Если номер элемента неверный, то выполнение прекращается
		return;
	}

	v->data[index] = NULL;//Обнуление элемента
//остат
	int i, j;
	void **newarr = (void**)malloc(sizeof(void*) * v->count * 2);//Цикл подсчета пустых элементов вектора и корректировка значения vector_count
	for (i = 0, j = 0; i < v->count; i++) {
		if (v->data[i] != NULL) {
			newarr[j] = v->data[i];
			j++;
		}
	}

	free(v->data);
	v->data = newarr;
	v->count--;
}

void vector_free(vector *v)//Функция обнуления вектора
{
	free(v->data);
	v->data=0;
}

int main(void)//Тестирование функций
{
    int noe=0;
    int k=0;
    char m[10];
	vector v;
	vector_create(&v);//Создаем вектор
	printf("Enter number of elements: ");
	//scanf("%i\n", &noe);
	noe=6;
	for(k=0; k<noe; k++){
        sprintf(m, "%d", k);
	    printf("%s\n", m);
        vector_push_back(&v, m);
	}
	/*vector_push_back(&v, "1");//Добавляем данные в вектор
	vector_push_back(&v, "2");
	vector_push_back(&v, "3");
	vector_push_back(&v, "4");
	vector_push_back(&v, "5");*/

	int i;
	printf("Start vector contains %d elements:\n", vector_count(&v));
	for (i = 0; i < vector_count(&v); i++) {//Вывод векторп
		printf("%s\n", vector_get(&v, i));
	}
    vector_set(&v, 2, "12");//Заменим 2 элемент вектора на число 12
	vector_delete(&v, 1);//Удалим 1 элемент вектора
	vector_delete(&v, 3);//И 3
	printf("Edited vector contains %d elements:\n", vector_count(&v));
	for (i = 0; i < vector_count(&v); i++) {//Вывод нового вектора
		printf("%s\n", vector_get(&v, i));
	}

	vector_free(&v);//Очистка вектора

	return 0;
}
Success #stdin #stdout 0s 4368KB
stdin
Standard input is empty
stdout
Enter number of elements: 0
1
2
3
4
5
Start vector contains 6 elements:
5
5
5
5
5
5
Edited vector contains 4 elements:
5
12
5
5