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.
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
Eseguendo
./soluzione
avendo nel flusso di ingresso le righe:
il programma emette sul flusso di uscita:
#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;
}