#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct dadoNo {
char nome[20];
char endereco[20]; //
int idade; // Estes parâmetros são para funções exigidas pelo professor.
int indice; // As outras funções estão funcionando perfeitamente e só interessam à estes parâmetros
} DadoNo;
typedef struct no{
struct no* prox;
struct no* ant;
int pos;
DadoNo dado;
} No;
typedef struct list {
int size;
No* head;
} Lista;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
int listVazia (Lista* list){
return(list->size == 0);
}
Lista* criarlist (){
Lista
* list
= (Lista
*)malloc(sizeof(Lista
)); list->size = 0;
list->head = NULL;
return list;
}
No* Busca ( Lista *list, char *nome){
No* ptr = list->head;
while (ptr != NULL){
if (strcmp( nome
, ptr
->dado.
nome) == 0){
return ptr;
}
ptr = ptr->prox;
}
return NULL;
}
int Soma (char nome[20]){
int soma = 0, i = 0;
for (i
; i
< (int)strlen(nome
) ; i
++ ){
soma += (nome[i]-96);
}
return soma;
}
void Insere (Lista* list){
int i, p = (list->size);
DadoNo dado;
No
* n
= (No
*) malloc(sizeof(No
)); n->ant = list->head;
if (Busca(list, dado.nome) == NULL){
scanf("%s", dado.
endereco); scanf("%d", &dado.
idade);
dado.indice = Soma(dado.nome)%11;
n->dado = dado;
n->prox = list->head;
list->head = n;
list->size++;
n->pos = p;
}
else{
printf("ESTE NOME JA EXISTE !\n"); }
}
void OrdenaNome(Lista *list){
int j = (list->size) ;
No
* aux
= (No
*)malloc(sizeof(No
)); No
* ptr
= (No
*)malloc(sizeof(No
)); No
* aux2
= (No
*)malloc(sizeof(No
));
ptr = (list->head);
while (ptr != NULL){
aux = ptr->prox;
while( aux != NULL){
if (ptr->dado.nome[0] > aux->dado.nome[0]){
aux2->dado = ptr->dado;
ptr->dado = aux->dado;
aux->dado = aux2->dado;
}
aux = aux->prox;
}
ptr = ptr->prox;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void InsereList(Lista* list, int Num_pessoas){
//printf("i \n");
int i;
for (i = 0; i < Num_pessoas ; i++){
Insere(list);
}
}
void RemoverDados ( Lista *list){
//printf("r \n");
char nome[20];
int i = 0;
printf("DIGITE O NOME DA PESSOA QUE DESEJA REMOVER : \n");
No* atual = Busca(list, nome);
No
* aux
= (No
*)malloc(sizeof(No
)); No
* aux1
= (No
*)malloc(sizeof(No
));
if (!listVazia(list)){
if (atual != NULL){
if( atual == list->head){ // Não tem funcionado para nó de pos = 0
list->head = atual->ant;
}
else { // não remove o determinado nó
atual->prox->ant = atual->ant;
atual->ant->prox = atual->prox;
}
list->size--;
}
else{
printf("ESTE NOME NAO PERTENCE A LISTA .\n"); }
}
}
void ConsultarDados (Lista *list){
//printf("c \n");
char nome[20];
printf("DIGITE O NOME A SER BUSCADO :\n");
No* atual = Busca(list, nome);
if( atual != NULL){
printf("%s \n", atual
->dado.
nome); printf("%d \n", atual
->dado.
idade); printf("%s \n", atual
->dado.
endereco); }
else{
printf("ESTE NOME NAO PERTENCE A LISTA .\n"); }
}
void ListarPorIndice (Lista *list, int pos){
//printf("T \n");
if ( pos > 0){
int j, i ;
No
* aux
= (No
*)malloc(sizeof(No
)); No
* ptr
= (No
*)malloc(sizeof(No
)); No
* aux2
= (No
*)malloc(sizeof(No
));
ptr = (list->head);
while (ptr != NULL){
aux = ptr->prox;
while( aux != NULL){
if (ptr->dado.indice > aux->dado.indice){
aux2->dado = ptr->dado;
ptr->dado = aux->dado;
aux->dado = aux2->dado;
}
aux = aux->prox;
}
ptr = ptr->prox;
}
ptr = list->head;
for (i = 0; i < pos; i++){
printf("%s \n", ptr
->dado.
nome); ptr = ptr->prox;
}
}
}
void ListarNomesCrescente (Lista *list){
//printf("o \n");
if (!listVazia(list)){
OrdenaNome(list);
No* ptr = list->head;
while(ptr != NULL){
printf("%s \n", ptr
->dado.
nome );
ptr = ptr->prox;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////
int main (){
Lista* l = criarlist();
InsereList(l,3);
RemoverDados(l);
//ListarPorIndice(l,3);
//ConsultarDados(l);
//ListarNomesCrescente(l);
No* ptr = l->head;
while( ptr != NULL){ // Somente para percorrer a lista e imprimir o que resta nela.
printf("NOME : %s \n", ptr
->dado.
nome); //printf("IDADE : %d \n", ptr->dado.idade);
//printf("ENDERECO : %s \n", ptr->dado.endereco);
//printf("POSICAO : %d \n", ptr->pos);
//printf("INDICE : %d\n", ptr->dado.indice);
ptr = ptr->prox;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3QgZGFkb05vIHsKCgljaGFyIG5vbWVbMjBdOwkJCQkKCWNoYXIgZW5kZXJlY29bMjBdOwkvLwkJCglpbnQgaWRhZGU7CQkJLy8gRXN0ZXMgcGFyw6JtZXRyb3Mgc8OjbyBwYXJhIGZ1bsOnw7VlcyBleGlnaWRhcyBwZWxvIHByb2Zlc3Nvci4JCQogIAlpbnQgaW5kaWNlOwkJCS8vIEFzIG91dHJhcyBmdW7Dp8O1ZXMgZXN0w6NvIGZ1bmNpb25hbmRvIHBlcmZlaXRhbWVudGUgZSBzw7MgaW50ZXJlc3NhbSDDoCBlc3RlcyBwYXLDom1ldHJvcwoKfSBEYWRvTm87Cgp0eXBlZGVmIHN0cnVjdCBub3sKCglzdHJ1Y3Qgbm8qIHByb3g7CglzdHJ1Y3Qgbm8qIGFudDsKICAJaW50IHBvczsKCURhZG9ObyBkYWRvOwoKfSBObzsKCnR5cGVkZWYgc3RydWN0IGxpc3QgewoKCWludCBzaXplOwoJTm8qIGhlYWQ7Cgp9IExpc3RhOwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgppbnQgbGlzdFZhemlhIChMaXN0YSogbGlzdCl7CQoKCXJldHVybihsaXN0LT5zaXplID09IDApOwp9CgpMaXN0YSogY3JpYXJsaXN0ICgpewkKCglMaXN0YSogbGlzdCA9IChMaXN0YSopbWFsbG9jKHNpemVvZihMaXN0YSkpOwoJbGlzdC0+c2l6ZSA9IDA7CglsaXN0LT5oZWFkID0gTlVMTDsKCXJldHVybiBsaXN0Owp9CgpObyogQnVzY2EgKCBMaXN0YSAqbGlzdCwgY2hhciAqbm9tZSl7CgogICAgTm8qIHB0ciA9IGxpc3QtPmhlYWQ7CgogICAgd2hpbGUgKHB0ciAhPSBOVUxMKXsKICAgICAgICAKICAgICAgICBpZiAoc3RyY21wKCBub21lLCBwdHItPmRhZG8ubm9tZSkgPT0gMCl7IAoKICAgICAgICAgICAgcmV0dXJuIHB0cjsKICAgICAgICB9CgogICAgICAgIHB0ciA9IHB0ci0+cHJveDsKICAgIH0KCiAgICByZXR1cm4gTlVMTDsKfQoKaW50IFNvbWEgKGNoYXIgbm9tZVsyMF0pewkKCglpbnQgc29tYSA9IDAsIGkgPSAwOwoKICAJZm9yIChpIDsgaSA8IChpbnQpc3RybGVuKG5vbWUpIDsgaSsrICl7ICAKCiAgICAJc29tYSArPSAobm9tZVtpXS05Nik7CiAgCX0KCiAgCXJldHVybiBzb21hOwp9Cgp2b2lkIEluc2VyZSAoTGlzdGEqIGxpc3QpewkKCglpbnQgaSwgcCA9IChsaXN0LT5zaXplKTsgCglEYWRvTm8gZGFkbzsKCU5vKiBuID0gKE5vKikgbWFsbG9jKHNpemVvZihObykpOwoJbi0+YW50ID0gbGlzdC0+aGVhZDsKCglzY2FuZigiJXMiLCBkYWRvLm5vbWUpOwoKCWlmIChCdXNjYShsaXN0LCBkYWRvLm5vbWUpID09IE5VTEwpewoKCQlzY2FuZigiJXMiLCBkYWRvLmVuZGVyZWNvKTsKCQlzY2FuZigiJWQiLCAmZGFkby5pZGFkZSk7CgoJCWRhZG8uaW5kaWNlID0gU29tYShkYWRvLm5vbWUpJTExOwoKCQluLT5kYWRvID0gZGFkbzsKCQluLT5wcm94ID0gbGlzdC0+aGVhZDsKCQlsaXN0LT5oZWFkID0gbjsKCQlsaXN0LT5zaXplKys7CgoJCW4tPnBvcyA9IHA7IAkKCX0KCgllbHNlewoKCQlwcmludGYoIkVTVEUgTk9NRSBKQSBFWElTVEUgIVxuIik7Cgl9Cn0KCnZvaWQgT3JkZW5hTm9tZShMaXN0YSAqbGlzdCl7CQkJCQoKICAJaW50IGogID0gKGxpc3QtPnNpemUpIDsKCglObyogYXV4ID0gKE5vKiltYWxsb2Moc2l6ZW9mKE5vKSk7CglObyogcHRyID0gKE5vKiltYWxsb2Moc2l6ZW9mKE5vKSk7CglObyogYXV4MiA9IChObyopbWFsbG9jKHNpemVvZihObykpOwoKCXB0ciA9IChsaXN0LT5oZWFkKTsKCgl3aGlsZSAocHRyICE9IE5VTEwpewoKCQlhdXggPSBwdHItPnByb3g7CgoJCXdoaWxlKCBhdXggIT0gTlVMTCl7CgoJCQlpZiAocHRyLT5kYWRvLm5vbWVbMF0gPiBhdXgtPmRhZG8ubm9tZVswXSl7CgoJCQkJYXV4Mi0+ZGFkbyA9IHB0ci0+ZGFkbzsKCQkJCXB0ci0+ZGFkbyA9IGF1eC0+ZGFkbzsKCQkJCWF1eC0+ZGFkbyA9IGF1eDItPmRhZG87CgkJCX0KCgkJYXV4ID0gYXV4LT5wcm94OwoKCQl9CgoJcHRyID0gcHRyLT5wcm94OwoKCX0KfQoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKdm9pZCBJbnNlcmVMaXN0KExpc3RhKiBsaXN0LCBpbnQgTnVtX3Blc3NvYXMpewkJCgoJLy9wcmludGYoImkgXG4iKTsKCglpbnQgaTsKCglmb3IgKGkgPSAwOyBpIDwgTnVtX3Blc3NvYXMgOyBpKyspewoKCQlJbnNlcmUobGlzdCk7Cgl9Cn0KCnZvaWQgUmVtb3ZlckRhZG9zICggTGlzdGEgKmxpc3QpewkJCQkJCQoKCS8vcHJpbnRmKCJyIFxuIik7CgljaGFyIG5vbWVbMjBdOwoJaW50IGkgPSAwOwoJcHJpbnRmKCJESUdJVEUgTyBOT01FIERBIFBFU1NPQSBRVUUgREVTRUpBIFJFTU9WRVIgOiBcbiIpOwoJc2NhbmYoIiVzIiwgbm9tZSk7CgoJTm8qIGF0dWFsID0gQnVzY2EobGlzdCwgbm9tZSk7CglObyogYXV4ID0gKE5vKiltYWxsb2Moc2l6ZW9mKE5vKSk7CglObyogYXV4MSA9IChObyopbWFsbG9jKHNpemVvZihObykpOwoKCWlmICghbGlzdFZhemlhKGxpc3QpKXsKCgkJaWYgKGF0dWFsICE9IE5VTEwpewoKCQkJaWYoIGF0dWFsID09IGxpc3QtPmhlYWQpewkvLyBOw6NvIHRlbSBmdW5jaW9uYWRvIHBhcmEgbsOzIGRlIHBvcyA9IDAKCiAgICAgICAgICAgIAlsaXN0LT5oZWFkID0gYXR1YWwtPmFudDsKICAgICAgICAJfQoKICAgICAgICAJZWxzZSB7CS8vIG7Do28gcmVtb3ZlIG8gZGV0ZXJtaW5hZG8gbsOzCgogICAgICAgICAgICAJYXR1YWwtPnByb3gtPmFudCA9IGF0dWFsLT5hbnQ7CiAgICAgICAgICAgIAlhdHVhbC0+YW50LT5wcm94ID0gYXR1YWwtPnByb3g7CiAgICAgICAgCX0KICAgICAgICAKICAgICAgICAJZnJlZShhdHVhbCk7CiAgICAgICAgCWxpc3QtPnNpemUtLTsKICAgICAgICB9CgoJCWVsc2V7CgoJCQlwcmludGYoIkVTVEUgTk9NRSBOQU8gUEVSVEVOQ0UgQSBMSVNUQSAuXG4iKTsKCQkJcHJpbnRmKCJcbiIpOwoJCX0KCX0KfQoKCnZvaWQgQ29uc3VsdGFyRGFkb3MgKExpc3RhICpsaXN0KXsgICAKCgkvL3ByaW50ZigiYyBcbiIpOwoJY2hhciBub21lWzIwXTsKCglwcmludGYoIkRJR0lURSBPIE5PTUUgQSBTRVIgQlVTQ0FETyA6XG4iKTsKCXByaW50ZigiXG4iKTsKCglzY2FuZigiJXMiLCBub21lKTsKCglObyogYXR1YWwgPSBCdXNjYShsaXN0LCBub21lKTsKCglpZiggYXR1YWwgIT0gTlVMTCl7ICAgICAgIAoKCSAgcHJpbnRmKCIlcyBcbiIsIGF0dWFsLT5kYWRvLm5vbWUpOwoJICBwcmludGYoIiVkIFxuIiwgYXR1YWwtPmRhZG8uaWRhZGUpOyAgICAgICAgIAoJICBwcmludGYoIiVzIFxuIiwgYXR1YWwtPmRhZG8uZW5kZXJlY28pOyAKCX0KCgllbHNlewoKCQlwcmludGYoIkVTVEUgTk9NRSBOQU8gUEVSVEVOQ0UgQSBMSVNUQSAuXG4iKTsKCQlwcmludGYoIlxuIik7Cgl9Cn0KCnZvaWQgTGlzdGFyUG9ySW5kaWNlIChMaXN0YSAqbGlzdCwgaW50IHBvcyl7CgoJLy9wcmludGYoIlQgXG4iKTsKCglpZiAoIHBvcyA+IDApewoKCSAgICBpbnQgaiwgaSA7CgoJICAgIE5vKiBhdXggPSAoTm8qKW1hbGxvYyhzaXplb2YoTm8pKTsKCSAgICBObyogcHRyID0gKE5vKiltYWxsb2Moc2l6ZW9mKE5vKSk7CgkgICAgTm8qIGF1eDIgPSAoTm8qKW1hbGxvYyhzaXplb2YoTm8pKTsKCgkgICAgcHRyID0gKGxpc3QtPmhlYWQpOwoKCQl3aGlsZSAocHRyICE9IE5VTEwpewoKCQkJYXV4ID0gcHRyLT5wcm94OwoKCQkJd2hpbGUoIGF1eCAhPSBOVUxMKXsKCgkJCQlpZiAocHRyLT5kYWRvLmluZGljZSA+IGF1eC0+ZGFkby5pbmRpY2UpewoKCQkJCQlhdXgyLT5kYWRvID0gcHRyLT5kYWRvOwoJCQkJCXB0ci0+ZGFkbyA9IGF1eC0+ZGFkbzsKCQkJCQlhdXgtPmRhZG8gPSBhdXgyLT5kYWRvOwoJCQkJfQoKCQkJCWF1eCA9IGF1eC0+cHJveDsKCQkJfQoKCQkJcHRyID0gcHRyLT5wcm94OwoJCX0KCgkJcHRyID0gbGlzdC0+aGVhZDsKCgkJZm9yIChpID0gMDsgaSA8IHBvczsgaSsrKXsKCgkJCXByaW50ZigiJXMgXG4iLCBwdHItPmRhZG8ubm9tZSk7CgkJCXB0ciA9IHB0ci0+cHJveDsKCQl9Cgl9Cn0KCnZvaWQgTGlzdGFyTm9tZXNDcmVzY2VudGUgKExpc3RhICpsaXN0KXsJCgogIC8vcHJpbnRmKCJvIFxuIik7CQoKCWlmICghbGlzdFZhemlhKGxpc3QpKXsKCgkJT3JkZW5hTm9tZShsaXN0KTsKCgkJTm8qIHB0ciA9IGxpc3QtPmhlYWQ7CgoJCXdoaWxlKHB0ciAhPSBOVUxMKXsKCgkJCXByaW50ZigiJXMgXG4iLCBwdHItPmRhZG8ubm9tZSApOwoKCQkJcHRyID0gcHRyLT5wcm94OwoJCX0KCX0KfQoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmludCBtYWluICgpewoKCUxpc3RhKiBsID0gY3JpYXJsaXN0KCk7CgoJSW5zZXJlTGlzdChsLDMpOwoJcHJpbnRmKCJcbiIpOwoJUmVtb3ZlckRhZG9zKGwpOwoJCgkvL0xpc3RhclBvckluZGljZShsLDMpOwoJLy9Db25zdWx0YXJEYWRvcyhsKTsKCS8vTGlzdGFyTm9tZXNDcmVzY2VudGUobCk7CgoJTm8qIHB0ciA9IGwtPmhlYWQ7CgoJd2hpbGUoIHB0ciAhPSBOVUxMKXsJLy8gU29tZW50ZSBwYXJhIHBlcmNvcnJlciBhIGxpc3RhIGUgaW1wcmltaXIgbyBxdWUgcmVzdGEgbmVsYS4KICAgICAgCgkgICAgcHJpbnRmKCJOT01FIDogJXMgIFxuIiwgcHRyLT5kYWRvLm5vbWUpOwkKCSAgICAvL3ByaW50ZigiSURBREUgOiAlZCBcbiIsIHB0ci0+ZGFkby5pZGFkZSk7ICAgICAgICAgCgkgICAgLy9wcmludGYoIkVOREVSRUNPIDogJXMgXG4iLCBwdHItPmRhZG8uZW5kZXJlY28pOwoJICAgIC8vcHJpbnRmKCJQT1NJQ0FPIDogJWQgXG4iLCBwdHItPnBvcyk7CgkgICAgLy9wcmludGYoIklORElDRSA6ICVkXG4iLCBwdHItPmRhZG8uaW5kaWNlKTsKCgkgICAgcHRyID0gcHRyLT5wcm94OwoJICAgIHByaW50ZigiXG4iKTsKCX0KCglyZXR1cm4gMDsKfQ==