Я создал библиотеку, которая работает для любого типа данных:
List new_list(int,int);
создает новый список, например:
List list=new_list(TYPE_INT,sizeof(int));
//This will create an list of integers
Error append(List*,void*);
добавляет элемент в список.* Append принимает в качестве аргумента два указателя, если вы хотите сохранить указатель на список, не передавайте указатель указателем
например:
//using the int list from above
int a=5;
Error err;
err=append(&list,&a)
//for an list of pointers
List listptr=new_list(TYPE_CUSTOM,sizeof(int*));
int num=7;
int *ptr=#
append(&listptr,ptr);
//for list of structs
struct Foo
{
int num;
float *ptr;
};
List list=new_list(TYPE_CUSTOM,sizeof(struct Foo));
struct Foo x;
x.num=9;
x.ptr=NULL;
append(&list,&x);
Ошибка get (List *, int);
Получает данные по указанному индексу.При вызове текущего списка poiter будет указывать на данные.
например:
List list=new_list(TYPE_INT,sizeof(int));
int i;
for(i=1;i<=10;i++)
append(&list,&i);
//This will print the element at index 2
get(&list,2);
printf("%d",*(int*)list.current);
Ошибка pop (List *, int);
Pops и элемент из указанного индекса
Например:
List list=new_list(TYPE_INT,sizeof(int));
int i;
for(i=1;i<=10;i++)
append(&list,&i);
//element in the index 2 will be deleted,
//the current pointer will point to a location that has a copy of the data
pop(&list,2);
printf("%d",*(int*)list.current);
//To use the list as stack, pop at index list.len-1
pop(&list,list.len-1);
//To use the list as queue, pop at index 0
pop(&list,0);
Ошибка слияния (Список, Список);
Слияние двух списков одного типа.Если типы различаются, в объекте Error возвращается сообщение об ошибке;
например:
//Merge two elements of type int
//List 2 will come after list 1
Error err;
err=merge(&list1,&list2);
Iterator get_iterator(List*);
Получить итератор в список.при инициализации будет иметь указатель на первый элемент списка.
например:
Iterator ite=get_iterator(&list);
Error next(Iterator*);
Получить следующий элемент списка.
например:
// Как перебрать список целых чисел
Iterator itr;
for(itr=get_iterator(&list); ite.content!=NULL; next(ite))
printf("%d",*(int*)ite.content);
https://github.com/malayh/C-List