Corso IN110 Algoritmi e Strutture Dati

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);
}

Università degli Studi Roma Tre - Dipartimento di Matematica e Fisica - Corso di laurea in Matematica - Corso di Informatica 1 (IN110)

Author: Marco Liverani - Last modified: Wednesday November 20, 2019 - URI: http://www.mat.uniroma3.it/users/liverani/IN1/20010427a.shtml