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==v) return 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==v) return 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==v) return 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==v) return 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
|
Nenhum comentário:
Postar um comentário