Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gibranini en 19 Mayo 2014, 06:31 am



Título: Lista Doble Dinamica con insercion ordenada?
Publicado por: gibranini en 19 Mayo 2014, 06:31 am
Hola buenas noches amigos soy nuevo en el foro y quisiera pedirle su ayuda,
llevo tiempo tratando de hacer una inserción ordenada con listas doblemente ligadas,
alguien sabe como hacerla?
me puede proporcionar un algoritmo o algun codigo, solo me a salido con exito con la simple pero con doble no me sale como quisiera,
solo me enlazada los punteros de" siguiente" y el de "anterior" solo los primeros tres nodos que inserto, alguien que me ayude  :(
D:

por cierto es con Clases (POO)


Título: Re: Lista Doble Dinamica con insercion ordenada?
Publicado por: eferion en 19 Mayo 2014, 09:22 am
Sin ver el código es complicado comentar los errores.... no somos adivinos.


Título: Re: Lista Doble Dinamica con insercion ordenada?
Publicado por: gibranini en 19 Mayo 2014, 17:28 pm
jaja aqui esta  :D

Código:
void Celular::InsOrdenadoble(string nom, int mod)
{
    Nodo *temp=new Nodo(nom, mod);
    Nodo *temp2=inicio;

    if(Vacia())
    {
        inicio=temp;
        ultimo=temp;

        temp->siguiente=NULL;
        temp->anterior=NULL;
    }
    else
    {
        if(inicio->modelo>mod)//Cuando el nvo Nodo es menor al inicio
        {
            temp->siguiente=inicio;
            inicio->anterior=temp;
            inicio=temp;
        }
        else
        {//Para ser insertardo en otro lugar que no sea inicio
            while(temp2->siguiente!=NULL&&temp2->siguiente->modelo<=mod)
            {
                temp2=temp2->siguiente;
            }

            temp->anterior=temp2;
            temp->siguiente=temp2->siguiente;
            temp2->siguiente=temp->anterior;
            temp2->siguiente=temp;
        }
    }
}


Título: Re: Lista Doble Dinamica con insercion ordenada?
Publicado por: eferion en 20 Mayo 2014, 08:46 am
Veo que estás usando C++.

En este caso, espero que hayas implementado el constructor de la clase Nodo. Si es así, dicho constructor debería inicializar los punteros "siguiente" y "anterior" a NULL, por lo que podrías evitar el uso de determinadas líneas en el código:

Código
  1.    if(Vacia())
  2.    {
  3.        inicio=temp;
  4.        ultimo=temp;
  5.  
  6.        // Las siguientes lineas sobrarian
  7.        //temp->siguiente=NULL;
  8.        //temp->anterior=NULL;
  9.    }

Y luego, en el bucle de inserción:

Código
  1. temp2->siguiente=temp->anterior;
  2. temp2->siguiente=temp;

¿No ves nada raro?


Título: Re: Lista Doble Dinamica con insercion ordenada?
Publicado por: gibranini en 21 Mayo 2014, 03:04 am
tienes razon, tengo un constructor donde inicializo anterior y siguiente y ya corregi lo del
Código:
 //aux2->siguiente=aux->anterior;
            aux2->siguiente=aux;

pero aun esta igual, sigue sin enlazarle el putero de anterior :(
no me sale, se me "truena" o pasa lo que comentaba al inicio


Título: Re: Lista Doble Dinamica con insercion ordenada?
Publicado por: eferion en 21 Mayo 2014, 09:28 am
Digamos que tú tienes una lista tal que:

A <--> C

y quieres añadir B, que va en medio.

Los pasos a seguir son:

B->ant = A
B->sig = C = A->sig
C->ant = B
A->sig = B

Son 4 pasos... y tu estás haciendo únicamente 3...

Código
  1.            temp->anterior=temp2;
  2.            temp->siguiente=temp2->siguiente;
  3.            // temp2->siguiente=temp->anterior;
  4.            temp2->siguiente=temp;


Título: Re: Lista Doble Dinamica con insercion ordenada?
Publicado por: gibranini en 21 Mayo 2014, 17:29 pm
Gracias eferion ya me salio jaja ;D ;D ;D ;D :laugh: ;-)
tienes mucha razon aparte de que me faltaba declarar un nuevo nodo

esto fue lo que hice

Código:
temp->anterior=temp2;
            temp3=temp2->siguiente;
            temp->siguiente=temp2->siguiente;
            temp2->siguiente=temp;
            temp3->anterior=temp;

Saludos :)