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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Lista Doble Dinamica con insercion ordenada?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Lista Doble Dinamica con insercion ordenada?  (Leído 4,579 veces)
gibranini

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Lista Doble Dinamica con insercion ordenada?
« 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)


« Última modificación: 19 Mayo 2014, 06:33 am por gibranini » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Lista Doble Dinamica con insercion ordenada?
« Respuesta #1 en: 19 Mayo 2014, 09:22 am »

Sin ver el código es complicado comentar los errores.... no somos adivinos.


En línea

gibranini

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Lista Doble Dinamica con insercion ordenada?
« Respuesta #2 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;
        }
    }
}
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Lista Doble Dinamica con insercion ordenada?
« Respuesta #3 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?
En línea

gibranini

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Lista Doble Dinamica con insercion ordenada?
« Respuesta #4 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
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Lista Doble Dinamica con insercion ordenada?
« Respuesta #5 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;
En línea

gibranini

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Lista Doble Dinamica con insercion ordenada?
« Respuesta #6 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 :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
lista dinamica
Java
brian_e 8 13,463 Último mensaje 6 Mayo 2009, 02:15 am
por thurgrim
ayuda con lista doble
Programación C/C++
josue_tux 0 1,833 Último mensaje 14 Junio 2010, 06:11 am
por josue_tux
[Duda] Inserción en una tabla ordenada
Programación C/C++
Denok 8 3,806 Último mensaje 5 Enero 2012, 00:46 am
por Denok
LISTA DOBLE
Programación C/C++
leosansan 4 3,776 Último mensaje 29 Septiembre 2012, 21:33 pm
por leosansan
Crear una lista de strings ordenada alfabeticamente
Programación C/C++
implor 1 2,149 Último mensaje 2 Diciembre 2015, 12:27 pm
por Orubatosu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines