MirandaWopps

listaEncadeadaRev

Jun 24th, 2022 (edited)
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. /****************** TIPO PARA A QUESTAO  ********************/
  6. /* Tipo No: representa um no´ da lista simplesmente encadeada nos itens da questao 2 */
  7. typedef struct no No;
  8. struct no
  9. {
  10.     int  codigo;      /* pode haver codigos repetidos */
  11.     int  quantidade;
  12.     No* prox;
  13. };
  14.  
  15. /****************** RESPOSTAS ********************/
  16. /*   1 - Funcao exibeLista     */
  17. void exibeLista(No* lst) {
  18.     No* p;
  19.     for (p = lst; p != NULL; p = p->prox) {
  20.         printf("{%d, %d}\n", p->codigo, p->quantidade);
  21.     }
  22. }
  23.  
  24. /*   2 - Funcao RECURSIVA buscaPosicao    */
  25. int buscaPosicao(No* lst, int pos) {
  26.     int i = 0;
  27.     i++;
  28.     if (lst ==NULL || pos == i) {
  29.         return -1;
  30.     }
  31.  
  32.     if (pos != i) {        
  33.         buscaPosicao(lst->prox, pos);
  34.     }
  35.     else {
  36.         return lst->codigo;
  37.     }
  38. }
  39.  
  40. /*   3 - Funcao eliminaCodigo    */
  41. No* eliminaCodigo(No* lst, int cod, int* nEliminados, int* totalQtdEliminada) {
  42.     No* p = lst, * ant, * pos;
  43.     int eliminados = 0, qtdEliminada=0;
  44.     while (p != NULL) {
  45.         ant = p;
  46.         if (p->codigo == cod ) {
  47.             eliminados +=  1;
  48.             qtdEliminada += p->quantidade;
  49.             free(p);
  50.         }
  51.         pos = ant->prox;
  52.     }
  53.     nEliminados = eliminados;
  54.     totalQtdEliminada = qtdEliminada;
  55.  
  56.     return p;
  57. }
  58.  
  59. /* FUNCAO DADA:
  60.    constroiLista: constroi e retorna uma lista encadeada para ser usada nos testes da Q2 */
  61. No* constroiLista(void);  /* funcao dada que constroi a lista */
  62. void libera(No* lst);
  63.  
  64.  
  65. /* Teste suas funcoes nos espaços sinalizados na main incluindo variaveis e codigos
  66.    necessarios, fazendo as chamadas e exibindo as respostas    */
  67.  
  68. int main(void)
  69. {
  70.     No* lst = constroiLista(); /* MONTAGEM DA LISTA PARA A QUESTAO 2 */
  71.    
  72. /* INSIRA aqui eventuais variáveis que você julgar necessárias: */
  73.     int codPos, nEliminados=0, totalQtdEliminada=0;
  74.     /* INSIRA aqui os seus testes das funcoes: */
  75.     /* Q1 */
  76.     exibeLista(lst);
  77.  
  78.     /* Q2 */
  79.     codPos = buscaPosicao(lst,  6);
  80.     printf("Codigo da pos 6: %d\n", codPos );
  81.  
  82.     /* Q3 */
  83.     lst = eliminaCodigo(lst, 444, nEliminados, totalQtdEliminada);
  84.     printf("Eliminados: %d || Qtd Eliminada: %d\n", nEliminados, totalQtdEliminada);
  85.     exibeLista(lst);
  86.  
  87.     libera(lst);
  88.     return 0;
  89. }
  90.  
  91. No* insIni(No* lst, int c, int q)
  92. {
  93.     No* novo = (No*)malloc(sizeof(No));
  94.     novo->codigo = c; novo->quantidade = q; novo->prox = lst;
  95.     return novo;
  96. }
  97.  
  98. No* constroiLista(void)
  99. {
  100.     No* prim = NULL;
  101.     int cod[10] = { 222,444,999,222,555,444,444,222,888,444 };
  102.     int qt[10] = { 30 ,10, 25 , 15, 10, 18, 13, 21, 34, 13 };
  103.     int i;
  104.     for (i = 0; i < 10; i++)
  105.         prim = insIni(prim, cod[i], qt[i]);
  106.     return prim;
  107. }
  108.  
  109. void libera(No* lst) {
  110.     No* p = lst, * t;
  111.     while (p != NULL) {
  112.         t = p->prox;
  113.         free(p);
  114.         p = t;
  115.     }
  116.     printf("\nMemoria liberada !");
  117. }
  118.  
Add Comment
Please, Sign In to add comment