|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2001
Città: Poppi (AR)
Messaggi: 764
|
lista in C: problema!
#include <stdio.h>
#include <stdlib.h> #define max 6 struct nodo { float inf; int k; struct nodo *next; }; struct nodo *build(struct nodo *, float value, int); int findK(struct nodo *, float); float findINF(struct nodo *, int); struct nodo *order(struct nodo *, struct nodo *); void stampa(struct nodo *); int main() { struct nodo *lista = NULL, *lista1=NULL; float V1[max]; int i; float min; printf("Inserire dati:\n"); for (i=0;i<max;i++) scanf("%f", &V1[i]); for (i=0;i<max;i++) lista=build(lista, V1[i], i); if (lista != NULL) min=lista->inf; printf("L'indice del valore minimo e' %d.\n",findK(lista,min)); printf ("Nella posizione 3 c'e' il valore %f.\n",findINF(lista, 3)); lista1=order(lista1,lista); stampa(lista1); system("pause"); } struct nodo *build(struct nodo *lista, float value, int i) { if (lista == NULL) { lista=(struct nodo *)malloc(sizeof(struct nodo)); lista->inf=value; lista->k=i; lista->next=NULL; } else lista->next=build(lista->next,value,i); return lista; } int findK(struct nodo *lista, float min) { static i; if (lista != NULL) { if (lista->inf < min) { min=lista->inf; i=lista->k; } min=findK(lista->next, min); } return i; } float findINF(struct nodo *lista, int i) { float value; if (lista != NULL) { if (i == lista->k) value=lista->inf; else value=findINF(lista->next, i); } return value; } struct nodo *order(struct nodo *lista1, struct nodo *lista) { float min; if (lista1 == NULL) { lista1=(struct nodo *)malloc(sizeof(struct nodo)); if (lista != NULL) min=lista->inf; lista1->inf=findINF(lista, findK(lista,min)); XXXXXXX lista1->next=NULL; } else lista1=order(lista1->next,lista); return lista1; } void stampa(struct nodo *list) { if (list != NULL) { printf("%f ", list->inf); stampa(list->next); } } il programma costruisce una lista non ordinata a partire da un array, la funzione findK trova l'indice del valore minimo e la findINF trova il valore corrispondente all'indice k. poi devo utilizzare la lista e SOLO le due funzioni sopra per costruire una lista ordinata in modo crescente, con la funzione order. il fatto è che trova il minimo della lista vecchia e lo mette nella prima posizione della lista nuova, ma dopo prende sempre quello. bisogna eliminarlo una volta trovato in modo che prenda il valore immediatamente più grande, ma non so come fare! so con l'acqua alla gola AIUTOOOOOO.
__________________
PaintedHomepage.com - Cicoandcico company la vera forza non sta nel non cadere mai, ma nel risollevarsi dopo una caduta. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Senza una funzione che cancella un certo elemento k dalla lista credo che sia quasi impossibile (a meno di scansionare tutti gli elementi della lista)...
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:57.