MirandaWopps

exercListaEncadeadaAluno

Jun 15th, 2022 (edited)
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct aluno {
  6.     int mat;
  7.     char nome[21];
  8.     float nota;
  9.     char sexo;
  10.     struct aluno* prox;
  11. };
  12.  
  13. typedef struct aluno Aluno;
  14.  
  15. Aluno* lst_cria(void) {
  16.     Aluno* p;// = (Aluno*)malloc(sizeof(Aluno));
  17.     p = NULL;
  18.     return p;
  19. }
  20.  
  21. Aluno* lst_insere(Aluno * lst, int mat, char* nome, float nota, char g) {
  22.     Aluno* novo = (Aluno*)malloc(sizeof(Aluno));
  23.     if (novo != NULL) {
  24.         novo->mat = mat;
  25.         strcpy(novo->nome,nome);
  26.         novo->nota = nota;
  27.         novo->sexo = g;
  28.         novo->prox = lst;
  29.     }
  30.     return novo;
  31. }
  32.  
  33. void exibe_lista(Aluno* lst) {
  34.     Aluno* p;
  35.     for (p=lst; p != NULL; p=p->prox) {
  36.  
  37.         printf("Matricula: %d\tNome: %s\tNota: %.1f\tSexo: %c\n", p->mat, p->nome, p->nota, p->sexo);
  38.     }
  39. }
  40.  
  41. int conta_elementos_recursiva(Aluno *head) {
  42.     if (head == NULL) {
  43.         return 0;
  44.     }
  45.     return 1 + conta_elementos_recursiva(head->prox);
  46. }
  47.  
  48. int conta_sexo_recursiva(Aluno* lst, char g) {
  49.    
  50.     if (lst == NULL) {
  51.         return 0;
  52.     }
  53.  
  54.     if (lst->sexo == g) {
  55.         return 1 + conta_sexo_recursiva(lst->prox, g);
  56.     }
  57.     return conta_sexo_recursiva(lst->prox, g);
  58. }
  59.  
  60. void lst_libera(Aluno* lst) {
  61.     Aluno* p = lst, * t;
  62.     while (p != NULL) {
  63.         t = p->prox; // guarda referencia p prox aluno
  64.         free(p);  // libera a memoria apontada por p
  65.         p = t; // faz apontar para o proximo
  66.     }
  67. }
  68.  
  69. int main(void) {
  70.     Aluno* lst;
  71.     lst = lst_cria();
  72.     lst = lst_insere(lst, 33, "Caio", 3.3, 'M');
  73.     lst = lst_insere(lst, 11 , "Ana", 1.1,'F');
  74.     lst = lst_insere(lst, 44, "Edu", 4.4, 'M');
  75.     lst = lst_insere(lst, 66, "Luiz", 6.6, 'M');
  76.     lst = lst_insere(lst, 22, "Bia", 2.2, 'F');
  77.     lst = lst_insere(lst, 55, "Jane", 5.5, 'F');
  78.     /* inserri aqui a chamada para as suas funções e testes */
  79.    
  80.     printf("Existem  %d  elementos na lista\n", conta_elementos_recursiva(lst) );
  81.     printf("Tem %d mulheres na lista.\n", conta_sexo_recursiva(lst,'F') );
  82.     printf("Tem %d homens na lista.\n", conta_sexo_recursiva(lst, 'M'));
  83.     exibe_lista(lst);
  84.     lst_libera(lst);
  85.     return 0;
  86. }
Add Comment
Please, Sign In to add comment