elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Listas dobles, comparacion de un elemento con el siguiente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Listas dobles, comparacion de un elemento con el siguiente  (Leído 3,392 veces)
falconez

Desconectado Desconectado

Mensajes: 18



Ver Perfil
Listas dobles, comparacion de un elemento con el siguiente
« en: 24 Enero 2014, 05:18 am »

Saludos, mi duda es acerca de como puedo comparar un elemento con el siguiente hasta el final de la lista doble! El problema radica en que por ejemplo tengo que contar cuantas materias diferentes tengo en mi lista. Necesito ir comparando elemento a elemento hasta el final de la lista.
PDTA. Materia es tipo string.


      int i=0; //Contador de nodos
       int j=1; //Contador de materias diferentes

while (current != head->left){
            current=current->right;
      
       cout<<"NODO --------> "<<j++<<endl<<endl;
       cout<<"MATERIA : "<<current->data.materia<<endl;
       cout<<"__________________________________"<<endl<<endl;
       if (current->data.materia==current->right->data.materia) //PROBLEMA
           cout<<i++<<endl;
      
getch();
        
}


En línea

skapunky
Electronik Engineer &
Colaborador
***
Desconectado Desconectado

Mensajes: 3.667


www.killtrojan.net


Ver Perfil WWW
Re: Listas dobles, comparacion de un elemento con el siguiente
« Respuesta #1 en: 25 Enero 2014, 16:52 pm »

Primero de todo, un consejo...no uses left o right, utiliza "anterior" y "siguiente" para guardar las posiciones de memória, queda mas claro.

Código
  1. struct Tlista{
  2. char materia[20];
  3. lista *siguiente;
  4. lista *anterior;
  5. } *inicio = 0, *elemento = 0;

(imagino que tu estructura sera algo similar a lo anterior)

Te doy una idea:

1º Opcion:

Crea un array de chars, mediante un while vas guardando el nombre de las materias recorriendo tu estructura mediante "head->left" que seria lo equivalente en mi estructura a "elemento->siguiente".

Cada vez que te situes a un nuevo elemento de la estructura, lo comparas con los nombres que guardes en el array de chars, si ya exíste no hagas nada, si no exíste lo guardas en el array.

Una vez finalizado el bucle que recorra todo el contenido de tu estructura, es decir: (head->left == 0) lo único que deberás hacer es contar cuantos elementos tienes en el array de chars.

Se me ocurre otra idea, que es ordenando por orden alfabético las materias utilizando la función strcmp() que devuelve 1 cuando dos cadenas son identicas, dicha forma ya no te la explico porque quizá es doble trabajo y te lias intentando realizar el orden alfabético.


En línea

Killtrojan Syslog v1.44: ENTRAR
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Listas dobles, comparacion de un elemento con el siguiente
« Respuesta #2 en: 30 Enero 2014, 13:17 pm »

Si sacas a relucir la magia de C++ verás que hay una solución que es realmente sencilla.

C++ tiene varios tipos de contenedores: vector, map, multimap... cada uno tiene sus propias características, por lo que elegir el correcto en cada situación puede ahorrarnos bastante trabajo.

Uno de estos contenedores es set. set es como vector, con las siguientes peculiaridades:

* los elementos se almacenan ordenados
* no admite duplicados

Dicho esto, saber cuantos elementos diferentes tienes en la lista es tan "sencillo" como recorrer la lista e ir añadiendo los nombres de las materias en el set. Al finalizar, el método count te dirá cuantas materias diferentes hay en tu lista.

Para recorrer la lista se pueden dar dos casos ( y no concretas cual es el tuyo ):

* La lista es plana, tiene un inicio y un final.
* La lista es circular, por lo que no hay un item->left que sea nulo

Si la lista es plana tienes que posicionarte en el primer elemento de la lista y empezar a recorrer los elementos desde ese punto hasta que encuentres un item->left que sea nulo.

Si la lista es circular, tendrás que ir comparando cada puntero "left" con el que hayas tomado como referencia ( desde el que empiezas )... cuando sean iguales es que has recorrido toda la lista.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
operaciones basicas con listas Simples y Dobles....
Programación C/C++
ANTÓN RAMIREZ 0 6,044 Último mensaje 14 Diciembre 2010, 21:10 pm
por ANTÓN RAMIREZ
aclaracion de listas dobles enlazadas
Programación C/C++
josue_tux 2 3,748 Último mensaje 15 Marzo 2011, 14:41 pm
por Don Pollo
Ayuda con listas dobles Enlazadas
Programación C/C++
larezaka 3 2,935 Último mensaje 1 Julio 2012, 17:02 pm
por larezaka
Ayuda con Formularios con listas Dobles
PHP
larezaka 0 1,633 Último mensaje 7 Octubre 2012, 16:52 pm
por larezaka
Mover al siguiente elemento igual en un listbox
Programación Visual Basic
RiasChan 5 4,146 Último mensaje 14 Abril 2018, 22:50 pm
por RiasChan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines