lista.h File Reference

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <assert.h>

Include dependency graph for lista.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  node

Functions

unsigned long int size (node *l)
 Retorna o tamanho de uma lista duplamente ligada.
nodesearch (node *l, int num)
 Busca um valor em uma lista.
void add_node (node *l, int num)
 Adiciona um nó no final da lista.
noderem_node (node *l, int num)
 Remove um nó da lista.
void add_after (node *n, int num)
 Adiciona um novo nó após um nó.
void delete_list (node *l)
 Remove uma lista da memória.


Function Documentation

void add_after ( node n,
int  num 
)

Adiciona um novo nó após um nó.

Parameters:
n Um ponteiro para o nó anterior ao que vamos adicionar.
num O valor a ser adicionado.

Definition at line 87 of file lista.c.

References node::next.

Referenced by main().

00087                                 {
00088   assert(n!=NULL);
00089   node *new = NULL;
00090   if((new=(node*)malloc(sizeof(node)))==NULL){
00091     perror("malloc");
00092     exit(EXIT_FAILURE);
00093   }
00094   memset(new,'\0',sizeof(node));
00095   new->num  = num;
00096   new->prev = n;
00097   new->next = n->next;
00098   n->next   = new;
00099 }

void add_node ( node l,
int  num 
)

Adiciona um nó no final da lista.

Parameters:
l Um ponteiro para uma lista j inicializada.
num O valor a ser adicionado no final da lista.

Definition at line 36 of file lista.c.

References node::next, and node::prev.

Referenced by main().

00036                                {
00037   assert(l!=NULL);
00038   node *new = NULL;
00039   node *start = l;
00040   if((new=(node*)malloc(sizeof(node)))==NULL){
00041     perror("malloc");
00042     exit(EXIT_FAILURE);
00043   }
00044   memset(new,'\0',sizeof(node));
00045   new->num = num;
00046   while(l->next!=NULL)
00047     l=l->next;
00048 
00049   l->next   = new;
00050   new->prev = l;
00051   l=start;
00052 }

void delete_list ( node l  ) 

Remove uma lista da memória.

Parameters:
l Um ponteiro para o inío da lista a ser removida.

Definition at line 101 of file lista.c.

References node::next.

Referenced by main().

00101                          {
00102   node *tmp = NULL;
00103   while(l->next!=NULL){
00104     tmp=l;
00105     l=l->next;
00106     free(tmp);
00107     tmp=NULL;
00108   }
00109   free(l);
00110   l=NULL;
00111 }

node* rem_node ( node l,
int  num 
)

Remove um nó da lista.

Parameters:
l Um ponteiro para a lista.
num O valor que possui o n a ser removido.
Returns:
Um ponteiro para uma nova lista caso o nó a ser removido seja o primeiro nó, ou l caso contrário.
Attention:
Poderiamos também aceitar como parâmetro um ponteiro para um nó retornado com search.

Definition at line 63 of file lista.c.

References node::next, node::prev, and search().

Referenced by main().

00063                                 {
00064   assert(l!=NULL);
00065   node *rem = search(l,num);
00066   node *tmp = NULL;
00067   if(rem==l){
00068     tmp = l;
00069     l=l->next;
00070     l->prev = NULL;
00071     free(tmp);
00072     return l;
00073   }
00074   if(rem!=NULL){
00075     tmp=rem->prev;
00076     if(rem->next!=NULL){
00077       tmp->next=rem->next;
00078       rem->next->prev = tmp;
00079     }
00080     else
00081       tmp->next=NULL;
00082     free(rem);
00083   }
00084   return l;
00085 }

node* search ( node l,
int  num 
)

Busca um valor em uma lista.

Parameters:
l Um ponteiro para a lista.
num O valor a ser buscado.
Returns:
um ponteiro para o nó que possui o valor encontrado, ou NULL caso não tenha sido encontrado.

Definition at line 54 of file lista.c.

References node::next, and node::num.

Referenced by main(), and rem_node().

00054                               {
00055   node *ret = NULL;
00056   while(l!=NULL){
00057     if(l->num==num) ret=l;
00058     l=l->next;
00059   }
00060   return ret;
00061 }

unsigned long int size ( node l  ) 

Retorna o tamanho de uma lista duplamente ligada.

Parameters:
l Um ponteiro para a lista.
Returns:
Um inteiro com o tamanho da lista.

Definition at line 22 of file lista.c.

References node::next, node::prev, and size().

Referenced by main(), and size().

00022                                {
00023   node *start = l;
00024   unsigned long int size = 0;
00025   if(l==NULL) return 0;
00026   while(l->prev!=NULL) l=l->prev;
00027   while(l->next!=NULL){
00028     l=l->next;
00029     size++;
00030   }
00031   l=start;
00032   size++;
00033   return size;
00034 }


Generated on Sun Jun 22 23:24:28 2008 for ListaDuplamenteLigada by  doxygen 1.5.5