Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Beginner Web en 10 Septiembre 2018, 20:08 PM

Título: Ciclos for en listas
Publicado por: Beginner Web en 10 Septiembre 2018, 20:08 PM
Alguien podria explicarme que es lo que hacen estos ciclos en las siguientes listas?

LISTAS SIMPLES
Código (cpp) [Seleccionar]
for(i=lista;!=NULL;i=i->sig);
Código (cpp) [Seleccionar]
for(i=lista.inicio;i->sig!=NULL;i=i->sig);
i->sig=nuevo;

Código (cpp) [Seleccionar]
for(i=lista.inicio;(i->sig)->sig!=lista.inicio;i=i->sig);
El ultimo es de una lista circular simple con dos punteros al inicio y al final
Título: Re: Ciclos for en listas
Publicado por: MAFUS en 10 Septiembre 2018, 22:54 PM
1. De estar bien construida, i apunta al final de la lista. Pero justo con este código i valdrá NULL.

2. Añade al final de la lista el nuevo dato.

3. i apunta al último elemento, justo antes de que la lista de una vuelta entera.
Título: Re: Ciclos for en listas
Publicado por: Beginner Web en 11 Septiembre 2018, 05:10 AM
Y este ultimo?

Código (cpp) [Seleccionar]
for(i=lista.inicio;(i->sig)->sig!=NULL;i=i->sig);
Título: Re: Ciclos for en listas
Publicado por: MAFUS en 11 Septiembre 2018, 09:45 AM
Es parecido a este
for(i=lista.inicio;(i->sig)->sig!=lista.inicio;i=i->sig);

Si cambias lista.inicio por NULL ¿qué crees que quiere decir?
Título: Re: Ciclos for en listas
Publicado por: Beginner Web en 13 Septiembre 2018, 01:26 AM
Este ultimo ciclo lo que hace es ir comparando desde el segundo elemento en la primera pasada, pero en la segunda pasada lo hace con el tercero o el cuarto elemento? en eso me pierdo un poquillo  :huh:
Título: Re: Ciclos for en listas
Publicado por: jca1 en 13 Septiembre 2018, 02:19 AM
En el segundo reseteas todos los nodos a `nuevo` excepto el inicial. En el tercer codigo te recorre toda la lista hasta el anteultimo valor inclusivemente ya que pregunta si el sig del sig es igual a lista—>inicio. Y el ultimo haria lo mismo y se usaria en una lista no ciclica, llegaria dentro del for hasta el anteultimo, y cuando sale i = anteultimo nodo; lo mismo para ambos casos