Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # include <stdio.h>
- # include <stdlib.h>
- # include <stdbool.h>
- struct sll_node
- {
- int data ;
- struct sll_node * next ;
- };
- bool insert_before ( struct sll_node ** node , int data )
- {
- struct sll_node * new_node = ( struct sll_node *)
- malloc ( sizeof ( struct sll_node ) ) ;
- if ( NULL != new_node )
- {
- new_node -> data = data ;
- new_node -> next = * node ;
- * node = new_node ;
- return true ;
- }
- return false ;
- }
- bool insert_back ( struct sll_node ** node , int data )
- {
- * node = ( struct sll_node *) malloc ( sizeof ( struct sll_node ) ) ;
- if ( NULL != * node )
- {
- (* node ) ->data = data ;
- (* node ) ->next = NULL ;
- return true ;
- }
- return false ;
- }
- bool insert_node ( struct sll_node ** node , int data )
- {
- if ( NULL != * node )
- {
- if ((* node ) ->data <= data )
- return insert_before (node , data ) ;
- else
- return insert_node (&(* node ) ->next , data ) ;
- }
- else
- return insert_back (node , data ) ;
- }
- void delete_node ( struct sll_node ** node , int data )
- {
- if ( NULL != * node )
- {
- if ((* node ) ->data == data )
- {
- struct sll_node * next = (* node ) ->next ;
- free (* node ) ;
- * node = next ;
- }
- else
- delete_node (&(* node ) ->next , data ) ;
- }
- }
- void print_list ( struct sll_node * node )
- {
- if ( NULL != node )
- {
- printf ("%d ", node -> data ) ;
- print_list (node -> next ) ;
- }
- else
- printf ("\n") ;
- }
- void delete_last_number(struct sll_node **list_pointer,int number){
- if(*list_pointer){
- if(((*list_pointer)->data==number)&&(((*list_pointer)->next->data!=number)||((*list_pointer)->next==NULL))){
- struct sll_node *next=(*list_pointer)->next;
- free(*list_pointer);
- *list_pointer=next;
- }
- else{
- delete_last_number(&(*list_pointer)->next,number);
- }
- }
- }
- void print_list_backwards (struct sll_node *node)
- {
- if ( NULL != node ) {
- print_list_backwards (node->next );
- printf ("%d ", node->data );
- }
- }
- void remove_list ( struct sll_node ** node )
- {
- if ( NULL != *node ) {
- remove_list (&(*node)->next );
- free (*node );
- }
- }
- void perform_operation ( struct sll_node *node ,void (* operation ) ( struct sll_node * node ) )
- {
- if (( NULL != node ) && ( NULL != operation ) ) {
- operation (node) ;
- perform_operation (node ->next , operation );
- }
- }
- void print_node ( struct sll_node *node )
- {
- printf ("%d ", node -> data);
- }
- int evaluate_operation ( struct sll_node *node ,int (*operation ) (int result , struct sll_node *node ) )
- {
- if (( NULL != node ) && ( NULL != operation ) )
- return operation ( evaluate_operation (node ->next , operation ),node);
- return 0;
- }
- int main (void)
- {
- struct sll_node * front = NULL ;
- int i,suma=0/*,l_elementow=0,max=0,min=0*/;
- for (i=1; i <5; i++)
- if (! insert_node (& front , i) )
- fprintf (stderr , " Error while inserting %d!\n", i) ;
- for (i=6; i <10; i++)
- if (! insert_node (& front , i) )
- fprintf (stderr , " Error while inserting %d!\n", i) ;
- if (! insert_node (& front , 9) )
- fprintf (stderr , " Error while inserting %d!\n", 9) ;
- insert_node(&front, 9);
- insert_node(&front,10);
- insert_node(&front,10);
- insert_node(&front,11);
- insert_node(&front,11);
- insert_node(&front,11);
- puts("Poczatkowe elementy na liscie:");
- perform_operation (front , print_node ) ;
- delete_last_number(&front,9);
- delete_last_number(&front,10);
- delete_last_number(&front,11);
- puts(" ");
- puts("Elementy na liscie:");
- perform_operation (front , print_node );
- remove_list (& front ) ;
- front = NULL ;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement