Curiosità pop

di il
8 risposte

Curiosità pop

Non riesco a capire perchè quando estraggo da una lista con questa procedura :
void pop(L& l,E& e) {     
		e=l->elem;  	
		L p=l;			
		l=l->punt;		//<------------aggiorno l
		delete p;
per aggiornare l ( puntatore al nodo precedente) prima bisogna crearsi un puntatore a cui assegnamo il valore di l , poi aggiorniamo l e poi deallochiamo il puntatore creato, perchè si fa? se aggiornassimo direttamente il puntatore così non sarebbe uguale?
void pop(L& l,E& e) {     
		e=l->elem;  	
		l=l->punt;		//<------------aggiorno l
		
probabilmente (sicuramente) ho detto una cavolata, ma aiutatemi a capire il motivo di quell'allocazione e deallocazione

8 Risposte

  • Re: Curiosità pop

    Quel che manca é il delete. Come faccio a recuperare l indirizzo che mi serve se l ho appena cancellato? ecco il perché del ptr temporaneo
  • Re: Curiosità pop

    Ma funziona lo stesso , credevo fosse legato alla heap
  • Re: Curiosità pop

    Il delete chiama il distruttore della memoria allocata della new nell heap. E' necessario perchè altrimenti incorri nei memory leak.
  • Re: Curiosità pop

    Okok, ho aggiustato, ma ho un problema con la funzione per la ricerca di elementi :
    
    bool inList(L&l, int &info){
    if(l==0)return false;
    else if(info==l->val) return true;
    else return inList(l->next,info);
    	 }
    nel main:
    	cout<<"\nInserisci l'elemento da cercare:\n";
    	cin>>info;
    	if (  inList(l, info))cout<<"L'elemento è presente !\n";
    	else cout <<"L'elemento non è presente . . .\n";
    	
    	
    
    mi da sempre che non è presente
  • Re: Curiosità pop

    Con il mio centesimo messaggio vi dico che ho risolto, il problema era che inserivo questa funzione dopo la pop, e ovviamente si svuotava, percui non poteva trovare nulla
  • Re: Curiosità pop

    Adesso che sono un utente semi-senior comunque non ho idea di come possa fare per cercare il massimo nella lista :S
  • Re: Curiosità pop

    Una cosa del genere potrebbe funzionare?
    int max =0;
    	L pl;
    	for( pl=l;pl!=0;pl=l->next){
    		if ( l->val>max)
    			max = l->val;
    		
    	}cout <<max<<" ";
    magari con qualche modifica di qualcuno che ne sa più di me
  • Re: Curiosità pop

    Magari potresti usare un while come segue:
    
    bool getMaxValue (L l,int &n){
        if(l==0)return false;
        int pos=l->value;
        while((l=l->next)!=0){
            if (pos < l->val)
                pos = l->val;
        }
        n=pos;
        return true;
    }
    
    potresti poi utilizzarla così:
    
        //******* altro codice
        int vmax;
        if (getMaxValue(lista,vmax) = true)
            cout<<"\nIl valore massimo in lista è "<<vmax<<".";
        else
            cout<<"\nNessun valore in lista."
        //********  altro codice
    
Devi accedere o registrarti per scrivere nel forum
8 risposte