Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102

    Chiarimenti su Struct Ricorsive

    Salve a tutti, questo è attualmente uno degli argomenti con cui ho piu problemi, mi sapreste spiegare come funziona una struttura ricorsiva ?

  2. #2
    Intendi una struct che ha come membro un puntatore ad un'altra sua istanza?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    codice:
    struct node{
      int data;
      struct node *nextPtr;
    };
    Ecco, sul mio libro è la prima cosa che mostra

  4. #4
    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.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    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?
    *nextPtr punta di nuovo a node ?

  6. #6
    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.

  7. #7
    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ì

    codice:
    #incl.......
    
    typedef struct voce
    {
        char nome[20];
        char numero[20];
        struct voce*  next;
    }rubrica;
    Nel main però ora devi crearle tenendoti i vari puntatori agli elementi, così sai cosa sono (il titolo di prima). Quindi diventa tipo

    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
    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.

    Spero di essere stato d'aiuto

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    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ì

    codice:
    #incl.......
    
    typedef struct voce
    {
        char nome[20];
        char numero[20];
        struct voce*  next;
    }rubrica;
    Nel main però ora devi crearle tenendoti i vari puntatori agli elementi, così sai cosa sono (il titolo di prima). Quindi diventa tipo

    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
    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.

    Spero di essere stato d'aiuto
    Grazie mille ! Mi sei stato molto di aiuto !!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.