es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Lista doblemente enlazada Ordenación Burbuja

Mi proyecto es un sistema de ordenación de burbuja para una lista doblemente enlazada. Estoy intentando ordenar los elementos de la lista doblemente enlazada (que son objetos) por fecha. Usé una ordenación basada en punteros porque no quiero cambiar los datos de los punteros. El problema es que mi código puede (creo que eficientemente) ordenar la lista enlazada. Pero al final, cuando intento imprimir los objetos de la lista enlazada, mi cabeza no está en el lugar donde debería estar. ¿Podría ayudarme?

estructura DoubleNode <em>DoubleDynamic::swap( DoubleNode *pointer1, DoubleNode *pointer2) { DoubleNode </em> temp = pointer2->next; pointer2->next = pointer1; pointer2->prev = pointer1->prev; pointer1->next = temp; pointer1->prev = pointer2; return pointer2; }

void DoubleDynamic::sort(int size) {
DoubleNode* temp;
DoubleNode* current;
bool sorting;
if (head==NULL) {
return;
} else {
for (int i = 0; i <= size; ++i) {
sorting= false;
temp=head;
for (int j = 0; j < size-1-i; ++j) {
DoubleNode *employee1=temp;
DoubleNode *employee2=employee1->next;
if (employee2!=NULL) {
if (employee1->data->getAppointment().operator>(employee2->data->getAppointment())) {
temp = swap(employee1,employee2);
sorting= true;
}
temp= temp->next;
}
}
if (!sorting) {
break;
}
}
}
current=head;
while (current->prev!=NULL) {
current=current->prev;
}
head=current;
}

void DoubleDynamic::display() {
struct DoubleNode trav;
trav=head;
if (trav==NULL) {
cout<<“La lista está vacía”<<endl; }=”” while=”” (trav=”” !=”NULL)” {=”” cout<<
(trav-=””>data)<<endl; trav=”trav-“>next;
}
cout<<endl;
}></endl;
}></endl;></endl;>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema se encuentra en la función de visualización, la cual no puede manejar adecuadamente el puntero de cabecera después de haber hecho la ordenación. Dado que estás utilizando una lista doblemente enlazada, puedes recorrer la lista hacia atrás utilizando el puntero previo hasta llegar a la cabecera para configurar correctamente el puntero actual. Aquí hay una implementación actualizada de la función de visualización:

    void DoubleDynamic::display()
    {
        DoubleNode *trav;
        trav = head;
    
        if (trav == NULL)
        {
            cout << "¡La lista está vacía!" << endl;
        }
    
        // Recorre hasta el primer nodo
        while (trav->prev != NULL)
        {
            trav = trav->prev;
        }
    
        // Recorre hacia adelante y muestra cada nodo
        while (trav != NULL)
        {
            cout << *(trav->data) << endl;
            trav = trav->next;
        }
    
        cout << endl;
    }
    

    Al recorrer la lista hacia atrás para configurar correctamente el puntero actual al nodo de cabecera, debe ser posible mostrar la lista ordenada correctamente.

Comments are closed.