Ok ora mi spiego meglio. Allora devo creare una lista dependents di stringhe indefinita nella sua lunghezza.
Poi per ogni coppia di stringhe A e B, se richiamo su di esse la funzione conosce(A,B) essa dovrebbe creare per A una lista conoscenti in cui inserisce B, e viceversa per B. Se poi richiamo conosce(A,C), nella lista conoscenti di A dovrò aggiungere C, e poi crearne una per C in cui inserire A. e così via.
Quello che devo ottenere date due chaimate conosce(A,B) e conosce(A,C)
nella lista dependents: A, B,C
nella lista conoscenti di A: B, C
nella lista conoscenti di B: A
nella lista conoscenti di C: A
# include<stdio.h>
# include<stdlib.h>
# include<time.h>
# include<string.h>
/*
STRUTTURA DATI CHE IMPLEMENTA I DIPENDENTI DELL' AZIENDA
*/
struct dependents {
char nome[40];
struct conoscenti *cono;
struct dependents *next;
};
struct conoscenti {
char nome[40];
struct conoscenti *next2;
};
/*
PUNTATORI ALLA LISTA CONTENTE
*/
struct dependents *dip;
/*
Funzione inserisci
Questa funzione inserisce nella lista dei dipendenti le stringhe in ordine alfabetico.
*/
struct dependents *inserisci(char *u, struct dependents *tmp){
struct dependents *p1, *p2, *t;
t=(struct dependents *)malloc(sizeof(struct dependents));
strcpy(t->nome, u);
if (tmp == NULL)
return(t);
p1=tmp;
p2=tmp;
while (p1 != NULL &&(strcmp(p1->nome, t->nome) !=0)) {
if (strcmp(p1->nome, u) > 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);
}
}
p1 = p1->next;
}
if (p1 == NULL){
while(p2->next != NULL)
p2=p2->next;
p2->next=t;
}
return(tmp);
}
/*
ADD Questa funzione inserisce nella lista dei conoscenti le stringhe in ordine alfabetico.*/
struct conoscenti *add(char *u, struct conoscenti *tmp){
struct conoscenti *p1, *p2, *t;
t=(struct conoscenti *)malloc(sizeof(struct conoscenti));
strcpy(t->nome, u);
if (tmp == NULL)
return(t);
p1=tmp;
p2=tmp;
while (p1 != NULL &&(strcmp(p1->nome, t->nome) !=0)) {
if (strcmp(p1->nome, u) > 0) {
if (p1 == tmp) {
t->next2=p1;
tmp=t;
return(tmp);
}
else {
while (p2->next2 != p1)
p2=p2->next2;
t->next2=p1;
p2->next2=t;
return(tmp);
}
}
p1 = p1->next2;
}
if (p1 == NULL){
while(p2->next2 != NULL)
p2=p2->next2;
p2->next2=t;
}
return(tmp);
}
/*
Funzione conosce deve inserire nella lista dei conoscenti di u, v.
e nella lista dei conoscenti di v, u.
e
Questa
*/
void *conosce(char *u, char *v){
struct dependents *t;
t=(struct dependents *)malloc(sizeof(struct dependents));
struct conoscenti *p;
p=(struct conoscenti *)malloc(sizeof(struct conoscenti));
strcpy(t->nome, u);
dip=inserisci(t->nome, dip);
if(strcmp(v, u) !=0){
strcpy(p->nome, v);
dip->cono = add(p->nome, dip->cono);
printf("%s ", t->cono->nome);
}
strcpy(t->nome, v);
dip=inserisci(t->nome, dip);
if(strcmp(v, u) !=0){
strcpy(p->nome, u);
t->cono = add(t->nome, t->cono);
printf("%s", t->cono->nome);
}
return;
}
/*
Procedura amici
Elenca tutti i conoscenti del dipendente nome in ordine alfabetico.
*/
void amici(char *u) {
struct dependents *tmp1;
struct friends *tmp2;
tmp1 = dip;
while (tmp1 != NULL &&(strcmp(tmp1->nome, u) !=0)) {
tmp1=tmp1->next;}
if (tmp1 == NULL) {
printf(">Il dipendente %s non esiste! \n", u);
return;
}
if (tmp1->cono->nome == NULL) {
printf(">Il dipendente %s non ha amici! \n", u);
return;
}
while (tmp1->cono != NULL) {
printf("%s\n", tmp1->cono->nome);
tmp1->cono->next2;
}
}
Il problema è che nn so come creare liste conoscenti per ogni stringa e come poterle poi richiamarle per stamparne il contenuto.
Grazie