
Insertar en lista enlazada ordenadamente
Publicado por Urban_WildCat (2 intervenciones) el 11/11/2017 23:35:04
Hola!
Veréis, llevo 3 horas comiéndome la cabeza con este código y no consigo sacarlo. Tengo una clase cliente, con un atributo llamado ID que es una string de 4 letras. (ej. "ABCD"). Tengo una lista con varios de estos clientes, con Id's generadas aleatoriamente, pero previamente ordenada (de "AAAA", primero, a "ZZZZ", último). Deseo introducir un cliente con una Id que debería ir entre medias de esta lista ordenada. Lo realizo de la siguiente forma:
Tengo la siguiente lista:
Dni: 56495745V - Hora de inicio de compra: 5 - Hora de fin de compra: 8 - ID: AAAA
Dni: 88257733V - Hora de inicio de compra: 5 - Hora de fin de compra: 9 - ID: BBBB
Dni: 85221964H - Hora de inicio de compra: 5 - Hora de fin de compra: 14 - ID: CCCC
Dni: 91761636P - Hora de inicio de compra: 5 - Hora de fin de compra: 6 - ID: DDDD
Dni: 75636147A - Hora de inicio de compra: 5 - Hora de fin de compra: 12 - ID: FFFF
Dni: 14987955M - Hora de inicio de compra: 5 - Hora de fin de compra: 9 - ID: GGGG
Dni: 43985567E - Hora de inicio de compra: 5 - Hora de fin de compra: 15 - ID: HHHH
Dni: 61269954R - Hora de inicio de compra: 5 - Hora de fin de compra: 12 - ID: IIII
Quiero insertar el siguiente elemento cliente:
Dni: 48879625W - Hora de inicio de compra: 5 - Hora de fin de compra: 9 - ID: EEEE
Para no aumentar la complejidad de la duda, en lugar de utilizar un bucle fuero a que el puntero aux. apunte a la posición 4 (Id: "DDDD"). Entonces ejecuto este código:
Al ejecutar la última línea el programa crashea. Si la tengo comentada se ejecuta correctamente, claro que entonces no termino de insertar el elemento. ¿Qué estoy haciendo mal?
Veréis, llevo 3 horas comiéndome la cabeza con este código y no consigo sacarlo. Tengo una clase cliente, con un atributo llamado ID que es una string de 4 letras. (ej. "ABCD"). Tengo una lista con varios de estos clientes, con Id's generadas aleatoriamente, pero previamente ordenada (de "AAAA", primero, a "ZZZZ", último). Deseo introducir un cliente con una Id que debería ir entre medias de esta lista ordenada. Lo realizo de la siguiente forma:
Tengo la siguiente lista:
Dni: 56495745V - Hora de inicio de compra: 5 - Hora de fin de compra: 8 - ID: AAAA
Dni: 88257733V - Hora de inicio de compra: 5 - Hora de fin de compra: 9 - ID: BBBB
Dni: 85221964H - Hora de inicio de compra: 5 - Hora de fin de compra: 14 - ID: CCCC
Dni: 91761636P - Hora de inicio de compra: 5 - Hora de fin de compra: 6 - ID: DDDD
Dni: 75636147A - Hora de inicio de compra: 5 - Hora de fin de compra: 12 - ID: FFFF
Dni: 14987955M - Hora de inicio de compra: 5 - Hora de fin de compra: 9 - ID: GGGG
Dni: 43985567E - Hora de inicio de compra: 5 - Hora de fin de compra: 15 - ID: HHHH
Dni: 61269954R - Hora de inicio de compra: 5 - Hora de fin de compra: 12 - ID: IIII
Quiero insertar el siguiente elemento cliente:
Dni: 48879625W - Hora de inicio de compra: 5 - Hora de fin de compra: 9 - ID: EEEE
Para no aumentar la complejidad de la duda, en lugar de utilizar un bucle fuero a que el puntero aux. apunte a la posición 4 (Id: "DDDD"). Entonces ejecuto este código:
1
2
3
4
5
6
7
8
9
10
11
pnodocolacliente aux; // Puntero a NodoColaCliente.
NodoColaCliente nodoCliente = NodoColaCliente(cliente); // NodoColaCliente con el cliente que quiero insertar, con ID="EEEE"
aux = primero; // Posición 1 (Id: "AAAA")
aux = aux->siguiente; // Posición 2 (Id: "BBBB")
aux = aux->siguiente; // Posición 3 (Id: "CCCC")
aux = aux->siguiente; // Posición 4 (Id: "DDDD")
cout << "Aux: " + aux->cliente.mostrarDatos() << endl; // Devuelve el cliente "DDDD".
cout << "Aux.siguiente: " + aux->siguiente->cliente.mostrarDatos() << endl; // Devuelve el cliente "FFFF"
nodoCliente.siguiente = aux->siguiente; // Hago que apunte al cliente con Id. "FFFF"
aux->siguiente=&nodoCliente; // Quiero hacer que el puntero del nodo con el cliente "DDDD" apunte a nodoCliente,
//que contiene el cliente con Id "EEEE". Sin embargo, al ejecutar esta línea, el programa se cierra.
Al ejecutar la última línea el programa crashea. Si la tengo comentada se ejecuta correctamente, claro que entonces no termino de insertar el elemento. ¿Qué estoy haciendo mal?
Valora esta pregunta


0