Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Cancellazione elemento da una lista

    Per favore, avrei bisogno di capire come cancellare un elemento da una lista in C++, in pratica questo è il programma:
    Si deve creare una lista di pazienti formata da nome, cognome e età.
    Poi inseriti i dati, si possono fare 5 cose:
    1)aggiungere un nuovo paziente in coda alla lista
    2)cancellare un paziente dalla lista (che non sono riuscito a fare)
    3)stampare a video la lista
    4)svuotare la lista
    5)termina il programma

    Per favore aiutatemi, ci ho provato diverse volte, non so cosa ci sia di sbagliato!

    Questo è l'intero codice:

    codice:
    #include <iostream>
    using namespace std;
    
    
    struct lista
    {
        string paz;   //nome
        string paz2; //cognome
        int paz3;     //età
        lista *punt;
    };
    
    
    int main()
    {
        lista *nodo, *nodo_iniziale;
        string nome;
        string cogn;
        int eta;
        short int num;   //scelta dello switch case
        nodo_iniziale=NULL;
        cout<<"Inserire nome paziente: "<<endl;
            cin>>nome;
        cout<<"Inserire cognome paziente: "<<endl;
            cin>>cogn;
        cout<<"Inserire eta' del paziente: (tra 1 e 110)"<<endl;
            do
                cin>>eta;
            while(eta<1 || eta>110);
            
        while(nome!="stop")                         //creazione della lista e inserimento dei vari pazienti
        {
            nodo=new lista;
            nodo->paz=nome;
            nodo->paz2=cogn;
            nodo->paz3=eta;
            nodo->punt=nodo_iniziale;
            nodo_iniziale=nodo;
            cout<<"Inserire nome paziente; inserire stop per terminare"<<endl;
            cin>>nome;
            if(nome=="stop")
                goto fine;
            cout<<"Inserire cognome paziente: "<<endl;
            cin>>cogn;
            cout<<"Inserire eta' del paziente: (tra 1 e 110)"<<endl;
            do
                cin>>eta;
            while(eta<1 || eta>110);
        }
    
    
        fine:
    
    
        do{
        cout<<"Inserisci 1 per accodare un nuovo paziente in coda alla lista."<<endl;        //menù
        cout<<"Inserisci 2 per cancellare un paziente dalla lista."<<endl;
        cout<<"Inserisci 3 per visualizzare l'elenco dei pazienti."<<endl;
        cout<<"Inserisci 4 per svuotare la lista."<<endl;
        cout<<"Inserisci 5 per far terminare il programma."<<endl;
        do cin>>num;
        while(num<1 || num >5);
    
    
        cout<<endl;
    
    
            switch(num)
            {
                case 1:
                    lista *nodo_finale;                                            //accodamento nuovo paziente
                    cout<<"Inserisci nome nuovo paziente: "<<endl;
                        cin>>nome;
                        cout<<"Inserisci cognome paziente: "<<endl;
                        cin>>cogn;
                        cout<<"Inserisci eta' del paziente: "<<endl;
                        do
                        cin>>eta;
                        while(eta<1 || eta>110);
                        nodo->paz=nome;
                        nodo->paz2=cogn;
                        nodo->paz3=eta;
                        nodo->punt=nodo_iniziale;
                        nodo_iniziale=nodo;
                        nodo_finale=nodo;
                    break;
                case 2:
                    lista *pos;
                    bool trovato;                                                    //cancellazione di un paziente
                    cout<<"Inserisci nome paziente da cancellare: "<<endl;
                        cin>>nome;
                        cout<<"Inserisci cognome paziente: "<<endl;
                        cin>>cogn;
                        cout<<"Inserisci eta' del paziente: "<<endl;
                        do
                        cin>>eta;
                        while(eta<1 || eta>110);
                        pos=nodo_iniziale;
                        trovato=false;
                        while((pos!=NULL)&&(!trovato))
                        {
                            if(pos->paz==nome && pos->paz2==cogn && pos->paz3==eta)
                                {
                                    trovato=true;
                                    pos=NULL;
                                    delete pos;  
                                }
                            else
                            {
                                pos=pos->punt;
                            } 
                        }
    
    
                    break;
                case 3:                                                    //visualizzazione della lista
                    while(nodo!=NULL)
                    {
                        cout<<nodo->paz<<endl;
                        cout<<nodo->paz2<<endl;
                        cout<<nodo->paz3<<endl;
                        nodo=nodo->punt;
                    }
                    break;
                case 4:                                                //svuotamento della lista
                    nodo=NULL;
                    delete nodo;
                    break;
            }
           }while(num!=5);
    }
    Ultima modifica di LeleFT; 14-12-2016 a 09:51 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Darei alcuni consigli, secondo me il programma è da rivedere e riscrivere.
    Hai queste cose da implementare

    1)aggiungere un nuovo paziente in coda alla lista
    2)cancellare un paziente dalla lista (che non sono riuscito a fare)
    3)stampare a video la lista
    4)svuotare la lista
    5)termina il programma

    1) Il programma propone un menu con queste opzioni, in un do while()
    2) Per ogni punto devi implementare una funzione che lo svolga, eccetto il punto 5, che puoi limitarti
    a terminare

    3) il punto uno dice di inserire il nuovo nodo in coda alla lista, quindi scorrerla se diversa da NULL, e inserire alla fine il nuovo nodo, utilizzare un puntatore temporaneo per poter scorrere,
    *tmp= lista, e poi scorri tmp fino a NULL.

    4) Per cancellare un nodo, trovare il nodo da cancellare, salvarlo in un puntatore temporaneo, collegare il nodo che lo precede al nodo successivo, e poi liberare memoria.

    codice:
    lista* EliminaNodo(lista *p){
    codice:
    lista *pos=p;
       lista *tmp=NULL;
          bool trovato;//cancellazione di un paziente
         cout<<"Inserisci nome paziente da cancellare: "<<endl;
         cin>>nome;
         cout<<"Inserisci cognome paziente: "<<endl;
         cin>>cogn;
         cout<<"Inserisci eta' del paziente: "<<endl;
         do
             cin>>eta;
         while(eta<1|| eta>110);
         trovato=false;
         // Se è il primo nodo da eliminare
         if(pos->paz==nome && pos->paz2==cogn && pos->paz3==eta){
    
                                    
                                    tmp=pos; //salvo il riferimento al nodo da canellare
                                    pos=pos->punt; // salto il nodo e passo al sucessivo
                                    delete tmp;   // elimino
                                    return pos ;// esco dalla funzione
           }
         // Se è un nodo diverso dal primo
         while((pos->punt!=NULL)&&(!trovato)){
    
                 if(pos->punt->paz==nome && pos->punt->paz2==cogn && pos->punt->paz3==eta)
                 {
                                    trovato=true;
                                    tmp=pos->punt; //salvo il riferimento al nodo da canellare
                                   pos->punt=pos->punt->punt; // salto il nodo e passo al sucessivo
                                    delete tmp;   // elimino
                                    return p ;// esco dalla funzione
                  }
    
                 pos=pos->punt;     
         }//end while
     
    }// end function
    
    
    
    Ultima modifica di torn24; 15-12-2016 a 11:07
    Tecnologia

  3. #3
    Grazie mille, finalmente ho risolto questo problema!

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.