Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643

    [C] urgentissimo: altro quesito sulle liste concatenate

    Ragazzi domani ho l'esame...è su carta...è un anno che non tocco liste concatenate...le avevo capite discretamente ma ora sono arruginito...

    il quesito è il seguente:

    dato il seguente tipo di dato:

    struct nodoLista{
    int dato;
    struct nodoLista *nextPtr;
    }
    typedef nodoLista NODOLISTA;
    typedef NODOLISTA *NODOLISTAPTR;

    scrivere una funzione che scorre tutta la lista e restituisce il valore massimo del campo dato.

    Alloraaaa...io l'ho pensato così (la sintassi sarà sbagliata perchè non l'ho fatto al pc ma su carta dopo un anno che non facevo liste...ditemi solo se la logica è èiù o meno giusta)

    codice:
    ..................
    ..................
    struct nodoLista{
          int dato;
          struct nodoLista *nextPtr;
    }
    typedef nodoLista NODOLISTA;
    typedef NODOLISTA *NODOLISTAPTR;
    
    int maximumlist(LISTNODEPTR)
    
    int main(){
        ..................
        ..................
        ..................
        max = maximumlist(startPtr)
        ..................
        ..................
        ..................
        return 0;
    }
    
    int maximumlist(currentPtr){    // Riceve il puntatore al nodo corrente
        int max = 0;    // Valore massimo
        int corrente;   // Valore corrente
        
        if(currentPtr == NULL){
            prinf("Lista vuota\n");
            return NULL;  // Se la lista non contiene nodi ritonra NULL al chiamante
        }
        
        else{
            corrente = currentPtr->dato; // setta corrente con il campo dato del primo nodo
            
            while(currentPtr != NULL){       // scorri la lista fino all'ultimo nodo
                    corrente = currentPtr->dato ;  // aggiorna il valore di corrente
                    if(corrente>massimo)    // se il valore corrente è>del massimo
                        massimo = corrente;  //aggiorna il valore di massimo
                        
                    currentPtr=currentPtr->next; //Passa al prossimo nodo
            }
            
            return massimo;        // Restituisci il valore di massimo al chiamante
    }
    ha un suo senso?

    Grazie
    Andrea

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    A parte qualche problema di sintassi, la logica e' corretta.

    L'unica "rilievo" riguarda la linea

    corrente = currentPtr->dato; // setta corrente con il campo dato del primo nodo

    Essa e' inutile, in quanto il primo valore lo imposti appena entrato nel ciclo ... per il resto va bene ...

  3. #3

    Re: [C] urgentissimo: altro quesito sulle liste concatenate

    Originariamente inviato da D4rkAng3l
    Ragazzi domani ho l'esame...è su carta...è un anno che non tocco liste concatenate...le avevo capite discretamente ma ora sono arruginito...

    il quesito è il seguente:

    dato il seguente tipo di dato:

    struct nodoLista{
    int dato;
    struct nodoLista *nextPtr;
    }
    typedef nodoLista NODOLISTA;
    typedef NODOLISTA *NODOLISTAPTR;

    scrivere una funzione che scorre tutta la lista e restituisce il valore massimo del campo dato.

    Alloraaaa...io l'ho pensato così (la sintassi sarà sbagliata perchè non l'ho fatto al pc ma su carta dopo un anno che non facevo liste...ditemi solo se la logica è èiù o meno giusta)

    codice:
    ..................
    ..................
    struct nodoLista{
          int dato;
          struct nodoLista *nextPtr;
    }
    typedef nodoLista NODOLISTA;
    typedef NODOLISTA *NODOLISTAPTR;
    
    int maximumlist(LISTNODEPTR)
    
    int main(){
        ..................
        ..................
        ..................
        max = maximumlist(startPtr)
        ..................
        ..................
        ..................
        return 0;
    }
    
    int maximumlist(currentPtr){    // Riceve il puntatore al nodo corrente
        int max = 0;    // Valore massimo
        int corrente;   // Valore corrente
        
        if(currentPtr == NULL){
            prinf("Lista vuota\n");
            return NULL;  // Se la lista non contiene nodi ritonra NULL al chiamante
        }
        
        else{
            corrente = currentPtr->dato; // setta corrente con il campo dato del primo nodo
            
            while(currentPtr != NULL){       // scorri la lista fino all'ultimo nodo
                    corrente = currentPtr->dato ;  // aggiorna il valore di corrente
                    if(corrente>massimo)    // se il valore corrente è>del massimo
                        massimo = corrente;  //aggiorna il valore di massimo
                        
                    currentPtr=currentPtr->next; //Passa al prossimo nodo
            }
            
            return massimo;        // Restituisci il valore di massimo al chiamante
    }
    ha un suo senso?

    Grazie
    Andrea
    Mi sembra apposto.Giusto ti posso fare due osservazioni:
    1) fai per prima cosa il controllo sulla lista vuota e in quel caso ritorna 0 non NULL (che è un valore per puntatori).
    2) se la lista non è vuota max inizializzalo direttamente con il valore del primo elemento della lista invece che con zero e parti dal secondo, risparmi un'iterazione.
    Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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.