/* Autor: Carlos Henrique de Oliveira Monteiro André Contato: carloschoma@gmail.com Exercício: Prática 8 _ 1e2 Data: 2017-05-23 */ #include #include #include typedef struct aluno { char nome[20]; int idade; void *prox; //proximo registro para o encadeado }tAluno; //a) Adicionar um elemento ao final de uma lista. void adicionarAluno(tAluno **prim, tAluno **ult) { tAluno *novoAluno = (tAluno*) malloc(sizeof(tAluno)); if (novoAluno == NULL) { printf("Memória insuficiente! \n"); } else { printf("Cadastro de Alunos \n"); printf("Informe o nome: "); scanf("%s",(*novoAluno).nome); printf("Informe a Idade: "); scanf("%d",&(*novoAluno).idade); (*novoAluno).prox = NULL; // aterramento do novoAluno if (*prim == NULL) // se for o primeiro { *prim = novoAluno; *ult = novoAluno; } else { (**ult).prox = novoAluno; //passagem de referencia da memória *ult = novoAluno; } } } //b) Imprimir a lista na tela em forma de tabela. void imprimirLista(tAluno *prim) { int i=1; tAluno *tmpAluno = (tAluno*)malloc(sizeof(tAluno)); // usado para imprimir tmpAluno = prim; // inicia a lista auxiliar printf("Posição\tNome\tIdade\n"); while (tmpAluno != NULL)//enquanto ele não for aterrado (tem próximo) { printf("%d\t%s\t%d\n", i, tmpAluno->nome,tmpAluno->idade); //apenas leitura i++; tmpAluno = (*tmpAluno).prox; // joga tmpAluno para frente } } //c) Remover um elemento pelo nome. void removerPeloNome(tAluno **lista) { } //d) Ordenar a lista em ordem alfabética. void ordernarLista(tAluno **l) { if(*l == NULL) { if( (*l)->prox == NULL) { printf("Lista com 1 elemento"); } printf ("Lista Vazia"); return; //se for nulo(vazio), ou apenas 1 elemento } tAluno *tmpAluno = *l, *t, aux; while(tmpAluno != NULL) { t = tmpAluno->prox; while(t != NULL) { if(strcmp(tmpAluno->nome, t->nome) > 0) { //se vir depois strcpy(aux.nome, tmpAluno->nome); strcpy(tmpAluno->nome, t->nome); strcpy(t->nome, aux.nome); aux.idade = tmpAluno->idade; tmpAluno->idade = t->idade; t->idade = aux.idade; } t = t->prox; } tmpAluno = tmpAluno->prox; } printf("Ordenado..."); } //e) Acrescentar de forma ordenada. void inserirListaOrdem(tAluno **inicio) { } /*programa principal*/ int main () { /*variaveis do programa principal*/ tAluno *primeiro,*ultimo; char opcao; primeiro = NULL; ultimo = NULL; /*menu*/ do { printf("== MENU == \n"); printf("a) Adicionar um elemento ao final de uma lista.\n"); printf("b) Imprimir a lista na tela em forma de tabela.\n"); printf("c) Remover um elemento pelo nome.\n"); printf("d) Ordenar a lista em ordem alfabética.\n"); printf("e) Acrescentar de forma ordenada.\n"); printf("f) Sair. \n"); printf("Digite uma das opcoes: "); scanf(" %c",&opcao); switch(opcao) { case 'a': /*adicionar aluno ao final da lista*/ adicionarAluno(&primeiro,&ultimo); break; case 'b': /*imprimir a lista na forma de tabela*/ imprimirLista(primeiro); break; case 'c': /*remover elemento pelo nome*/ removerPeloNome(&primeiro); break; case 'd': /*ordenar a lista em ordem alfabetica*/ ordernarLista(&primeiro); break; case 'e': /*adicionar aluno de forma ordenada*/ inserirListaOrdem(&primeiro); break; case 'f':/*sair*/ printf("Saindo...\n\n"); break; default: printf("opcao inválida! \n"); break; } }while(opcao != 'f'); return 0; }