terça-feira, 23 de agosto de 2016

lista ligada duplamente encadeada com nó cabeça (não testado extensivamente)

001 #include <stdio.h>
002 #include <stdlib.h>
003 
004 typedef struct node {
005     int v;
006     struct node *prox;
007     struct node *ant;
008 No;
009 
010 #define CABECA -10
011 
012 #if 0
013     void main (void) {
014         printf ("%s""Hello!");
015         No *lista=NULL;
016     }
017     /*Inicio do desenvolvimento: algo que executa (e tem a definicao da estrutura) */
018 #endif
019 
020 #if 0
021     void main (void) {
022         printf ("%s\n""Hello!");
023         No *lista=NULL;
024         lista= (No *malloc (sizeof (No));
025         lista->prox=lista;
026         lista->ant=lista;
027         lista->v=CABECA;
028         printf ("%p, %d(%p), %p", lista->prox, lista->v, lista, lista->ant);
029     }
030     /*Inicio do desenvolvimento: algo que executa, tem a definicao da estrutura, aloca um no (no caso o cabeca) e imprime o no */
031 #endif
032 
033 #if 0
034     void imprimeNo (No *n) {
035         printf ("%p, %d(%p), %p", n->prox, n->v, n, n->ant);
036     }
037     
038     void main (void) {
039         printf ("%s\n""Hello!");
040         No *lista=NULL;
041         lista= (No *malloc (sizeof (No));
042         lista->prox=lista;
043         lista->ant=lista;
044         lista->v=CABECA;
045         imprimeNo (lista);
046     }
047     /*Inicio do desenvolvimento: algo que executa, tem a definicao da estrutura, aloca um no (no caso o cabeca) e imprime o no 
048     Refatoracao: separa o imprime em um metodo. */
049 #endif
050 
051 #if 0
052     void imprimeNo (No *n) {
053         printf ("%p, %d(%p), %p", n->prox, n->v, n, n->ant);
054     }
055     
056     void imprimeLista (No *n) {
057         if (n->v==CABECA) {
058             printf ("tem no cabeca\n");
059         }
060         n=n->prox;
061         while (n->v!=CABECA) {
062             imprimeNo (n);
063             n=n->prox;
064         }
065     }
066     
067     void main (void) {
068         printf ("%s\n""Hello!");
069         No *lista=NULL;
070         lista= (No *malloc (sizeof (No));
071         lista->prox=lista;
072         lista->ant=lista;
073         lista->v=CABECA;
074         imprimeLista (lista);
075     }
076     /*Inicio do desenvolvimento: algo que executa, tem a definicao da estrutura, aloca um no (no caso o cabeca) e imprime o no 
077         Refatoracao: separa o imprime em um metodo. 
078         Imprime lista
079     */
080 #endif
081 
082 #if 0
083     void imprimeNo (No *n) {
084         printf ("%p, %d(%p), %p", n->prox, n->v, n, n->ant);
085     }
086     
087     void imprimeLista (No *n) {
088         if (n->v==CABECA) {
089             printf ("tem no cabeca\n");
090         }
091         n=n->prox;
092         while (n->v!=CABECA) {
093             imprimeNo (n);
094             n=n->prox;
095         }
096     }
097     void insere (No *l, int v) {
098         No *novo=NULL;
099         No *prox=NULL;
100         novo= (No *malloc (sizeof (No));
101         novo->v=v;
102         
103         prox=l->prox;
104         
105         
106         novo->prox=prox;
107         novo->ant=l;
108         
109         l->prox=novo;
110         
111         prox->ant=novo;
112         
113     }
114     
115     void main (void) {
116         printf ("%s\n""Hello!");
117         No *lista=NULL;
118         lista= (No *malloc (sizeof (No));
119         lista->prox=lista;
120         lista->ant=lista;
121         lista->v=CABECA;
122         insere (lista, 15);
123         imprimeLista (lista);
124     }
125     /*Inicio do desenvolvimento: algo que executa, tem a definicao da estrutura, aloca um no (no caso o cabeca) e imprime o no 
126         Refatoracao: separa o imprime em um metodo. 
127         Imprime lista
128         Insere elemento, testa uma insercao
129     */
130 #endif
131 
132 #if 0
133     void imprimeNo (No *n) {
134         printf ("%p, %d(%p), %p", n->prox, n->v, n, n->ant);
135     }
136     
137     void imprimeLista (No *n) {
138         if (n->v==CABECA) {
139             printf ("tem no cabeca\n");
140         }
141         n=n->prox;
142         while (n->v!=CABECA) {
143             imprimeNo (n);
144             n=n->prox;
145         }
146     }
147     
148     void insere (No *l, int v) {
149         No *novo=NULL;
150         No *prox=NULL;
151         novo= (No *malloc (sizeof (No));
152         novo->v=v;
153         
154         prox=l->prox;
155         
156         
157         novo->prox=prox;
158         novo->ant=l;
159         
160         l->prox=novo;
161         
162         prox->ant=novo;
163         
164     }
165     
166     
167     void main (void) {
168         printf ("%s\n""Hello!");
169         No *lista=NULL;
170         lista= (No *malloc (sizeof (No));
171         lista->prox=lista;
172         lista->ant=lista;
173         lista->v=CABECA;
174         insere (lista, 15);
175         insere (lista, 25);
176         insere (lista, 35);
177         insere (lista, 45);
178         insere (lista, 55);
179         imprimeLista (lista);
180     }
181     /*Inicio do desenvolvimento: algo que executa, tem a definicao da estrutura, aloca um no (no caso o cabeca) e imprime o no 
182         Refatoracao: separa o imprime em um metodo. 
183         Imprime lista
184         Insere elemento testa multiplas insercoes
185     */
186 #endif
187 
188 #if 0
189     void imprimeNo (No *n) {
190         printf ("%p, %d(%p), %p\n", n->prox, n->v, n, n->ant);
191     }
192     
193     void imprimeLista (No *n) {
194         if (n->v==CABECA) {
195             printf ("tem no cabeca\n");
196         }
197         n=n->prox;
198         while (n->v!=CABECA) {
199             imprimeNo (n);
200             n=n->prox;
201         }
202     }
203     
204     void insere (No *l, int v) {
205         No *novo=NULL;
206         No *prox=NULL;
207         novo= (No *malloc (sizeof (No));
208         novo->v=v;
209         
210         prox=l->prox;
211         
212         
213         novo->prox=prox;
214         novo->ant=l;
215         
216         l->prox=novo;
217         
218         prox->ant=novo;
219         
220     }
221     
222     No* busca (No *l, int v) {
223         l=l->prox;
224         while (l->v!=CABECA) {
225             if (l->v==vreturn l;
226             l=l->prox;
227         }
228         return NULL;
229     }
230     
231     
232     void remover (No *n) {
233         No *ant=NULL;
234         No *prox=NULL;
235         
236         if (n->v==CABECA) {
237             printf ("Nao eh permitido remover a cabeca.\n");
238             return;
239         }
240         prox=n->prox;
241         ant=n->ant;
242         
243         
244         ant->prox=prox;
245         
246         prox->ant=ant;
247         free (n);
248     }
249     
250     void main (void) {
251         printf ("%s\n""Hello!");
252         No *lista=NULL;
253         lista= (No *malloc (sizeof (No));
254         lista->prox=lista;
255         lista->ant=lista;
256         lista->v=CABECA;
257         insere (lista, 15);
258         insere (lista, 25);
259         insere (lista, 35);
260         insere (lista, 45);
261         insere (lista, 55);
262         
263         No *r=busca (lista, 35);
264         imprimeNo (r);
265         remover (r);
266         imprimeLista (lista);
267     }
268     /*Inicio do desenvolvimento: algo que executa, tem a definicao da estrutura, aloca um no (no caso o cabeca) e imprime o no 
269         Refatoracao: separa o imprime em um metodo. 
270         Imprime lista
271         Insere elemento
272         Depois de codificar o remove, vi que precisava do busca, entao codifiquei o busca e testei os dois sobre um elemento existente
273     */
274 #endif
275 
276 #if 0
277     void imprimeNo (No *n) {
278         printf ("%p, %d(%p), %p\n", n->prox, n->v, n, n->ant);
279     }
280     
281     void imprimeLista (No *n) {
282         if (n->v==CABECA) {
283             printf ("tem no cabeca\n");
284         }
285         n=n->prox;
286         while (n->v!=CABECA) {
287             imprimeNo (n);
288             n=n->prox;
289         }
290     }
291     
292     void insere (No *l, int v) {
293         No *novo=NULL;
294         No *prox=NULL;
295         novo= (No *malloc (sizeof (No));
296         novo->v=v;
297         
298         prox=l->prox;
299         
300         
301         novo->prox=prox;
302         novo->ant=l;
303         
304         l->prox=novo;
305         
306         prox->ant=novo;
307         
308     }
309     
310     No* busca (No *l, int v) {
311         l=l->prox;
312         while (l->v!=CABECA) {
313             if (l->v==vreturn l;
314             l=l->prox;
315         }
316         return NULL;
317     }
318     
319     
320     void remover (No *n) {
321         No *ant=NULL;
322         No *prox=NULL;
323         
324         if (n->v==CABECA) {
325             printf ("Nao eh permitido remover a cabeca.\n");
326             return;
327         }
328         prox=n->prox;
329         ant=n->ant;
330         
331         
332         ant->prox=prox;
333         
334         prox->ant=ant;
335         free (n);
336     }
337     
338     void main (void) {
339         printf ("%s\n""Hello!");
340         No *lista=NULL;
341         lista= (No *malloc (sizeof (No));
342         lista->prox=lista;
343         lista->ant=lista;
344         lista->v=CABECA;
345         insere (lista, 15);
346         insere (lista, 25);
347         insere (lista, 35);
348         insere (lista, 45);
349         insere (lista, 55);
350         
351         No *r=busca (lista, 35);
352         imprimeNo (r);
353         remover (r);
354         r=busca (lista, 25);
355         remover (r);
356         r=busca (lista, 15);
357         remover (r);
358         r=busca (lista, 45);
359         remover (r);
360         r=busca (lista, 55);
361         remover (r);
362         imprimeLista (lista);
363     }
364     /*Inicio do desenvolvimento: algo que executa, tem a definicao da estrutura, aloca um no (no caso o cabeca) e imprime o no 
365         Refatoracao: separa o imprime em um metodo. 
366         Imprime lista
367         Insere elemento
368         Depois de codificar o remove, vi que precisava do busca, entao codifiquei o busca e testei os dois sobre um elemento existente
369         Teste removendo todos os elementos.
370     */
371 #endif
372 
373 #if 0
374     void imprimeNo (No *n) {
375         printf ("%p, %d(%p), %p\n", n->prox, n->v, n, n->ant);
376     }
377     
378     void imprimeLista (No *n) {
379         if (n->v==CABECA) {
380             printf ("tem no cabeca\n");
381         }
382         n=n->prox;
383         while (n->v!=CABECA) {
384             imprimeNo (n);
385             n=n->prox;
386         }
387     }
388     
389     void insere (No *l, int v) {
390         No *novo=NULL;
391         No *prox=NULL;
392         novo= (No *malloc (sizeof (No));
393         novo->v=v;
394         
395         prox=l->prox;
396         
397         
398         novo->prox=prox;
399         novo->ant=l;
400         
401         l->prox=novo;
402         
403         prox->ant=novo;
404         
405     }
406     
407     No* busca (No *l, int v) {
408         l=l->prox;
409         while (l->v!=CABECA) {
410             if (l->v==vreturn l;
411             l=l->prox;
412         }
413         return NULL;
414     }
415     
416     
417     void remover (No *n) {
418         No *ant=NULL;
419         No *prox=NULL;
420         
421         if (n->v==CABECA) {
422             printf ("Nao eh permitido remover a cabeca.\n");
423             return;
424         }
425         prox=n->prox;
426         ant=n->ant;
427         
428         
429         ant->prox=prox;
430         
431         prox->ant=ant;
432         free (n);
433     }
434     
435     void main (void) {
436         printf ("%s\n""Hello!");
437         No *lista=NULL;
438         lista= (No *malloc (sizeof (No));
439         lista->prox=lista;
440         lista->ant=lista;
441         lista->v=CABECA;
442         insere (lista, 15);
443         insere (lista, 25);
444         insere (lista, 35);
445         insere (lista, 45);
446         insere (lista, 55);
447         
448         No *r=busca (lista, 30);
449         imprimeNo (r);
450         remover (r);
451         
452         imprimeLista (lista);
453     }
454     /*Inicio do desenvolvimento: algo que executa, tem a definicao da estrutura, aloca um no (no caso o cabeca) e imprime o no 
455         Refatoracao: separa o imprime em um metodo. 
456         Imprime lista
457         Insere elemento
458         Depois de codificar o remove, vi que precisava do busca, entao codifiquei o busca e testei os dois sobre um elemento existente
459         Teste removendo elemento inexistente (crash geral)
460     */
461     
462 #endif
463 
464 #if 1
465     void imprimeNo (No *n) {
466         if (n==NULL) {
467             printf ("Nao eh possivel imprimirNo NULL.\n");
468             return;
469         }
470         printf ("%p, %d(%p), %p\n", n->prox, n->v, n, n->ant);
471     }
472     
473     void imprimeLista (No *n) {
474         if (n==NULL) {
475             printf ("Nao eh possivel imprimir NULL.\n");
476             return;
477         }
478         if (n->v==CABECA) {
479             printf ("tem no cabeca\n");
480         }
481         n=n->prox;
482         while (n->v!=CABECA) {
483             imprimeNo (n);
484             n=n->prox;
485         }
486     }
487     
488     void insere (No *l, int v) {
489         if (l==NULL) {
490             printf ("Nao eh possivel inserir em NULL.\n");
491             return;
492         }
493         No *novo=NULL;
494         No *prox=NULL;
495         novo= (No *malloc (sizeof (No));
496         novo->v=v;
497         
498         prox=l->prox;
499         
500         
501         novo->prox=prox;
502         novo->ant=l;
503         
504         l->prox=novo;
505         
506         prox->ant=novo;
507         
508     }
509     
510     No* busca (No *l, int v) {
511         if (l==NULL) {
512             printf ("Nao eh possivel buscar em NULL.\n");
513             return NULL;
514         }
515         l=l->prox;
516         while (l->v!=CABECA) {
517             if (l->v==vreturn l;
518             l=l->prox;
519         }
520         return NULL;
521     }
522     
523     
524     void remover (No *n) {
525         No *ant=NULL;
526         No *prox=NULL;
527         
528         if (n==NULL) {
529             printf ("Nao eh possivel remover NULL.\n");
530             return;
531         }
532         if (n->v==CABECA) {
533             printf ("Nao eh permitido remover a cabeca.\n");
534             return;
535         }
536         prox=n->prox;
537         ant=n->ant;
538         
539         
540         ant->prox=prox;
541         
542         prox->ant=ant;
543         free (n);
544     }
545     
546     void main (void) {
547         printf ("%s\n""Hello!");
548         No *lista=NULL;
549         lista= (No *malloc (sizeof (No));
550         lista->prox=lista;
551         lista->ant=lista;
552         lista->v=CABECA;
553         insere (lista, 15);
554         insere (lista, 25);
555         insere (lista, 35);
556         insere (lista, 45);
557         insere (lista, 55);
558         
559         No *r=busca (lista, 30);
560         imprimeNo (r);
561         remover (r);
562         
563         imprimeLista (lista);
564     }
565     /*Inicio do desenvolvimento: algo que executa, tem a definicao da estrutura, aloca um no (no caso o cabeca) e imprime o no 
566         Refatoracao: separa o imprime em um metodo. 
567         Imprime lista
568         Insere elemento
569         Depois de codificar o remove, vi que precisava do busca, entao codifiquei o busca e testei os dois sobre um elemento existente
570         Teste removendo elemento inexistente (crash geral)
571         Inserido o teste para elemento inexistente em todos os métodos.
572     */
573 #endif
Java2html

Nenhum comentário:

Postar um comentário