[C] lista ordinata ricorsiva

di il
1 risposte

[C] lista ordinata ricorsiva

Ciao a tutti, ho creato una lista ordinata iterativa e vorrei trasformarla in ricorsiva, vi lascio il codice iterativo

#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
struct sInfo{
    int value
};
typedef struct sInfo tInfo;
struct sNode{
    tInfo info;
    struct sNode *link;

};
typedef struct sNode tNode;
typedef  tNode* tList;
tList crea_lista();
tInfo leggi_info();
tList inserisci_elemento(tList lista,tInfo info);
void stampa_lista(tList lista);

int main()
{
  tList lista;
  tInfo info;
  int i,dim;
    lista=crea_lista();
    printf("quanti elementi inserire");
    scanf("%d",&dim);
    for(i=0;i<dim;i++){
        info=leggi_info();
        lista=inserisci_elemento(lista,info);

    }
    stampa_lista(lista);

}


//inizializza lista
tList crea_lista(){
return NULL;
}
tInfo leggi_info(){
tInfo info;
printf("Inserisci numero ");
scanf("%d",&info.value);
return info;
}
/*inserimento in ordine
1)ricerca della posizione
2)allocazione dinamica;
3)aggiornamento dei collegamenti

*/
tList inserisci_elemento(tList lista,tInfo info){
   tList prec,curr,newnode;
    prec=NULL;
    curr=lista;
    //1)ricerca della posizione di inserimento
    while((curr!=NULL)&&(info.value> curr->info.value )){
        prec=curr;
        curr=curr->link;


    }
    //2)allocazione dinamica
    newnode=(tNode *)malloc(sizeof(tNode));
    assert(newnode!=NULL);
    newnode->info=info;
    //3)aggiornamento dei collegamenti
    if(prec==NULL){
        newnode->link=lista;
        lista=newnode;
        return lista;
    }else{
        prec->link=newnode;
        newnode->link=curr;
        return lista;
    }

}
void stampa_lista(tList lista){
tList curr;
curr=lista;//curr è il primo nodo della lista
while(curr!=NULL){
        printf("%d ",curr->info.value);
    curr=curr->link;
}

}



1 Risposte

  • Re: [C] lista ordinata ricorsiva

    Non capisco cosa intendi per renderla ricorsiva, puoi, se vuoi, agire sulla stampa della lista, che in forma ricorsiva potrebbe essere così
    
    void stampa_lista( tList lista ){
    
    	if ( lista )  {
    		printf("%d ",lista->info.value);
    		stampa_lista( lista->link) ;
    	}
    
    }
    
Devi accedere o registrarti per scrivere nel forum
1 risposte