Ho un problema con la funzione per eliminare un elemento all'interno di una lista. Questo quando è presente un solo elemento me lo elimina ed elimina anche l'elemento che si trova più in alto nella lista, ma gli altri no. Vi posto il codice:
listaord.h
listaord.cppcodice:#ifndef LISTAORD_H_ #define LISTAORD_H_ #include <iostream> struct Record; typedef Record* L; typedef int E; struct Record { E elem; L punt; }; void inizializza(L& l); bool empty(const L& l); bool full(const L& l); void inserisce(L& l,const E& e); bool elimina(L& l,const E& e); void stampa(const L l); #endif /*LISTAORD_H_*/
codice://Contiene le definizioni delle funzioni #include <iostream> #include "listaord.h" using namespace std; //Inizializza lista void inizializza(L& l){ l=NULL; } //Controlla se Vuota bool empty(const L& l){ return(l==NULL); } //Controlla se piena bool full(const L& l){ return false; } //Funzione utilizzata da Inserisce void push(L& l,const E& e){ L q=new Record; q->elem=e; q->punt=l; l=q; } //Funzione Inserisce void inserisce(L& l,const E& e){ if((l==NULL) || (e>l->elem)) push(l,e); else inserisce(l->punt,e); } //Utilizzata da Elimina void eliminatesta(L& l){ L lc=l->punt; delete l; l=lc; } //Elimina bool elimina(L& l,const E& e){ bool trovato=false; if(l!=NULL){ if(e==l->elem){ trovato=true; eliminatesta(l); } return trovato; } else return elimina(l->punt,e); } //Stampa void stampa(const L l){ if(l!=NULL){ cout<<l->elem<<endl; stampa(l->punt); } }
usalistaord.cpp
codice:#include <iostream> #include "listaord.h" using namespace std; //Prototipi di funzioni definite in questo modulo void presenta_menu(int& scelta); void inserimento(L& l); void estrazione(L& l); void print(const L& l); int main() { L l; //definisce variabile di tipo lista int scelta, esci=0; inizializza(l); // inizializza la lista do { presenta_menu(scelta); switch (scelta) { case 1: inserimento(l);break; case 2: estrazione(l);break; case 3: print(l);break; case 4: esci=1;break; default: cout << "\n opzione errata!"; } } while (!esci); } void presenta_menu(int& scelta) { do { // stampa il menu' delle operazioni previste cout<<"\n Gestione di una lista dinamica ORDINATA"; cout<<"\n1) Inserimento di un elemento\n "; cout<<"\n2) Cancellazione di un elemento\n "; cout<<"\n3) Visualizza la lista\n "; cout<<"\n4) Fine\n "; cout<<"\n Inserisci una opzione: "; cin>>scelta; cout << "\n"; } while ((scelta<1)||(scelta>4)); } void inserimento(L& l) { E e ; cout<<"Opzione 1 - inserimento di un elemento\n "; cout<<"elemento= "; cin>>e; if (!full(l)) inserisce(l,e); else cout<<"\n Lista piena\n "; } void estrazione(L& l) { E e; cout<<"Opzione 2 - cancella un elemento\n "; if (!empty(l)) { cout<<"elemento da eliminare= "; cin>>e; if (elimina(l,e)) cout<<"\nelemento = "<<e << "cancellato!"; else cout<<"Elemento non presente nella lista.\n "; } else cout<<"Lista vuota cancellazione impossibile\n "; } void print(const L& l) { cout<<"Opzione 3 - stampa della lista\n "; if (!empty(l)) stampa(l); else cout << "\nLista vuota!"; }



Rispondi quotando