SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: MikePatton en Viernes 13 de Junio de 2008, 06:26

Título: Listas Enlazadas
Publicado por: MikePatton en Viernes 13 de Junio de 2008, 06:26
hola soy un principiante de programacion en c y tengo un gran problema con estructuras, tengo q hacer listas enlazadas, ordenamiento por insercion y hacerlo recursivamente( SIN ciclos iterativos for o while) , tengo algo avanzado, pero me falta, me da FALLO DE SEGMENTACION, se que tengo un problema con los punteros pero no lo encuentro, dejo adjuntado el archivo, espero que me puedan ayudar se los agradeceria mucho.

ejemplo

entrada
(ingreso los siguientes numeros)

-159 267 134 -200
-31 24 278 158
262 264 5 -55
81 127 261 291
295 242 127 236
195 -96 202 -47
92 182 221 16
18 195 247 26
71 -162 169 212
-33 99 -165 194
3 111 127 133
-27 -36 -59 11
53 168 24 -25
0

salida

[-9] -59 -159
[-7] -27 -47
[-6] -36 -96
[-5] -25 -55 -165
[-3] -33
[-2] -162
[-1] -31
Título: Re: Listas Enlazadas
Publicado por: carmamezo en Viernes 13 de Junio de 2008, 11:49
Hola, no he repasado el código entero pero con una de las funciones me vale...

Código: Text
  1. struct lista * crearLista(int numero, struct lista *primero){
  2.   int unidad;
  3.   unidad = numero & 10;
  4.   struct lista *aLista;//espero que estés programando en C++... Has declarado las variables después de iniciar el código
  5.   struct lista *bLista;
  6.   aLista=(struct lista *)malloc(sizeof(struct lista));
  7.   bLista=(struct lista *)malloc(sizeof(struct lista));
  8.   aLista -> digito = unidad;
  9.   aLista -> primero = NULL;
  10.   aLista -> anterior = NULL;
  11.   aLista -> siguiente = NULL;
  12.  
  13.   printf("bien");
  14.  
  15.   if(bLista->primero==NULL){  //no se va a ejecutar
  16.     if(unidad < aLista->digito){
  17.       bLista -> digito = unidad;
  18.       bLista -> primero = NULL;
  19.       aLista -> anterior = bLista;
  20.       bLista -> siguiente = aLista;
  21.       crearLista(numero, bLista);        
  22.      
  23.     }
  24.     else if(unidad > aLista -> digito){
  25.       bLista -> digito = unidad;
  26.       bLista -> primero = NULL;
  27.       bLista -> anterior = aLista;
  28.       aLista -> siguiente = bLista;
  29.       crearLista(numero, bLista);
  30.     }
  31.   crearNodo(numero,primero);    
  32.   }
  33. }
  34.  
  35.  
cuando pongo que no se va a ejecutar lo digo porque bLista está recién creado y apunta a una posición que aún no ha sido incializada con ningún valor, contendrá por tanto basura.

A todos los que empezais os recomiendo que useis el debugger de vuestro compilador para ejecutar vuestros programas paso a paso y encontreis los fallos viendo qué valores toman vuestras variables en cada paso.
Revisa de nuevo todo con más atención.

Un saludo,
 :lightsabre: