Cancellazione elemento da una lista

di il
1 risposte

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:

#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);
}

1 Risposte

  • Re: Cancellazione elemento da una lista

    Sono un po' negato nelle speigazioni ma ci provo ugualmente, devi prendere il puntatore dell'elemento precedente, e farlo puntare all'elemento successivo
    elemento n da cancellare n-1 dovra' puntare ad n+1
    se e' il primo elemento che vuoi cancellare allora cambi solo il puntatore al primo nodo
    se vuoi eleminare l'ultimo fai puntare semplicemente il penultimo elemento della lista a null
    ps non sarebbe meglio crearti delle funzioni inserimento cancellazioni ecc invece di avere tutto nel main

    Pss scusa se la spiegazione e' poco chiare ma ho 2 ore di sonno spero ti possa essere ugualmente utile
Devi accedere o registrarti per scrivere nel forum
1 risposte