Advertisement
Guest User

Untitled

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