Categorías > Lenguajes > C > Listas Enlazadas en C ...
Nuevo Mensaje | Responder
mandrake


134 envíos
Desconectado

#11
RE: Listas Enlazadas en C11-12-2009 a las 00:48:46

-.-PUF!

Gracias.....!

"Cuando estás en un atasco de tráfico con un Porsche, todo lo que puedes hacer es consumir más combustible que el resto estando parado. La escalabilidad va de construir carreteras más anchas, no coches más rápidos"
Responder | Citar | Moderar | Mensaje Privado
cr4s1r0


6 envíos
Desconectado

#12
RE: Listas Enlazadas en C11-12-2009 a las 00:59:16

Te falta el typedef y el nombre del tipo de datos que te estás definiendo, además de no hacer una comprobación que te puede llevar en la ejecucón a errores de punteros: no compruebas que efectivamente el malloc te haya dado la memoria que has pedido.

Como consejo, siempre que trabajes con punteros, al declararlos, inicialos a NULL.

Así pues, el resultado sería este:

#include <stdio.h>
#include <stdlib.h>

typedef struct nodo
{
  int info;
  struct nodo *sig;
  struct nodo *ant;
}NODO;
       
int main()
{
NODO *p = NULL;

  p = (NODO *) malloc(sizeof(NODO));
  if (NULL != p)
       {
         p->info = 1;
         p->sig = NULL;
         p->ant = NULL;
       }

  return 1;
}

"Vive Libre, Muere en Paz" Tempus - Cronos
Responder | Citar | Moderar | Mensaje Privado
mandrake


134 envíos
Desconectado

#13
RE: Listas Enlazadas en C11-12-2009 a las 05:23:31

Perdonen mi ignorancia; pero no he entendido lo de eliminar ni lo de agregar al medio o al final...

"Cuando estás en un atasco de tráfico con un Porsche, todo lo que puedes hacer es consumir más combustible que el resto estando parado. La escalabilidad va de construir carreteras más anchas, no coches más rápidos"
Responder | Citar | Moderar | Mensaje Privado
cr4s1r0


6 envíos
Desconectado

#14
RE: Listas Enlazadas en C11-12-2009 a las 11:27:59

Más bien mi pregunta es, ¿qué tipo de lista quieres hacer? ¿una circular ( el "último" enlaza al "primero")?¿O una "simple"?

Por los códigos que he estado viendo creo que es simple. Así que:

Si es el primer elemento que vas a enlazar tienes que comprobar si la lista está vacia:

plista y paux son punteros a lista, y p un Nodo. y la lista es ordenada crecientemente, siendo info un entero y enc es un entero.

paux=plista
enc = 0;
si(plista == NULL)
    plista = &p;
sino
    si(*plista->info > p->info){
/* Estamos en el caso que queremos enlazar al principio de la lista*/
        p->sig = plista;  // el siguiente es el primero en la lista antigua
        p->ant = *plista->ant;  //Esta es equivalente a p->ant = NULL
        plista->ant = &p; // Hacemos que el anterior primer elemento, apunte al nuevo
        plista=&p; // Colocamos el puntero al primero en su posición.
    sino
          mientras(NULL != paux->sig && enc ==0) /* Lo enlazamos donde corresponda o en su defecto salimos en el último elemento. */
              paux=*paux->sig;
              si(*paux->info > p->info)
                p->sig = paux;
                p->ant = *paux->ant;
                *paux->ant = &p;
                enc = 1;
            finSi
          finMientras
          si(enc == 0 ) // Va tras el último elemento
              *paux->sig = &p
                p->ant = paux
                p->sig = NULL;
          finSi
      finSi
finSi

Espero que te haya servido de ayuda. El pasarlo a C, ya te lo dejo a tí como trabajo :P

"Vive Libre, Muere en Paz" Tempus - Cronos
Responder | Citar | Moderar | Mensaje Privado
wilmaforez


65 envíos
Desconectado

#15
RE: Listas Enlazadas en C11-12-2009 a las 12:04:29

EDITO- cr4s1r0 se me ha adelantado, y además me he dado cuenta de que estoy usando mal los punteros, por lo que he quitado el código. Aún así, las imágenes deberían estar bien :D.

Jeje, tranquilo. Tampoco es que lo haya explicado muy bien :P.

Supongamos que tenemos una lista de números ordenados de menor a mayor. Y que queremos insertar uno nuevo:


De modo que tendríamos que hacer dos cosas, recorrer la lista hasta encontrar un numero que sea igual o mayor, e insertar el nuevo Nodo delante.


Usando el ejemplo de la imagen, al terminar el bucle tendríamos:
actual apuntando al nodo cuyo numero es 4.
previo apuntando al nodo cuyo numero es 2.

Queremos insertar nuestro nuevo nodo entre ambos, por tanto:
cambiamos el siguienteNodo de nuevo para que apunte al del numero 4.
cambiamos el siguienteNodo de previo para que apunte a nuevo.



Para borrar el método es el mismo.
Buscar el número a borrar con un while. Y  eliminarlo cambiando el puntero del nodo anterior, de modo que apunte al siguiente nodo.




Espero que esta vez lo haya explicado un poco mejor .


Saludos


Responder | Citar | Moderar | Mensaje Privado
cr4s1r0


6 envíos
Desconectado

#16
RE: Listas Enlazadas en C11-12-2009 a las 12:23:03

Normal que me haya adelantado wilmaforez, si es que te estabas currando bastante la respuesta :D

"Vive Libre, Muere en Paz" Tempus - Cronos
Responder | Citar | Moderar | Mensaje Privado
CHuLoYo


762 envíos
Desconectado

#17
RE: Listas Enlazadas en C11-12-2009 a las 17:37:26

Es mejor que para un mejor entendimiento de los códigos utilicéis la etiqueta .c del editor de mensajes del foro. Agregad los nuevos con la etiqueta, e incluso podéis editar los antiguos. Así se diferencia de textos explicativos y queda mucho más legible.

Un saludo.

www.Esquio.net | Diseño y programación web profesional
Responder | Citar | Moderar | Mensaje Privado
1 2