As imamLL is very versatile in storing any type of data into a list, you can store struct into an element like shown in the following code example:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "imamll.h" struct Person { char name[24]; double age; double weight; double height; }; struct imamLL *People_list = NULL; /* Pointer to hold list */ struct imamLL_element *person = NULL; /* Pointer to hold individual element */ unsigned long c; int main (int argc, char* argv[]) { printf ("Allocating memory for list\n"); People_list = imamLL_list_create(); if (People_list == NULL) { printf ("Can not create the list\n"); exit (1); } if ((person = imamLL_element_add (People_list, sizeof(struct Person), AT_END)) == NULL) { printf ("Can not add element"); printf ("Freed list, returned %d\n", imamLL_list_destroy (People_list)); exit (1); } strcpy (((struct Person *)person->data)->name, "Md Imam Hossain"); ((struct Person *)person->data)->age = 27.0; ((struct Person *)person->data)->height = 180.0; ((struct Person *)person->data)->weight = 67.0; printf ("Allocated: %lu Bytes\n", People_list->size); if ((person = imamLL_element_add (People_list, sizeof(struct Person), AT_END)) == NULL) { printf ("Can not add element"); printf ("Freed list, returned %d\n", imamLL_list_destroy (People_list)); exit (1); } strcpy (((struct Person *)person->data)->name, "Md Salim Hossain"); ((struct Person *)person->data)->age = 22.0; ((struct Person *)person->data)->height = 182.0; ((struct Person *)person->data)->weight = 75.0; printf ("Allocated: %lu Bytes\n", People_list->size); while (1) { person = imamLL_element_get_next (People_list); if (person == NULL) break; printf ("*Person*\n"); printf ("Name: %s\n", ((struct Person *)person->data)->name); printf ("Age: %lf\n", ((struct Person *)person->data)->age); printf ("Height: %lf\n", ((struct Person *)person->data)->height); printf ("Weight: %lf\n", ((struct Person *)person->data)->weight); } printf ("Freed: %d elements\n", imamLL_list_free (People_list)); printf ("Freed list, returned %d\n", imamLL_list_destroy (People_list)); return (EXIT_SUCCESS); }