19/01/14 13:21
bububs
(Premetto che la lezione non l'ho seguita causa malattia, quindi ho visto per conto mio questa parte dei puntatori a struct)
L'esercizio consiste nel leggere una sequenza di numeri interi, terminata da un
numero negativo, e la memorizza in una lista concatenata in modo tale che risulti
ordinata in senso crescente. Ho provato però non capisco perchè non funziona in certi casi. Sapreste aiutarmi?
P.S. con questi numeri non ordina correttamente: 5 2 6 4 8 1 -1
L'esercizio consiste nel leggere una sequenza di numeri interi, terminata da un
numero negativo, e la memorizza in una lista concatenata in modo tale che risulti
ordinata in senso crescente. Ho provato però non capisco perchè non funziona in certi casi. Sapreste aiutarmi?
P.S. con questi numeri non ordina correttamente: 5 2 6 4 8 1 -1
#include <iostream> #include <stdlib.h> using namespace std; struct lista{ int val; lista *next; }; void inserisci_testa(lista *&l, int x); void inserisci_coda(lista *&l, int x); void inserisci_ordinato(lista *&l, int x); int length(lista *l); void stampa_lista(lista *&l); int main() { int x; lista *l1 = NULL; cout << "Dai una sequenza di numeri interi (negativo per smettere):\n"; do{ cin >> x; if(x >= 0) inserisci_ordinato(l1, x); } while(x >= 0); if( length(l1) == 0 ) cout << "\nLetto e memorizzato nessun numero\n"; else if( length(l1) == 1 ) cout << "\nLetto e memorizzato un solo numero\n"; else cout << "\nLetti e memorizzati "<< length(l1) << " numeri\n"; cout << "\nSequenza ordinata:\n"; stampa_lista(l1); cout << "\n\n"; return 0; } bool lista_vuota(lista *l){ return (l == NULL); } void inserisci_testa(lista *&l, int x){ lista *t = new lista; t -> val = x; t -> next = l; l = t; } void inserisci_coda(lista *&l, int x){ if( lista_vuota(l) ) inserisci_testa(l, x); else{ lista *t; for(t = l; t -> next != NULL; t = t -> next); t -> next = new lista; t -> next -> val = x; t -> next -> next = NULL; } } void inserisci_ordinato(lista *&l, int x){ if(lista_vuota(l) || l -> val >= x) inserisci_testa(l, x); else if(l -> val < x) inserisci_coda(l, x); } int length(lista *l){ if (l == NULL) return 0; else return ( length(l -> next) + 1 ); } void stampa_lista(lista *&l){ lista *t = new lista; for(t = l; t != NULL; t = t -> next) cout << t -> val << " "; }
Ultima modifica effettuata da bububs 19/01/14 13:22
aaa