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


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. | |
| node * | search (node *l, int num) |
| Busca um valor em uma lista. | |
| void | add_node (node *l, int num) |
| Adiciona um nó no final da lista. | |
| node * | rem_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. | |
| void add_after | ( | node * | n, | |
| int | num | |||
| ) |
Adiciona um novo nó após um nó.
| 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.
| 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.
| 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 }
Remove um nó da lista.
| l | Um ponteiro para a lista. | |
| num | O valor que possui o n a ser removido. |
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 }
Busca um valor em uma lista.
| l | Um ponteiro para a lista. | |
| num | O valor a ser buscado. |
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.
| l | Um ponteiro para a 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 }
1.5.5