Inserimento lista in una posizione qualsiasi

di il
4 risposte

Inserimento lista in una posizione qualsiasi

Salve ragazzi ho un problema sull'inserimento di un nodo in un punto qualsiasi della lista il mio programma deve scorrere la lista fino a che non trova un dato che è minore del suo e poi inserire il nuovo nodo rendendo quindi l'inserimento ordinato ho scritto tutto il programma ma non funziona bene vi posto il sorgente...grazie!



struct nodo*creanodo(char dato)
{

    struct nodo *app;
    app=(struct nodo*)malloc(sizeof(struct nodo));
    app->info=dato;
    app->next=NULL;
    
    return app;
}




struct nodo*inserisci(struct nodo *inizio,char dato)
{
    struct nodo *app,*temp;
    
    app=creanodo(dato);
    
    temp=(struct nodo*)malloc(sizeof(struct nodo));
    //inizio=inizio->next;
    if(inizio==NULL)
    {
        inizio=app;
        return inizio;
    }
    while(inizio->next!=NULL)
    {
        if(inizio->info<=dato)
        {     
            // devo inserire;
            temp->next=inizio;
            inizio->next=app;
            app->next=temp;
            return inizio;
        }
    inizio=inizio->next;
    }
    // elemento più piccolo non c'è
    
    inizio->next=app;
    
    return inizio;


}




4 Risposte

  • Re: Inserimento lista in una posizione qualsiasi

    E il main ?
  • Re: Inserimento lista in una posizione qualsiasi

    Non è nulla di particolare eccolo:
    
    #include <stdio.h>
    #include <stdlib.h>
    struct nodo{
    
        char info;
        struct nodo*next;
    
    }*inizio;
    
    struct nodo*inserisci(struct nodo*inizio,char dato);
    struct nodo*creanodo(char dato);
    void stampa(struct nodo*);
    int main(void)
    {
        inizio=(struct nodo*)malloc(sizeof(struct nodo));
        inizio->next=NULL;
        inizio->info='0';
        inizio=inserisci(inizio,'c');
        inizio=inserisci(inizio,'t');
        inizio=inserisci(inizio,'a');
        
        stampa(inizio);
        
    
       
        return 0;
    }
    
    
    
    
    
    
    
    
  • Re: Inserimento lista in una posizione qualsiasi

    TI consiglierei di farlo così ...
    
    void inserisci(struct nodo **pl, char dato)
    {
    	struct nodo *s, *r, *nn=creanodo(dato);
    
    	if(*pl==NULL) 
    	{
    		*pl=nn;
    		return;
    	}
    
    	if((*pl)->info >= dato) 
    	{
    		s=*pl;
    		*pl=nn;
    		(*pl)->next=s;
    
    		return;
    	}
    
    	s=*pl;
    	while(s->next!=NULL) 
    	{
    		if(s->next->info > dato) 
    		{
    			r=s->next;
    			s->next=nn;
    			s->next->next=r;
    
    			return;
    		}
    
    		s=s->next;
    	}
    
    	s->next=nn;
    	s->next->next=NULL;
    
    	return;
    }
    
    int _main()
    {
    	struct nodo *i = NULL;
    	
    	inserisci(&i, 't');
    	inserisci(&i, 'a');
    	inserisci(&i, 'c');
    	inserisci(&i, 'w');
    	inserisci(&i, 'r');
    
            ...
    
    	return 0;
    }
    
  • Re: Inserimento lista in una posizione qualsiasi

    Lo puoi commentare cortesemente?
Devi accedere o registrarti per scrivere nel forum
4 risposte