• Sábado 20 de Abril de 2024, 16:18

Autor Tema:  Listas Enlazadas  (Leído 1493 veces)

MikePatton

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Listas Enlazadas
« en: Viernes 13 de Junio de 2008, 06:26 »
0
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
  • -200
  • [1] 11 71 81 111 221 261 291
    [2] 92 182 202 212 242 262
    [3] 3 53 133
    [4] 24(2) 134 194 264
    [5] 5 195(2) 295
    [6] 16 26 236
    [7] 127(3) 247 267
    [8] 18 158 168 278
    [9] 99 169

    la lectura tiene que detener cuando ingreso algun 0(cero) o una letra.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Listas Enlazadas
« Respuesta #1 en: Viernes 13 de Junio de 2008, 11:49 »
0
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:
No hay tonto más molesto que el ingenioso.