• Miércoles 6 de Noviembre de 2024, 12:23

Autor Tema:  Re: Listas Doblemente enlazadas con manejo de cadenas  (Leído 954 veces)

ucablex

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Listas Doblemente enlazadas con manejo de cadenas
« en: Lunes 19 de Mayo de 2003, 05:28 »
0
Señores disculpen la ignorancia pero como inserto un elemento en una lista Doblemente enlazada... mi parametro es un string y lo recibo por un archivo de texto... hago la lectura y luego mando a la funcion insertar pero se ejecuta tres veces y despues hay una error y no lo logro ver... aqui esta mas o menos el codigo para ver si me ayudan... esta es la definicion ....struct _nodo {  StringNombre;                                           struct _nodo *Siguiente;                struct_nodo*Anterior;};          

   typedef struct _nodo LineaUno,LineaDos,LineaTres;
typedef LineaUno *pNodo;
typedefLineaUno*Lista;         y esta es mi funcion insertar                                    void insertar(Lista*l,StringEstacion);    

aqui esta la definicion ...                                                     void insertar(Lista *lista, String Estacion)
      {
        pNodo  nuevoPtr,actualPtr;

          /* Crear un nuevo nodo */
        nuevoPtr = (pNodo)malloc(sizeof(LineaUno));
          strcpy((nuevoPtr->Nombre),Estacion) ;
        
        printf("n%s",(nuevoPtr->Nombre)); //solo para debugger

          /* Colocamos actual en la primera posicion de la lista */

         actualPtr = *lista;

         if (actualPtr) while (actualPtr->Siguiente) actualPtr = actualPtr->Anterior;

         if (!actualPtr) {
        /* Añadimos la lista a continuacion del nuevo nodo*/
         nuevoPtr->Siguiente = actualPtr;
         nuevoPtr->Anterior = NULL;
         if (actualPtr) actualPtr->Anterior = nuevoPtr;
         if (!*lista) *lista = nuevoPtr;}
        
         else {
            /* Avanzamos hasta el ultimo elemento*/
            /*Insertamos el nuevo nodo despues del nodo anterior*/
          nuevoPtr->Siguiente = actualPtr->Siguiente;
          actualPtr->Siguiente = nuevoPtr;
          nuevoPtr->Anterior = actualPtr;
            if (nuevoPtr->Siguiente) nuevoPtr->Siguiente->Anterior = nuevoPtr;
          }
        } les agradeceria que me resolvieran el embrollo ...gracias...

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Listas Doblemente enlazadas con manejo de cadenas
« Respuesta #1 en: Lunes 19 de Mayo de 2003, 16:39 »
0
principio basico:
 
Código: Text
  1.  
  2. struct list
  3. {
  4.    struct list *back;
  5.    struct list *next;
  6.    int data;
  7. };
  8.  
  9. int main()
  10. {
  11.    struct list *lista, -*aux;
  12.    int i=2;
  13.    /*crear nodo 1*/
  14.    lista=(struct list *)malloc(sizeof(estruct list));
  15.    lista->ant=NULL;
  16.    lista->next=NULL;
  17.    lista->data=1;
  18.  
  19.    /*crear 49 nodos adicionales*/
  20.    while (i<50)
  21.    {
  22.       aux=(struct list *)malloc(sizeof(estruct list));
  23.       lista->next=aux;
  24.       aux->back=lista;
  25.       aux->next=NULL;
  26.       aux->data=i;
  27.       lista=aux;
  28.       i++;        
  29.    }
  30.    return 1;
  31. }
  32.  
  33.  

Espero que te sea de ayuda

chauu

juank
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io