Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C++] Strutture

  1. #1

    [C++] Strutture

    Ciao, un amico per insegnaermi i puntatori mi ha mandato questo codice:

    codice:
    #include <iostream.h>
    #include <stdlib.h>
    
    // Description: Gestione di una lista di interi
    struct el
       { int inf;
         el *pun; 
       };
       
    el *crealista(int n);
    el *estrai(el *&p);
    void accoda(el *&p); 
    
    int main()
    {
      el *p0, *p;
      int k;
      cout<<"Con quanti elementi vuoi inizializzare la lista? ";
      cin>>k;
      p0=crealista(k);
      for (p=p0; p!=0; p=p->pun) cout<<p->inf<<"\t";   // visualizzo gli elementi
      cout<<endl;                                                     
      system("PAUSE");
      if (p0 !=0) 
        {
            accoda(p0);    // aggiunge un elemento in coda alla lista
            p0=estrai(p0);   //elimino l'elemento in testa alla lista
            for (p=p0; p!=0; p=p->pun) cout<<p->inf<<"\t";
            system("PAUSE");  
        } 
        else cout<<"hai creato una lista vuota\n";
      return 0; 
    };
    
    el *crealista(int n)
     {
       el *p, *p0=0;
       int i;
       for (i=1; i<=n; i++)
        {  p=new el;
           cin>>p->inf;
           p->pun=p0;
           p0=p;
        }
      return p0;
    };
    
    el *estrai(el *&p)
     {
       el *pp;
       pp= p->pun;
       delete p;
       return pp;
    };
    
    void accoda(el *&p)
     {
       el *np, *pp;
       for (pp=p; pp->pun!=0; pp=pp->pun);
       np=new el;
       cin>>np->inf;
       np->pun=0;
       pp->pun=np;
       pp= p->pun;
    };
    Solamente non somno ben riuscito a capire che cosa faccia...

    struct el
    { int inf;
    el *pun; // Non capisco
    };

    el *crealista(int n); // Non capisco
    el *estrai(el *&p); // Non capisco

    Questi sono i pezzi principali che non ho capito, e non capendo questi, anche il resto non posso saperlo...


    Qualcuno puo aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di Angioletto
    Registrato dal
    Jan 2004
    Messaggi
    1,246
    struct el
    { int inf;
    el *pun;
    };

    Ti ha definito un tipo di dato record, al cui interno vi sono 2 campi, uno atto a contenere un intero e l'altro un puntatore..
    Non so se hai ben capito cosa sia la lista..bhè, ogni suo elemento è un record(almeno nel tuo caso), e tu puoi accedere ai record tramite dei puntatori (magari allocati anche dinamicamente)..Anzichè conservarti tutti i puntatori a tutti i record ,ti vai a creare una lista.. Puoi accedere a tutti i suoi elementi attraverso un solo puntatore: in questo puntatore ci sarà l'indirizzo di un solo record, ma nel record troverai l'indirizzo dell'elemento (record) successivo (ecco a cosa serve el* pun), e così via...


    el *crealista(int n)
    {
    el *p, *p0=0;
    int i;
    for (i=1; i<=n; i++)
    { p=new el;
    cin>>p->inf;
    p->pun=p0;
    p0=p;
    }
    return p0;
    };

    Questa fuzione crea una lista.Gli passi il numero di elementi che deve contenere e ti restituisce il puntatore alla lista (el *)..
    Il ciclo è infatti ripetuto in base al numero che hai inserito nel main, ad ogni passo
    1) ti alloca dinamicamente una struct el (p=new el),
    2) ti chiede di inserire un intero (cin>>p->inf),
    3) ti inizializza il campo puntatore a null,
    4) in p0 ti passa il puntatore all'ultima struct inserita,
    che è poi ciò che la funzione ti restituisce.
    Alla fine, la prima struct inserita è l'ultima cui puoi accedere, e il suo campo puntatore è inizializzato a null.


    el *estrai(el *&p)
    {
    el *pp;
    pp= p->pun;
    delete p;
    return pp;
    };

    Sarebbe stato + giusto chiamarla elimina: infatti con questa funzione elimini un elemento della lista (delete p), stando però attento a salvare il puntatore contenuto nella struct da eliminare (pp=p->num), altrimenti perdi tutto il resto della lista!!La fuzione ti restituisce proprio quel puntatore: dovrà poi essere inserito nel primo elemento della lista che precedeva quello che hai eliminato...

    Prova ora a capire cosa può fare accoda!!!

    Sperando ovviamente di essere stato abbastanza chiaro!!!



    :quipy:
    Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)

  3. #3
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    codice:
    struct el 
    { int inf; 
    el *pun; // Non capisco 
    };
    el *pun sicnifica che dichiara un puntatore ad un'altra struttura lista. Quindi ogni elemento delle lista avrà un puntatore a quello successivo!

    [EDIT]

    Non avevo visto la risposta...
    [/EDIT]

  4. #4
    Utente di HTML.it L'avatar di Angioletto
    Registrato dal
    Jan 2004
    Messaggi
    1,246
    posso chiedervi una piccola cortesia??
    Come fate nelle risposte a inserire quelle linee orizzontali??

    :quipy:
    Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)

  5. #5
    Originariamente inviato da Angioletto
    posso chiedervi una piccola cortesia??
    Come fate nelle risposte a inserire quelle linee orizzontali??

    :quipy:
    scrivi il tuo codice indentato tra i tag

    [C O D E]

    e

    [/C O D E]

    P.s. ovviamente gli spazi tra una lettera e l'altra non ci vanno.

    leggi qua:
    http://forum.html.it/forum/misc.php?s=&action=bbcode
    ...Terrible warlords, good warlords, and an english song

  6. #6
    Originariamente inviato da Angioletto
    posso chiedervi una piccola cortesia??
    Come fate nelle risposte a inserire quelle linee orizzontali??

    :quipy:
    puoi cliccare "quote" in basso a destra del messaggio

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.