pabloliva87

Ej4C

Mar 20th, 2012
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.13 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. #define declare_list_type(element_type, list_type)  \
  5.     struct list_type##_##node           \
  6.     {                       \
  7.         struct list_type##_##node * next;   \
  8.         element_type elem;          \
  9.     };                      \
  10.     struct list_type##list              \
  11.     {                       \
  12.         struct list_type##_##node * head;       \
  13.         uint size;              \
  14.     };                      \
  15.     typedef struct list_type##_##node * element_type##node;                         \
  16.     typedef struct list_type##list * list_type; \
  17.                             \
  18.     list_type list_type##create ()          \
  19.     {                       \
  20.         list_type result;           \
  21.         result = (list_type)calloc(1, sizeof(list_type) );                      \
  22.         result -> head = NULL;          \
  23.         result -> size = 0;         \
  24.         return result;              \
  25.     }                       \
  26.     uint list_type##give_size(list_type list)   \
  27.     {                       \
  28.         return list->size;          \
  29.     }                       \
  30.     list_type list_type##add (list_type list, element_type to_add)                      \
  31.     {                       \
  32.         element_type##node new_node;        \
  33.         new_node = (element_type##node) calloc (1, sizeof (struct list_type##_##node));         \
  34.         new_node -> elem = to_add;      \
  35.         new_node -> next = list -> head;    \
  36.         ++(list->size) ;            \
  37.         list -> head = new_node;        \
  38.         return list;                \
  39.     }                       \
  40.     list_type list_type##destroy (list_type list)   \
  41.     {                       \
  42.         element_type##node tmp_node;        \
  43.         if(list != NULL)            \
  44.         {                   \
  45.             while(list->head != NULL)   \
  46.             {               \
  47.                 tmp_node = list -> head;\
  48.                 list -> head = (list -> head) -> next;                      \
  49.                 free(tmp_node);     \
  50.                 tmp_node = NULL;    \
  51.             }               \
  52.             free(list);             \
  53.             list = NULL;            \
  54.         }                   \
  55.         return list;                \
  56.     }                       \
  57.     element_type list_type##get (list_type list, uint index)                        \
  58.     {                       \
  59.         element_type result;            \
  60.         if (list->size <= index)        \
  61.         {                   \
  62.             result = (element_type) 0;  \
  63.         }                   \
  64.         else                    \
  65.         {                   \
  66.             uint tmp_index = 0;     \
  67.             element_type##node tmp_node = (element_type##node) list->head;              \
  68.             result = tmp_node -> elem;  \
  69.             while (tmp_index <= index)  \
  70.             {               \
  71.                 result = (element_type) (tmp_node -> elem);                 \
  72.                 tmp_node = tmp_node -> next;                            \
  73.                 ++ tmp_index;       \
  74.             }               \
  75.         }                   \
  76.         return result;              \
  77.     }                       \
  78.  
  79. #define init_list(elem_type, list_type, list_name)              \
  80.         list_name = list_type##create ();
  81.  
  82. #define add_to_list(elem_type,list_type, list, elem)                \
  83.         list = list_type##add (list, elem);
  84.  
  85. #define destroy_list(list_type,list)                        \
  86.         list = list_type##destroy (list);
  87.  
  88. #define list_size(list_type,list,result)                    \
  89.         result = list_type##give_size (list);
  90.  
  91. #define get_elem(elem_type,list_type,list,elem,index)               \
  92.         elem = list_type##get (list, index);
  93.  
  94. declare_list_type(float, lista_de_float);
  95.  
  96. int main (void)
  97. {
  98.     lista_de_float list;
  99.     uint tamanio;
  100.     uint indice;
  101.     float elemento;
  102.    
  103.     indice = 2;
  104.     init_list(float,lista_de_float,list);
  105.     add_to_list(float,lista_de_float,list,3.14);
  106.     add_to_list(float,lista_de_float,list,2.71);
  107.     add_to_list(float,lista_de_float,list,1.73);
  108.  
  109.     list_size (lista_de_float, list, tamanio);
  110.     printf("El tamaño de la lista es: %u\n", tamanio);
  111.     get_elem (float, lista_de_float, list, elemento, indice);
  112.     printf("El %i elemento es: %f\n", indice+1, elemento );
  113.  
  114.     destroy_list(lista_de_float,list);
  115.     return EXIT_SUCCESS;
  116. }
Add Comment
Please, Sign In to add comment