Salve a tutti, questo è attualmente uno degli argomenti con cui ho piu problemi, mi sapreste spiegare come funziona una struttura ricorsiva ?
Salve a tutti, questo è attualmente uno degli argomenti con cui ho piu problemi, mi sapreste spiegare come funziona una struttura ricorsiva ?
Intendi una struct che ha come membro un puntatore ad un'altra sua istanza?
Amaro C++, il gusto pieno dell'undefined behavior.
Ecco, sul mio libro è la prima cosa che mostracodice:struct node{ int data; struct node *nextPtr; };
Quella roba è un elemento di una lista linkata. Non c'è niente di magico, ogni elemento contiene un payload (i dati che effettivamente memorizzi) e un puntatore all'elemento successivo nella sequenza. Cosa non ti è chiaro?
Amaro C++, il gusto pieno dell'undefined behavior.
*nextPtr punta di nuovo a node ?Originariamente inviato da MItaly
Quella roba è un elemento di una lista linkata. Non c'è niente di magico, ogni elemento contiene un payload (i dati che effettivamente memorizzi) e un puntatore all'elemento successivo nella sequenza. Cosa non ti è chiaro?
Punta ad un'altra istanza di node. Tu allochi tanti node e li concateni uno dietro l'altro tramite i relativi nextPtr.
Amaro C++, il gusto pieno dell'undefined behavior.
Come ti dicevano non sono struct ricorsive bensì liste. Le liste sono davvero comode quando devi fare qualcosa di ordinabile (ad esempio devi creare una rubrica in ordine alfabetico). Benchè abbiano questo guadagno, per poterle usare serve l'utilizzo di puntatori: infatti devi pensare che ogni lista sia una pagina sparsa di un diario a cui devi dare un titolo (per ricordarti di cosa stai parlando). Quindi il codice partirà tipo così
Nel main però ora devi crearle tenendoti i vari puntatori agli elementi, così sai cosa sono (il titolo di prima). Quindi diventa tipocodice:#incl....... typedef struct voce { char nome[20]; char numero[20]; struct voce* next; }rubrica;
Per ogni voce successiva dovrai fare una malloc di assegnamento spazio, il puntatore al nuovo elemento diventerà il next dell'elemento che lo precede e gli assegnamenti saranno fatti con puntatori. Questo procedimento può sembrare brutto, ma se devi ordinare basta invertire l'ordine dei puntatori senza dover fare bubble sort lunghissime.codice:int main(....) { rubrica* prima; prima=(rubrica*)malloc(sizeof(rubrica)); /*poi assegni le varie voci come fosse un puntatore prima->nome ecc ecc*/ e alla fine poni prima->next=NULL; perchè non hai una sola voce
Spero di essere stato d'aiuto![]()
Grazie mille ! Mi sei stato molto di aiuto !!Originariamente inviato da _Alfabetagamma_
Come ti dicevano non sono struct ricorsive bensì liste. Le liste sono davvero comode quando devi fare qualcosa di ordinabile (ad esempio devi creare una rubrica in ordine alfabetico). Benchè abbiano questo guadagno, per poterle usare serve l'utilizzo di puntatori: infatti devi pensare che ogni lista sia una pagina sparsa di un diario a cui devi dare un titolo (per ricordarti di cosa stai parlando). Quindi il codice partirà tipo così
Nel main però ora devi crearle tenendoti i vari puntatori agli elementi, così sai cosa sono (il titolo di prima). Quindi diventa tipocodice:#incl....... typedef struct voce { char nome[20]; char numero[20]; struct voce* next; }rubrica;
Per ogni voce successiva dovrai fare una malloc di assegnamento spazio, il puntatore al nuovo elemento diventerà il next dell'elemento che lo precede e gli assegnamenti saranno fatti con puntatori. Questo procedimento può sembrare brutto, ma se devi ordinare basta invertire l'ordine dei puntatori senza dover fare bubble sort lunghissime.codice:int main(....) { rubrica* prima; prima=(rubrica*)malloc(sizeof(rubrica)); /*poi assegni le varie voci come fosse un puntatore prima->nome ecc ecc*/ e alla fine poni prima->next=NULL; perchè non hai una sola voce
Spero di essere stato d'aiuto![]()