Liste

di il
1 risposte

Liste

Ciao !Ho appena iniziato le liste quindi ho un pò di difficoltà a capire..
In un esercizio da svolgere devo una volta inseriti gli elementi ( terminanti con 0) cancellare i numeri pari.
Ma qualcosa non va..
/*Gestione di una lista */
/*Inserisce dalla testa ed estrae dalla testa*/
/*Lista ordinata con cancellazione di pari */


#include <stdio.h>
#include<stdlib.h>

/*variabili esterne*/
struct node{     /*come è fatto il nodo*/
  int value;
  struct node * next;
  };
  struct node *first=NULL;/*first punta al primo elemento*/
  
  
  
/*dichiarazione funzioni*/

void read_numbers(void);
void delede_from_list(struct node  *list,int n);
void visualizza_lista(struct node *q);
 
 
 
 
 
 int main(void)
 {
 int n;
read_numbers();

printf("Inserisci valore :");
scanf("%d",&n);
delede_from_list(&first,n);/*cancella tutti gli elementi che non sono divisori di n*/
visualizza_lista(first);

return 0;
}







void read_numbers(void)
{
printf("Inserisci interi.Termina con 0");
for(;;)
{
struct node *cur ,*prev, *new_node;
new_node=malloc(sizeof(struct node));/* crea nuovo nodo*/
if(new_node==NULL)
{
printf("Database is full;can't add more parts\n");
return;
}


printf("\nInserisci:");
scanf("%d",&new_node->value);

if(new_node->value ==0)
{
free(new_node);
return ;
}
for(cur=first,prev=NULL;
    cur!=NULL && new_node->value > cur->value;
	prev=cur,cur=cur->next)
	;                         /*si ferma quando new_node è inferiore di cur->value*/ 

 if(cur!=NULL && new_node->value == cur->value)
{
 printf("Elemento esiste gia'\n");
 free(new_node);
 return;
 } 
 
	new_node->next=cur;/*new_node punta al nodo cur == passa avanti di cur*/
	if (prev==NULL)
	 first=new_node;/*first punta al nodo new_node*/
	else
      prev->next=new_node;/*prev punta al nodo new_node*/
	  

  }
  }
  
 



  
  
  
void delede_from_list(struct node *list,int n)
  {
  struct node *cur=list;
  struct node *prev=NULL;
  
  
while(cur!=NULL)
{
 if(n%(cur->value)!=0)
 {
  if (cur ==NULL)
        break;
	if (prev ==NULL)
	list=list->next;

	else
	prev->next=cur->next;
  
  
  free(cur); /*libero nodo*/
	
 }
 
	prev=cur;
	
	cur=cur->next;
	
}	

}
  






void visualizza_lista(struct node *q)
{
  if(q!=NULL)
  {
   printf("%d\n",q->value);
   visualizza_lista(q->next);
  }
}
	

1 Risposte

  • Re: Liste

    Non vanno parecchie cose. Vedi ciclo infinito e return. Leggi bene cosa fa return, non termina il blocco ma tutta la funzione.
Devi accedere o registrarti per scrivere nel forum
1 risposte