00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "lista.h"
00021
00022 unsigned long int size(node *l){
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 }
00035
00036 void add_node(node *l, int num){
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 }
00053
00054 node *search(node *l, int num){
00055 node *ret = NULL;
00056 while(l!=NULL){
00057 if(l->num==num) ret=l;
00058 l=l->next;
00059 }
00060 return ret;
00061 }
00062
00063 node *rem_node(node *l, int num){
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 }
00086
00087 void add_after(node *n, int num){
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 }
00100
00101 void delete_list(node *l){
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 }