Lista elemento maggiore

di il
3 risposte

Lista elemento maggiore

Salve a tutti ho un problema con il mio programma. Mi sto esercitando con le liste solo che non riesco a trovare il valore massimo nella lista e in piu non riesco a stampare la lista. Qualcuno che mi da una mano!! Ringrazio in anticipo a tutti
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

/*--------------------------------------------------NODO--------*/
typedef struct Snodo{
    int val;
    struct Snodo* next;
}Tnodo;
/*--------------------------------------------------PUNTATORE AL NODO--------*/
typedef Tnodo* Pnodo;

/*--------------------------------------------------LISTA--------*/
typedef struct Slista{
    /*puntatore al primo nodo*/
    Pnodo testa;
    /*numero elementi lista*/
    int N;

}Tlista;

/*--------------------------------------------------PROTOTIPI FUNZIONI--------*/
Tlista crealista();
Tlista aggiungiInTesta(Tlista lista,int V);
void stampaLista(Tlista l);
Pnodo valoreMaggiore(Tlista l);
/*--------------------------------------------------MAIN--------*/
int main()
{
    Tlista l;
    int num;
    int A;
    int i;
    l=crealista();

    printf("quanti valori vuoi aggiungere alla lista\n");
    scanf("%d",&num);

    for(i=0;i<num;i++){
        printf("inseire valore alla lista\n");
        scanf("%d",&A);
        l=aggiungiInTesta(l,A);
    }
    stampaLista(l);
    printf("il numero piu alto della lista e': %d",valoreMaggiore(l)->val);



    return 0;
}
/*--------------------------------------------------IMPLEMENTO FUNZIONI--------*/
Tlista crealista(){
    Tlista ris;
    ris.testa=NULL;
    ris.N=0;
    return ris;
}
Tlista aggiungiInTesta(Tlista lista,int V){
    Pnodo nuovonodo;
    nuovonodo=malloc(sizeof(Tnodo));
    nuovonodo->val=V;
    nuovonodo->next=lista.testa;
    lista.testa=nuovonodo;
    lista.N++;
    return lista;
}
void stampaLista(Tlista l){
    Pnodo p1;
    p1=l.testa;
    printf("\ngli elementi della lista sono:\n");
    while(p1=!NULL){
        printf("%d ",p1->val);
        p1=p1->next;
    }
    return;
}
Pnodo valoreMaggiore(Tlista l){
    Pnodo ris;
    ris=l.testa;
    int i;
    int cont;
    cont=l.N;
    for(i=0;i<cont;i++){
        if(ris<ris->next){
            ris=ris->next;
        }
    }


    return ris;
}

3 Risposte

  • Re: Lista elemento maggiore

    Ciao, ci sono due errori.
    Il primo, l'operatore "diverso" nella funzione stampaLista:
    while(p1=!NULL)
    andava scritto:
    while(p1!=NULL)
    altrimenti fai un'assegnazione. Le warning del compilatore vanno lette.

    Secondo, la funzione che cerca il massimo è sbagliata. Intanto nel for fai un confronto di puntatori, non di interi. Cosa vuol dire "ris<ris->next"? Forse intendevi "ris->val<ris->next->val". Oltre all'errore di sintassi, resta il fatto che la lista va scansionata tutta, mentre quel ciclo for resta fermo sul primo elemento se questo non è maggiore del successivo.
  • Re: Lista elemento maggiore

    Quindi dovrei usare sempre un while per scorrere la lista? per trovare l'elemento maggiore giusto.
  • Re: Lista elemento maggiore

    Puoi farlo con un while o con un for, però la lista la devi scorrere con un puntatore (non un contatore) diverso da ris, perché ris viene aggiornato solo se trovi un valore più grande.
Devi accedere o registrarti per scrivere nel forum
3 risposte