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

    [C++] Funzione Elimina Da Lista Ordinata

    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

    codice:
    #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_*/
    listaord.cpp

    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!";
    }
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  2. #2
    Qualcuno ha capito il problema?
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  3. #3
    La tua funzione elimina in realtà fa due cose: cerca ed elimina.
    Io separerei i due problemi, scriverei una funzione di ricerca, ed una funzione di eliminazione.
    Poi se avessi bisogno di una funzione che cerca ed elimina, allora la costruirei basandomi sulle due funzioni di ricerca ed eliminazione.
    [cit]
    "Dividi et impera" Leonardo da Vinci
    [/cit]

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.