Bananaware

alg2 lista

Oct 2nd, 2014
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.51 KB | None | 0 0
  1. #include "lista.h"
  2.  
  3. Lista* criar (void)
  4. {
  5.     return NULL;
  6. }
  7.  
  8. Lista* inserir (Lista* lista, int elem)
  9. {
  10.     Lista* novo =(Lista*)malloc(sizeof(Lista));
  11.     novo->info = elem;
  12.     novo->next = lista;
  13.     return novo;
  14. }
  15.  
  16. void imprimir (Lista *lista)
  17. {
  18.     Lista *v; /*var. para percorrer a lista*/
  19.     for (v = lista; v != NULL; v = v->next)
  20.     {
  21.         printf("Valor: %d\n", v->info);
  22.     }
  23. }
  24.  
  25. Lista* remover (Lista* lista, int elem)
  26. {
  27.     Lista* prv = NULL;
  28.     Lista* v = lista;
  29.     while((v != NULL && v->info != elem))
  30.     {
  31.         prv = v;
  32.         v = v->next;
  33.     }
  34.  
  35.     if (v == NULL)
  36.     {
  37.         return lista;
  38.     }
  39.     if (prv == NULL)
  40.     {
  41.         lista = v->next;
  42.     }
  43.     else
  44.     {
  45.         prv->next = v->next;
  46.     }
  47.  
  48.     free(v);
  49.  
  50.     return lista;
  51. }
  52.  
  53. void liberar (Lista *lista)
  54. {
  55.     while (lista != NULL)
  56.     {
  57.         Lista *aux = lista->next; /*guarda ref. p/ prox.*/
  58.         free (lista); /*libera a memoria apontada por v*/
  59.         lista = aux; /*faz v apontar p/ o prox. elem.*/
  60.     }
  61. }
  62.  
  63. /* custom */
  64.  
  65. /*
  66. 1) Implemente uma função que procura por um determinado
  67. elemento em uma lista encadeada. A função deve retornar
  68. 1 (verdadeiro) caso o elemento esteja na lista e 0 (falso)
  69. caso contrário. Essa função deve obedecer ao protótipo:
  70. */
  71.  
  72. int procurar (Lista* lista, int elem)
  73. {
  74.     Lista* p; /* novo ponteiro */
  75.     for (p = lista; p != NULL; p = p->next)
  76.     {
  77.         if(p->info == elem)
  78.         {
  79.             return 1;
  80.         }
  81.     }
  82.  
  83.     return 0; /* não passou pelo if */
  84. }
  85.  
  86. /*
  87. 2) Implemente uma função que conta o número de nós de uma
  88. lista encadeada. Essa função deve obedecer ao protótipo:
  89. */
  90.  
  91. int conta_nos(Lista* lista)
  92. {
  93.     Lista* p;
  94.     int cont = 0; /* contador de nos */
  95.     for (p = lista; p != NULL; p = p->next)
  96.     {
  97.         cont++;
  98.     }
  99.     return cont;
  100. }
  101.  
  102. /*
  103. 3) Considerando listas de valores inteiros, implemente uma
  104. função que receba como parâmetro uma lista encadeada e um
  105. valor inteiro n e divida a lista em duas, de tal forma que
  106. a segunda lista comece no primeiro nó logo após a primeira
  107. ocorrência de n na lista original.
  108. Essa função deve obedecer ao protótipo:
  109. */
  110.  
  111. Lista* separa(Lista* lista, int n)
  112. {
  113.     Lista* nova = criar();
  114.     Lista* p;
  115.     int flag = 0;
  116.     for(p = lista; p != NULL && !flag; p = p->next)
  117.     {
  118.         if(p->info == n)
  119.         {
  120.             nova = p->next;
  121.             p->next = NULL;
  122.             flag = 1;
  123.         }
  124.     }
  125.  
  126.     return nova;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment