Dev - C++ - Mostrar los campos repetidos en dos listas

 
Vista:

Mostrar los campos repetidos en dos listas

Publicado por Patri (1 intervención) el 30/11/2015 13:03:13
Buenas, tengo una duda sobre concepto de listas.
Tengo que hacer un programa que con una lista, tengo que mostrar los que tengan un campo igual.

Entiendo que debería hacer dos bucles, uno que incremente el primer elemento de la lista y compare con los demás, y otro que incremente el segundo, pero no soy capaz de hacerlo.

Alguna ayuda?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de emanuel
Val: 2
Ha disminuido su posición en 7 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Mostrar los campos repetidos en dos listas

Publicado por emanuel (5 intervenciones) el 30/11/2015 13:55:21
Tenes que informar la posicion de los que estan iguales o solo los iguales?
En ese caso yo lo solucionaria con dos punteros.
Siempre y cuando hablemos de listas dinamicas.
En caso de listas estaticas tipo vectores ahi si te conviene tener lo que vos decis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Mostrar los campos repetidos en dos listas

Publicado por Hector (45 intervenciones) el 30/11/2015 14:21:18
Cuando dices mostrar un campo igual, es que tienes una lista y un valor y debes comparar el valor con toda la lista?

O tienes dos listas y debes devolver su intersección?

Si bien es el primer caso, puedes hacer una sola recorrida, comparando cada elemento de la lista con el valor, y guardando los que resaltan en un vector o otra lista que tu diseñes.

El segundo caso vendría siendo lo que sugieres, vas a utilizar bucles anidados, el bucle externo recorrerá la lista 1, mientras que el interno recorrerá la lista dos tantas veces como elementos tenga la lista numero 1.

Para recorrer una lista, tendrías que utilizar un puntero auxiliar, y apuntarlo al inicio de la lista, luego ir cambiando constantemente el valor del auxiliar por el siguiente de este hasta que llegue a valer NULL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int* aux = lista1;
int* aux_2;
 
while(aux != NULL)
{
     aux_2 = lista2;
     while(aux_2 != NULL)
     {
          if(aux -> dato == aux_2 -> dato)
                   puts("Hay datos identicos");
          aux_2 = aux_2 -> sig;
     }
 
     aux = aux -> sig;
}

Prácticamente este código usa la lógica que se utiliza para comparar dos vectores.

Cualquier duda la notificas

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar