Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Intercambio de Nodos

Estas en el tema de Intercambio de Nodos en el foro de C/C++ en Foros del Web. Buenas! A ver si me pueden ayudar, tengo una galería de imagenes construida por nodos, y tengo que poder votar una imagen y ordenarla. Ya ...
  #1 (permalink)  
Antiguo 06/12/2014, 17:21
 
Fecha de Ingreso: diciembre-2014
Mensajes: 1
Antigüedad: 10 años
Puntos: 0
Intercambio de Nodos

Buenas! A ver si me pueden ayudar, tengo una galería de imagenes construida por nodos, y tengo que poder votar una imagen y ordenarla.
Ya cuento con la galeria ordenada hasta que agrego una nueva imagen, y mi misión es votarla y ordenarla en el resto de la lista. Lo que me está complicando es el intercambio del nodo desordenado con el nuevo lugar. Ya que no puedo usar swap simplemente. Debería arreglar los punteros de los nodos manualmente. No se si se entiende, les paso mi estructura y luego mi función votar.
El error que me sale es "segmentation fault", agradecería su ayuda.

Saludos


struct Nodo {
Imagen elemento;
Nodo* sigLlegada;
Nodo* sigVotos;
int votos;
};

class Lista {
public:
Nodo* prmLlegada;
Nodo* prmVotos;
};
void GaleriaImagenes::agregarImagen(const Imagen &imagen) {

Nodo* nuevo = new Nodo;
nuevo -> elemento = imagen;
nuevo -> sigLlegada = NULL;
nuevo -> sigVotos = NULL;
nuevo -> votos = 0;

if(imagenes.prmLlegada == NULL){
imagenes.prmLlegada = nuevo;
}
else{
Nodo* i = imagenes.prmLlegada;
Nodo* j = imagenes.prmVotos;

while( i -> sigLlegada != NULL){
i = i -> sigLlegada;
}
i -> sigLlegada = nuevo;
while( j -> sigVotos != NULL){
j = j -> sigVotos;
}
j -> sigVotos = nuevo;
}
}

void GaleriaImagenes::votar(const Imagen &imagen) {
Nodo* i = imagenes.prmVotos;
while (!(i -> elemento == imagen)){
i = i -> sigVotos;
}
i -> votos = i -> votos + 1;
Nodo* k = i -> sigVotos;
while(k -> votos == i -> votos - 1){
k = k -> sigVotos;
}
i->sigVotos = k->sigVotos;
k->sigVotos = i;

}

Etiquetas: c++, cpp, nodos, punteros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:56.