Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #define declare_list_type(element_type, list_type) \
- struct list_type##_##node \
- { \
- struct list_type##_##node * next; \
- element_type elem; \
- }; \
- struct list_type##list \
- { \
- struct list_type##_##node * head; \
- uint size; \
- }; \
- typedef struct list_type##_##node * element_type##node; \
- typedef struct list_type##list * list_type; \
- \
- list_type list_type##create () \
- { \
- list_type result; \
- result = (list_type)calloc(1, sizeof(list_type) ); \
- result -> head = NULL; \
- result -> size = 0; \
- return result; \
- } \
- uint list_type##give_size(list_type list) \
- { \
- return list->size; \
- } \
- list_type list_type##add (list_type list, element_type to_add) \
- { \
- element_type##node new_node; \
- new_node = (element_type##node) calloc (1, sizeof (struct list_type##_##node)); \
- new_node -> elem = to_add; \
- new_node -> next = list -> head; \
- ++(list->size) ; \
- list -> head = new_node; \
- return list; \
- } \
- list_type list_type##destroy (list_type list) \
- { \
- element_type##node tmp_node; \
- if(list != NULL) \
- { \
- while(list->head != NULL) \
- { \
- tmp_node = list -> head;\
- list -> head = (list -> head) -> next; \
- free(tmp_node); \
- tmp_node = NULL; \
- } \
- free(list); \
- list = NULL; \
- } \
- return list; \
- } \
- element_type list_type##get (list_type list, uint index) \
- { \
- element_type result; \
- if (list->size <= index) \
- { \
- result = (element_type) 0; \
- } \
- else \
- { \
- uint tmp_index = 0; \
- element_type##node tmp_node = (element_type##node) list->head; \
- result = tmp_node -> elem; \
- while (tmp_index <= index) \
- { \
- result = (element_type) (tmp_node -> elem); \
- tmp_node = tmp_node -> next; \
- ++ tmp_index; \
- } \
- } \
- return result; \
- } \
- #define init_list(elem_type, list_type, list_name) \
- list_name = list_type##create ();
- #define add_to_list(elem_type,list_type, list, elem) \
- list = list_type##add (list, elem);
- #define destroy_list(list_type,list) \
- list = list_type##destroy (list);
- #define list_size(list_type,list,result) \
- result = list_type##give_size (list);
- #define get_elem(elem_type,list_type,list,elem,index) \
- elem = list_type##get (list, index);
- declare_list_type(float, lista_de_float);
- int main (void)
- {
- lista_de_float list;
- uint tamanio;
- uint indice;
- float elemento;
- indice = 2;
- init_list(float,lista_de_float,list);
- add_to_list(float,lista_de_float,list,3.14);
- add_to_list(float,lista_de_float,list,2.71);
- add_to_list(float,lista_de_float,list,1.73);
- list_size (lista_de_float, list, tamanio);
- printf("El tamaño de la lista es: %u\n", tamanio);
- get_elem (float, lista_de_float, list, elemento, indice);
- printf("El %i elemento es: %f\n", indice+1, elemento );
- destroy_list(lista_de_float,list);
- return EXIT_SUCCESS;
- }
Add Comment
Please, Sign In to add comment