Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429

    [C++] Caricamento di una lista

    Qual è l'algoritmo che permette il caricamento di una lista unidirezionale, cioè costituita da nodi aventi un elemento e un solo puntatore?

    Io so questo algoritmo ma è errata la chiamata alla procedura che ne permette il caricamento.

    Innanzitutto nella dichiarazione ho:

    codice:
    struct lista{
         int n;
         lista* pt;
    };
    
    lista* first=NULL;
    
    int x;
    char risposta;
    
    void inserisci_in_lista(lista*,int);
    Poi ho:

    codice:
    int main()
    {
      do{
         cout<<"Inserisci un valore da inserire nella lista : ";
         cin>>x;
         inserisci_in_lista(first,x);
         cout<<"\nVuoi continuare l'inserimento di valori nella lista? (s/n) : ";
         cin>>risposta;
      }while(risposta=='s');
    
      getch();
      return 0;
    }
    
    void inserisci_in_lista(lista* lx, int val){
              if(lx==NULL){
                    lx=new(lista);
                    lx->n=val;
                    lx->pt=NULL;
              }
              else
                    inserisci_in_lista(lx->pt,val);
    }
    Il problema è la chiamata: se faccio il passaggio per valore poi non mi modifico first, se faccio il passaggio per referenza di first da errore....come si fa?

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Un modo che puoi seguire è non passare la lista se questa e una variabile globale. Oppure fa in modo che la funzioen di inserimento ritorni la lista come risultato.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3

    Funziona

    A me cosi' funziona benissimo:
    codice:
    struct lista{ 
    int n; 
    lista* pt;
    lista(int a, lista *b)
    { n=a; pt=b; }           //Costruttori
    lista() {} };
    
    void inserisci_in_lista(lista*&,int);
    void stampa(lista *);
    
    main()
    {
      lista* first=0;
      int x;
      char risposta;
      do{
          cout<<"Inserisci un valore da inserire nella lista : ";
          cin>>x;
          inserisci_in_lista(first,x);
          cout<<"\nVuoi continuare l'inserimento di valori nella lista? (s/n) : ";
          cin>>risposta;
      }while(risposta=='s');
      stampa(first);
    }
    
    void inserisci_in_lista(lista*& lx, int val)
    {
      if(!lx)
        lx=new lista(val,0);
      else
        inserisci_in_lista(lx->pt,val);
    }
    
    void stampa(lista *lx)
    {
      if(lx)
      {
        cout<<lx->n<<' ';
        stampa(lx->pt);
      }
    }
    Questo pezzo:
    codice:
    struct lista{ 
    int n; 
    lista* pt;
    lista(int a, lista *b)
    { n=a; pt=b; }
    lista() {} };
    Puoi pure scriverlo:
    codice:
    struct lista{ int n; lista* pt; };
    Ma allora devi modificare la funzione "inserisci_in_lista" e scriverla:
    codice:
    void inserisci_in_lista(lista*& lx, int val)
    {
      if(!lx)
      {
        lx=new lista;
        lx->n=val;
        lx->pt=0;
      }
      else
        inserisci_in_lista(lx->pt,val);
    }
    Va bene?
    Dimmi di si ti prego..
    Powered by Fedora & CentOS
    Here I am, brain the size of a planet..

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.