Orkut em c , estrutura dados
#include
#include
#define TAM_NOME 10
typedef struct ListaUm { int codigo; struct ListaUm *anterior; struct ListaUm *proximo;
} ListaUm;
typedef struct ListaDois{ int codigo; char nome[TAM_NOME]; struct ListaDois *anterior; struct ListaDois *proximo;
ListaUm *amigos;
} ListaDois;
ListaDois* l;
ListaDois * lista_cria() { return NULL;
}
void lista_insere(char dado[TAM_NOME]) {
ListaDois *novo= (ListaDois*) malloc (sizeof(ListaDois)); strcpy(novo->nome, dado); novo->proximo = l; novo->anterior = NULL; novo->amigos = NULL;
if(l!= NULL) { l->anterior = novo; novo->codigo = l->codigo+1;
} else novo->codigo = 0;
l = novo;
}
ListaDois* lista_busca_por_nome(char nome[TAM_NOME]) {
ListaDois *a; for(a=l; a!=NULL; a = a->proximo) { if(strcmp(a->nome, nome) == 0) return a;
}
return NULL;
}
ListaDois* lista_busca_por_codigo(ListaDois* l,int id){
ListaDois *aux = l; while(aux != NULL){
if(aux->codigo == id){ return aux;
}
aux = aux->proximo;
}
return NULL;
}
int saoAmigos(ListaDois *pessoa1, ListaDois *pessoa2){
ListaUm *amigo = pessoa1->amigos; while(amigo!= NULL){ if(amigo->codigo == pessoa2->codigo){ return 1;
}
amigo = amigo->proximo;
}
return 0;
}
void lista_exibe(ListaDois* l) {
ListaDois *aux;
printf("..............................\n"); printf("Cod\t Nome\t Amigos\n"); printf("..............................\n"); for(aux=l; aux!=NULL; aux = aux->proximo) { printf("\n"); printf("%d\t ", aux->codigo); printf("%s\t ", aux->nome); if(aux->amigos != NULL){ int contamigos = 1;
ListaUm * auxl1 = aux->amigos; for(;auxl1->proximo!= NULL;auxl1 = auxl1->proximo ) { contamigos = contamigos + 1;
}
printf("%d\t", contamigos);
}else { printf("Sem Amigos");
}
}
}
int cadastra(char nome[TAM_NOME]) {
ListaDois* n = lista_busca_por_nome(nome);
if (n) return -1; else lista_insere(nome); return 0;
}
int validaUsuario(ListaDois* usuario, int