PDA

Visualizza la versione completa : [C] esercizio, ricerca massimo in una lista


steve0
26-11-2016, 17:28
Salve, apro questa discussione per un aiuto su un esercizio in linguaggio C. Devo scrivere un programma in C con una funzione che trovi il valore massimo contenuto in una lista semplicemente concatenata di numeri interi fornita da input e restituisca il valore massimo come output, se la lista è nulla la funzione deve restituire 0. :confused: Sono le prime volte che lavoro sulle liste e non trovo un modo di scorrere la lista per trovare il valore massimo, ringrazio anticipatamente chi mi saprà aiutare.

Scara95
26-11-2016, 18:22
Mostra il codice in cui definisci la struttura della lista e la riempi.

TotalNoob
26-11-2016, 23:18
Ciao, potresti scorrere la tua lista con semplice ciclo while cioè:


while(cella != NULL){
// fai quello che devi fdare
cella = cella->next;
}


ove cella sara il puntatore al primo nodo della lista) Se devi cercare il massimo valore, ti converrà di salvare il
valore del primo nodo in una variabile locale e poi ad ogni iterazione del ciclo andare a vedere se il valore corrente è inferiore, allora aggiorni la variabile.. Alla fine, cioè dopo il ciclo, basterà restituire la variabile)

steve0
27-11-2016, 12:02
Di seguito il codice di un programma per inserire da input numeri in una lista e poi visualizzarli in output (al quale poi aggiungerei la funzione per trovare il numero massimo), che però non compila e restituisce come errore: "[Error] unknown type name 'lista'" e "[Error] 'info' undeclared (first use in this function)".



#include <stdio.h>
#include <stdlib.h>

//dichiarazione lista di numeri interi
struct lista {
int info;
struct lista *next;
};

int main(int argc, char *argv[]) {

lista list;

//inserisco in input elementi nella lista
while(info != NULL){
printf("Inserisci un numero\n");
scanf("%d", &info)
info = info->next;
}

//visualizzo elementi nella lista
while(info != NULL){
printf("%d \n", info);
info = info->next;
}

system("pause");
return 0;
}


Cosa devo correggere nel codice riportato?

Scara95
27-11-2016, 12:52
Non esiste nessun tipo di dato lista, forse volevi intendere struct lista.
la variabile info che usi nel main non è dichiarata da nessuna parte, inoltre non la stai comunque utilizzando in modo corretto in quanto prima la usi come intero (scanf("%d", &info)), poi come un puntatore a un qualche tipo di struttura contenente un campo next (info = info->next)
Supponendo tu stia trattando info come un puntatore a struct lista, dove allochi la memoria?

steve0
27-11-2016, 13:19
Non esiste nessun tipo di dato lista, forse volevi intendere struct lista.
la variabile info che usi nel main non è dichiarata da nessuna parte, inoltre non la stai comunque utilizzando in modo corretto in quanto prima la usi come intero (scanf("%d", &info)), poi come un puntatore a un qualche tipo di struttura contenente un campo next (info = info->next)
Supponendo tu stia trattando info come un puntatore a struct lista, dove allochi la memoria?


Vorrei dichiarare una lista semplicemente concatenata di numeri interi, potresti indicarmi il codice corretto per dichiarazione e ciclo di scorrimento della stessa?

torn24
28-11-2016, 07:21
Cosa devo correggere nel codice riportato?
Nel tuo codice non crei nessuna lista.
Una lista è composta da puntatori a struct, contenenti a loro volta un puntatore a se stessi.




typedef struct lista { // Per comodità ci creiamo un tipo, invece di usare la sintassi struct lista useremo L
int info;
struct lista *next;
}L;

L* InserisciTesta(L *lista); //Prototipo


L* InserisciTesta(L *lista){

L*tmp=(L*)malloc(sizeof(L));
tmp->next=lista;
return tmp;


}


int main(){

L*lista=NULL;

lista=InserisciTesta(lista);// restituisce una nuova lista che viene assegnata al puntatore nel main()




}





P.S. Ho voluto postare un esempio, perché in rete sono disponibili innumerevoli esempi di liste inserimento in testa o inserimento in coda, e non sono "abilità di programmazione" ma elementi base come usare una struttura di controllo, quindi personalmente credo che non ci sia niente di male fare esempi di questo tipo...

Loading