Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "lista.h"
- Lista* criar (void)
- {
- return NULL;
- }
- Lista* inserir (Lista* lista, int elem)
- {
- Lista* novo =(Lista*)malloc(sizeof(Lista));
- novo->info = elem;
- novo->next = lista;
- return novo;
- }
- void imprimir (Lista *lista)
- {
- Lista *v; /*var. para percorrer a lista*/
- for (v = lista; v != NULL; v = v->next)
- {
- printf("Valor: %d\n", v->info);
- }
- }
- Lista* remover (Lista* lista, int elem)
- {
- Lista* prv = NULL;
- Lista* v = lista;
- while((v != NULL && v->info != elem))
- {
- prv = v;
- v = v->next;
- }
- if (v == NULL)
- {
- return lista;
- }
- if (prv == NULL)
- {
- lista = v->next;
- }
- else
- {
- prv->next = v->next;
- }
- free(v);
- return lista;
- }
- void liberar (Lista *lista)
- {
- while (lista != NULL)
- {
- Lista *aux = lista->next; /*guarda ref. p/ prox.*/
- free (lista); /*libera a memoria apontada por v*/
- lista = aux; /*faz v apontar p/ o prox. elem.*/
- }
- }
- /* custom */
- /*
- 1) Implemente uma função que procura por um determinado
- elemento em uma lista encadeada. A função deve retornar
- 1 (verdadeiro) caso o elemento esteja na lista e 0 (falso)
- caso contrário. Essa função deve obedecer ao protótipo:
- */
- int procurar (Lista* lista, int elem)
- {
- Lista* p; /* novo ponteiro */
- for (p = lista; p != NULL; p = p->next)
- {
- if(p->info == elem)
- {
- return 1;
- }
- }
- return 0; /* não passou pelo if */
- }
- /*
- 2) Implemente uma função que conta o número de nós de uma
- lista encadeada. Essa função deve obedecer ao protótipo:
- */
- int conta_nos(Lista* lista)
- {
- Lista* p;
- int cont = 0; /* contador de nos */
- for (p = lista; p != NULL; p = p->next)
- {
- cont++;
- }
- return cont;
- }
- /*
- 3) Considerando listas de valores inteiros, implemente uma
- função que receba como parâmetro uma lista encadeada e um
- valor inteiro n e divida a lista em duas, de tal forma que
- a segunda lista comece no primeiro nó logo após a primeira
- ocorrência de n na lista original.
- Essa função deve obedecer ao protótipo:
- */
- Lista* separa(Lista* lista, int n)
- {
- Lista* nova = criar();
- Lista* p;
- int flag = 0;
- for(p = lista; p != NULL && !flag; p = p->next)
- {
- if(p->info == n)
- {
- nova = p->next;
- p->next = NULL;
- flag = 1;
- }
- }
- return nova;
- }
Advertisement
Add Comment
Please, Sign In to add comment