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;
}