[C con Clase] ayuda por favor

Marcela Bustamante marcela_bustamante en itrsa.com.ar
Vie Feb 15 16:19:16 CET 2013


Buenas tardes, este ejercicio me está presentando el error segmentation
fault y la verdad que no tengo idea de que estoy haciendo mal desde ya
muchas gracias por la ayuda o información que me puedan brindar

 

 

/*Ejercicio 8.2.

Repetir el ejercicio anterior creando una estructura struct dNode para una
lista doblemente

enlazada.*/

 

#include <stdio.h>

#include <stdlib.h>

 

//declaro la estructura la cual va a ser un tipo de dato que contiene
nombre, apell y edad

typedef struct sData

{

char Nombre[30];

char Apellido[30];

char Edad[10];

}tiposData;

 

//Creo el nodo que va a contener el tipo de dato     tiposData dato;

 

typedef struct Nodo

{

    tiposData dato;

    struct Nodo *anterior,*siguiente;

} tipoNodo;

 

 

typedef tipoNodo *pNodo;

typedef tipoNodo *Lista;

 

 

void Insertar(Lista *lista, tiposData v) {

   pNodo nuevo, actual;

 

   /* Crear un nodo nuevo */

   nuevo = (pNodo)malloc(sizeof(tipoNodo));

   nuevo->dato = v;

 

   /* Colocamos actual en la primera posición de la lista */

   actual = *lista;

   if(actual) while(actual->anterior) actual = actual->anterior;

 

   /* Si la lista está vacía o el primer miembro es mayor que el nuevo */

   if(!actual || strncmp(actual->dato.Nombre,v.Nombre) > 0) {

      /* Añadimos la lista a continuación del nuevo nodo */

      nuevo->siguiente = actual;

      nuevo->anterior = NULL;

      if(actual) actual->anterior = nuevo;

      if(!*lista) *lista = nuevo;

   }

   else {

      /* Avanzamos hasta el último elemento o hasta que el siguiente tenga

         un valor mayor que v */

      while(actual->siguiente &&
strncmp(actual->siguiente->dato.Nombre,v.Nombre)< 0)

      {

          actual = actual->siguiente;

      /* Insertamos el nuevo nodo después del nodo anterior */

      nuevo->siguiente = actual->siguiente;

      actual->siguiente = nuevo;

      nuevo->anterior = actual;

      if(nuevo->siguiente) nuevo->siguiente->anterior = nuevo;

      }

   }

}

 

 

 

//a la funcion mostrar solo se le pasa la lista

void mostrar(Lista *l)

{

    Lista aux;

    aux=l;

    while(aux->siguiente)

    {

 

        printf("El nombre es:%s\n",aux->dato.Nombre);

        printf("El apellido es:%s\n",aux->dato.Apellido);

        printf("La edad es:%s\n",aux->dato.Edad);

        printf("\n");

        aux=aux->siguiente;

 

            }

}

 

tiposData ingresarDatos()

{

    tiposData nuevoDato;

    printf("Ingrese Nombre\n");

    scanf("%s",nuevoDato.Nombre);

    printf("Ingrese Apellido\n");

    scanf("%s",nuevoDato.Apellido);

    printf("Ingrese Edad\n");

    scanf("%s",nuevoDato.Edad);

    return nuevoDato;

}

 

int main(void)

{

    printf("Programa para crear una lista de datos\n ");

    Lista l;

    l=(Lista)malloc(sizeof(tipoNodo));

    l->anterior=l->siguiente=NULL;

    int opcion=1;

    tiposData dato;

    do

    {

        printf("Si desea ingresar un dato presione 1 de lo contrario salga
con cualquier letra\n");

        scanf("%d",&opcion);

        if(opcion==1)

        {

           dato = ingresarDatos();

           Insertar(&l,dato);

           mostrar(&l);

        }

    }while(opcion==1);

 

 

    return 0;

}

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130215/772d5966/attachment.html>


Más información sobre la lista de distribución Cconclase