Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4.  
  5. struct sll_node
  6. {
  7.     int data ;
  8.     struct sll_node * next ;
  9. };
  10. bool insert_before ( struct sll_node ** node, int data )
  11. {
  12.     struct sll_node * new_node = ( struct sll_node *)
  13.                                  malloc ( sizeof ( struct sll_node ));
  14.     if ( NULL != new_node )
  15.     {
  16.         new_node -> data = data ;
  17.         new_node -> next = * node ;
  18.         *node = new_node ;
  19.         return true ;
  20.     }
  21.     return false ;
  22. }
  23. bool insert_back ( struct sll_node ** node, int data )
  24. {
  25.     *node = ( struct sll_node *) malloc ( sizeof ( struct sll_node ));
  26.     if ( NULL != * node )
  27.     {
  28.         (*node )->data = data ;
  29.         (*node )->next = NULL ;
  30.         return true ;
  31.     }
  32.     return false ;
  33. }
  34. bool insert_node ( struct sll_node ** node, int data )
  35. {
  36.     if ( NULL != * node )
  37.     {
  38.         if ((* node ) ->data <= data )
  39.             return insert_before (node, data );
  40.         else
  41.             return insert_node (&(* node ) ->next, data );
  42.     }
  43.     else
  44.         return insert_back (node, data );
  45. }
  46. void delete_node ( struct sll_node ** node, int data )
  47. {
  48.     if ( NULL != * node )
  49.     {
  50.         if ((* node ) ->data == data )
  51.         {
  52.             struct sll_node * next = (* node ) ->next ;
  53.             free (* node );
  54.             * node = next ;
  55.         }
  56.         else
  57.             delete_node (&(* node ) ->next, data );
  58.     }
  59. }
  60.  
  61.  
  62. void print_list ( struct sll_node * node )
  63. {
  64.     if ( NULL != node )
  65.     {
  66.         printf ("%d ", node -> data );
  67.         print_list (node -> next );
  68.     }
  69.     else
  70.         printf ("\n");
  71. }
  72. void print_list_backwards ( struct sll_node * node )
  73. {
  74.     if ( NULL != node )
  75.     {
  76.         print_list_backwards (node -> next );
  77.         printf ("%d ", node -> data );
  78.     }
  79. }
  80. void remove_list ( struct sll_node ** node )
  81. {
  82.     if ( NULL != * node )
  83.     {
  84.         remove_list (&(* node ) ->next );
  85.         free (* node );
  86.     }
  87. }
  88.  
  89. int evaluate_operation ( struct sll_node *node, int (* operation ) (int result, struct sll_node * node ) )
  90. {
  91.     if (( NULL != node ) && ( NULL != operation ) )
  92.         return operation ( evaluate_operation (node ->next, operation ),node ) ;
  93.  
  94.     return 0;
  95. }
  96.  
  97. int iterate_list(struct sll_node *list_pointer,int (*action)(int result, struct sll_node *list_pointer))
  98. {
  99.     int result=1;
  100.     for(; list_pointer; list_pointer=list_pointer->next)
  101.         if(action)
  102.         result=action(result,list_pointer);
  103.     return result;
  104. }
  105.  
  106. int parzyste(int result, struct sll_node *list_pointer)
  107. {
  108.     if((list_pointer->data)%2 == 0)
  109.         result*=list_pointer->data;
  110.     return result;
  111. }
  112.  
  113. int nieparzyste(int result, struct sll_node *list_pointer)
  114. {
  115.     if((list_pointer->data)%2 != 0)
  116.         result*=list_pointer->data;
  117.     return result;
  118. }
  119.  
  120.  
  121.  
  122.  
  123. int main ()
  124. {
  125.     struct sll_node * front = NULL ;
  126.     int i;
  127.     for (i=1; i <5; i++)
  128.         if (! insert_node (& front, i))
  129.             fprintf (stderr, " Error while inserting %d!\n", i);
  130.     for (i=6; i <10; i++)
  131.         if (! insert_node (& front, i))
  132.             fprintf (stderr, " Error while inserting %d!\n", i);
  133.     printf (" List elements :\n");
  134.     print_list ( front );
  135.     if (! insert_node (& front, 0))
  136.         fprintf (stderr, " Error while inserting 0!\n");
  137.     printf (" List elements after insertion of 0:\n");
  138.     print_list ( front );
  139.     if (! insert_node (& front, 5))
  140.         fprintf (stderr, " Error while inserting 5!\n");
  141.     printf (" List elements after insertion of 5:\n");
  142.     print_list ( front );
  143.     if (! insert_node (& front, 7))
  144.         fprintf (stderr, " Error while inserting 7!\n");
  145.     printf (" List elements after insertion of 7:\n");
  146.     print_list ( front );
  147.     if (! insert_node (& front, 10) )
  148.         fprintf (stderr, " Error while inserting 10!\n");
  149.     printf (" List elements after insertion of 10:\n");
  150.     print_list ( front );
  151.  
  152.     printf("Iloczyn elementow parzystych:\n");
  153.     printf("%d",iterate_list(front,parzyste));
  154.     printf("\nIloczyn elementow nieparzystych\n");
  155.     printf("%d",iterate_list(front,nieparzyste));
  156.  
  157.     printf ("\nList elements printed backwards :\n");
  158.     print_list_backwards ( front );
  159.     printf ("\n");
  160.     delete_node (& front, 0);
  161.     printf (" List elements after deletion of 0:\n");
  162.     print_list ( front );
  163.     delete_node (& front, 1);
  164.     printf (" List elements after deletion of 1:\n");
  165.     print_list ( front );
  166.     delete_node (& front, 1);
  167.     printf (" List elements after deletion of 1:\n");
  168.     print_list ( front );
  169.     delete_node (& front, 4);
  170.     printf (" List elements after deletion of 4:\n");
  171.     print_list ( front );
  172.     delete_node (& front, 7);
  173.     printf (" List elements after deletion of 7:\n");
  174.     print_list ( front );
  175.     delete_node (& front, 10);
  176.     printf (" List elements after deletion of 10:\n");
  177.     print_list ( front );
  178.     remove_list (& front );
  179.     front = NULL ;
  180.     return 0;
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement