# include<stdio.h>
# include<stdlib.h>
# include<time.h>
# include<string.h>
/*
STRUTTURA DATI CHE IMPLEMENTA I TRENI MERCI
*/
struct listaTreniMerci2 {
char nome[40];
char sequenza[40];
struct listaTreniMerci2 *next;
};
/*
PUNTATORI ALLA LISTA CONTENTE I TRENI
*/
struct listaTreniMerci2 *treniMerci2, *sequenze;
/*
Funzione inserisci
Questa funzione inserisce nella lista dei treni un nuovo treno, il cui nome e
la cui struttura sono definiti dalla stringa passata in input, restituendo il
puntatore alla lista dei treni.
Nel caso sia già presente un treno dello stesso nome di quello passato dalla
stringa di input non viene compiuta alcuna operazione.
*/
struct listaTreniMerci2 *inserisci(char *alfa, char *w, struct listaTreniMerci2 *tmp){
struct listaTreniMerci2 *p1, *p2, *t;
t=(struct listaTreniMerci2 *)malloc(sizeof(struct listaTreniMerci2));
strcpy(t->nome, alfa);
strcpy(t->sequenza, w);
t->next=NULL;
if (tmp == NULL)
return(t);
p1=tmp;
p2=tmp;
while (p1 != NULL && (strcmp(p1->nome, alfa) != 0)) {
if (strcmp(p1->sequenza, w) > 0) {
if (p1 == tmp) {
t->next=p1;
tmp=t;
return(tmp);
}
else {
while (p2->next != p1)
p2=p2->next;
t->next=p1;
p2->next=t;
return(tmp);
}
}
else
p1 = p1->next;
}
if (p1 == NULL){
while(p2->next != NULL)
p2=p2->next;
p2->next=t;
}
return(tmp);
}
/*
Procedura somiglianza
Stampa il grado di somiglianza dei treni di nome alfa e beta.
*/
/*void somiglianza(char * alfa, char *beta){
struct listaTreniMerci2 *tmp, *tmp2;
int result;
char alfa_tmp[40], beta_tmp[40];
tmp=treniMerci2;
tmp2=treniMerci2;
if((tmp != NULL) && (strcmp(tmp->nome,alfa) !=0)){
printf(">Non è presente il primo treno! \n");
return;
}
if((tmp2 != NULL) && (strcmp(tmp2->nome, beta)!=0)){
printf(">Non è presente il secondo treno! \n");
return;
}
alfa_tmp= tmp->sequenza;
beta_tmp= tmp2->sequenza;
result = strcmp (alfa_tmp, beta_tmp)
printf(">%d\n",result);
}
/*
Procedura stampasomiglianza
Stampa in ordine lessicografico secondo le sequenze di vagoni tutti i treni
che hanno grado di somiglianza n con alfa, come nome del treno.
*/
/*void stampasomiglianza(char *alfa, int n){
struct listaTreniMerci2 *tmp;
tmp = treniMerci2;
if (tmp == NULL) {
printf(">Non sono presenti treni! \n");
return;
}
if (n) {
printf(">%s", tmp->nome);
printf(" %s\n", tmp->sequenza);
tmp = tmp->next;
}
else {
printf("Nessun treno ha somiglianza %d", n);
printf("con %s\n", alfa);
}
}
void scegliFunzione(){
char alfa[40], beta[40], w[40];
int n;
char tastoScelto;
char c;
scanf("%c", &c);
while (c != 'f') {
switch(c){
case 'i': scanf("%s", &alfa);
scanf("%s", &w);
treniMerci2=inserisci(alfa, w, treniMerci2);
scanf("%c", &tastoScelto);
break;
case 'm': scanf("%s", &alfa);
scanf("%s", &beta);
somiglianza(alfa, beta);
scanf("%c", &tastoScelto);
break;
}
scanf("%c", &c);
}
return;
}
/*
Funzione main
La funzione principale del programma che inizializza i puntatori alle liste e
invoca la procedura scegliFunzione.
*/
int main(){
treniMerci2 = (struct listaTreniMerci2 *)malloc(sizeof(struct listaTreniMerci2));
treniMerci2 = NULL;
sequenze = (struct listaTreniMerci2 *)malloc(sizeof(struct listaTreniMerci2));
sequenze = NULL;
scegliFunzione();
return 0;
}