[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