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;
}
}