Corso di Informatica 1 (IN110)

Gli esercizi

Testi e soluzioni di alcuni esercizi

Costruzione di una lista ordinata

/* ** lista_ordinata.c ** ** Letta in input una sequenza di numeri interi la memorizza ** in una lista in ordine crescente. ** ** Marco Liverani (liverani@mat.uniroma3.it) - Aprile 2001 ** */
#include <stdlib.h> #include <stdio.h>
/* * struttura per la rappresentazione dei nodi della lista */
struct nodo { int info; struct nodo *next; };
/* * Legge in input una sequenza di n numeri interi e li memorizza * in una lista ordinata (in ordine crescente). Restituisce il * puntatore al primo elemento della lista. */
struct nodo *leggi_lista_ordinata(void) { struct nodo *p, *p1, *primo, *prec; int i, n, x; primo = NULL; printf("Numero di elementi: "); scanf("%d", &n); for (i=0; i<n; i++) { scanf("%d", &x); p = malloc(sizeof(struct nodo)); p->info = x; p1 = primo; prec = NULL; while (p1 != NULL && p1->info < p->info) { prec = p1; p1 = p1->next; } if (prec != NULL) { prec->next = p; } else { primo = p; } p->next = p1; } return(primo); }
/* * Stampa la lista partendo dall'elemento puntato dal * puntatore p ricevuto come parametro. */
void stampa_lista(struct nodo *p) { while (p != NULL) { printf("%d ---> ", p->info); p = p->next; } printf("NULL\n"); return; }
/* * Funzione principale. */
int main(void) { struct nodo *primo; primo = leggi_lista_ordinata(); stampa_lista(primo); return(0); }
Valid HTML 4.01! Valid CSS!
Author: Marco Liverani - Last modified: Thursday November 03, 2016 - URI: http://www.mat.uniroma3.it/users/liverani/IN110/20010427a.shtml