Listino

Considerate il programma riportato in coda, che contiene alcune funzioni per la manipolazione di liste di interi.

Modificate il programma in modo che, invece di interi, le lista possano contenere informazioni relative ai prezzi dei prodotti di un grande magazzino.

Ogni prodotto รจ descritto da una stringa di lunghezza arbitraria, il suo prezzo da un un numero intero. Assicuratevi che venga allocato lo spazio necessario per memorizzare le stringhe che descrivono i prodotti.

Esempio

Eseguendo

./soluzione

avendo nel flusso di ingresso le righe:

+ 469 lavatrice
+ 1000 televisione a colori
+ 217 smart phone
p
f

il programma emette sul flusso di uscita:

smart phone: 217
televisione a colori: 1000
lavatrice: 469

Esempio

Eseguendo

./soluzione

avendo nel flusso di ingresso le righe:

il programma emette sul flusso di uscita:

Programma da completare


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

struct element {
  int info;   
  struct element *next;
};

typedef struct element  element;  


element *insert(int n, element *h);
void printList(element *h);

/* SI MODIFICHI OPPORTUNAMENTE IL SEGUENTE PROTOTIPO DI FUNZIONE */
..... find( .... , ....);




/*  Inserisce un nuovo elemento contenente n in testa alla lista  h   
    Restituisce la lista ottenuta. */
element *insert(int n, element *h){
  element *new = malloc(sizeof(element));
  new->info = n;
  new->next = h;
  return new;
}


/* Stampa gli elementi della lista   h */
void printList(element *h){
  /* h e' usato  per attraversare la  lista */
  for( ; h!= NULL; h=h->next)
    printf("%d ", h->info);
  putchar('\n');
}



/* Cerca l'intero  n nella lista  h.   
   Se n e' nella lista  restituisce  l'indirizzo del primo elemento che lo contiene,
   altrimenti restituisce NULL. */

/***************** SI COMPLETI OPPORTUNAMENTE QUESTA FUNZIONE ********

.... find( ... , ... ){
   ...
}
*****************************************************/



int main(){
  element *head;
  int c, n;   

  head = NULL;
  while((c=getchar())!= 'f'){
    switch(c){

    case '+':  // + n:  aggiungi n (se non e' gia' nell'insieme)
	scanf("%d", &n);
	if(find(n,head) == NULL){// n non e' nella lista
	  head = insert(n, head);
	}
	break;

    case '?':  // ? n:  n e' nell'insieme?
	scanf("%d", &n);
	if(find(n,head)!= NULL)
	  printf("%d appartiene all'insieme\n", n);
	else
	  printf("%d non appartiene all'insieme\n", n);
	break;

    case 'p':   // stampa gli elementi dell'insieme
      printList(head);
      break;

    } // end switch
  } // end while
  return 0;
}