• Lunes 29 de Abril de 2024, 22:22

Autor Tema:  Violacion D Segmento En Mi Lista Enlazada(ayuda)  (Leído 1388 veces)

AkiLaCañaSePideAsi

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Violacion D Segmento En Mi Lista Enlazada(ayuda)
« en: Sábado 16 de Abril de 2005, 19:18 »
0
necesito ayuda en esta lista simplemente enlazada ordenada ke he implementao, y es ke me compila pero no ejecuta. Lo compilo y ejecuto en un PC con linux SuSe 9.1 y me da el error en tiempo de ejecucion de "Violacion de segmento".
Yo ya no se ke hacer, espero ke me contesteis.
Os dejo el codigo espero ke lo entendais
POSTDATA: la funcion mostrar_lista no la e puesto porke el error me lo da cuando llamo a la funcion meter_lista_ordenada.

#include <stdio.h>
#include <stdlib.h>

struct elemento{
   int informacion;
   struct elemento *siguiente;
   };
   
struct lista{
   struct elemento *primero;
   struct elemento *ultimo;
   };
   
void meter_lista_ordenada(int numero,struct lista *L);
void mostrar_lista(struct lista *L);

main(){
   struct lista *L;
   L = NULL;

   meter_lista_ordenada(1,L);

   
}


void meter_lista_ordenada(int numero,struct lista *L){
   struct elemento *nuevo,*guia;
   nuevo=(struct elemento *)malloc(sizeof(struct elemento));
   nuevo->informacion = numero;
   // CASO 1: LISTA VACIA(TENEMOS KE HACER KE PRIMERO Y ULTIMO APUNTEN AL ELEMENTO INTRODUCIDO)
   if(L = NULL){
      printf("CASO LISTA VACIA");
      L->primero = nuevo;
      L->ultimo = nuevo;
      nuevo->siguiente = NULL;
      exit(0);
      }
   //CASO 2.1: PARA 1 SOLO ELEMENTO(SUPONEMOS KE PRIMERO Y ULTIMO APUNTABAN AL 1er ELEMENTO)
   //EL ELEMENTO INTRODUCIDO KEDA EN ULTIMA POSICION
   if(L != NULL && L->primero == L->ultimo && nuevo->informacion >= L->primero->informacion){
      printf("CASO 1 PARA 1 SOLO ELEMENTO");
      L->primero->siguiente = nuevo;
      L->ultimo = nuevo;
      L->ultimo->siguiente = NULL;
      exit(0);
      }
   //CASO 2.2: PARA 1 SOLO ELEMENTO(SUPONEMOS KE PRIMERO Y ULTIMO APUNTABAN AL 1er ELEMENTO)
   //EL ELEMENTO INTRODUCIDO KEDA EN PRIMERA POSICION
   if(L != NULL && L->primero == L->ultimo && nuevo->informacion <= L->primero->informacion){
      printf("CASO 2 PARA 1 SOLO ELEMENTO");
      nuevo->siguiente = L->primero;
      L->primero = nuevo;
      L->ultimo->siguiente = NULL;
      break;
      }
   //CASO 3.1: PARA MAS DE 1 ELEMENTO
   //EL ELEMENTO INTRODUCIDO KEDA EN PRIMERA POSICION
   if(L != NULL && L->primero != L->ultimo && nuevo->informacion <= L->primero->informacion){
      printf("CASO 1 PARA MAS DE 1 ELEMENTO");
      nuevo->siguiente = L->primero;
      L->primero = nuevo;
      L->ultimo->siguiente = NULL;
      break;
      }
   //CASO 3.2: PARA MAS DE 1 ELEMENTO
   //EL ELEMENTO INTRODUCIDO KEDA EN ULTIMA POSICION
   if(L != NULL && L->primero != L->ultimo && nuevo->informacion >= L->primero->informacion){
      printf("CASO 2 PARA MAS DE 1 ELEMENTO");
      L->ultimo->siguiente = nuevo;
      L->ultimo = nuevo;
      L->ultimo->siguiente = NULL;
      break;
      }
   //CASO 3.3: PARA MAS DE 1 ELEMENTO
   //EL ELEMENTO ES MAYOR KE EL 1er ELEMENTO Y MENOR KE EL ULTIMO ELEMENTO POR TANTO AY KE COMPARAR POR PAREJAS
   if(L != NULL && L->primero != L->ultimo && nuevo->informacion > L->primero->informacion && nuevo->informacion < L->ultimo->informacion){
      printf("CASO DEFAULT");
      guia = L->primero;
      while(guia != NULL){
         if(nuevo->informacion >= guia->informacion && nuevo->informacion <= guia->siguiente->informacion){
            nuevo->siguiente = guia->siguiente;
            guia->siguiente = nuevo;
            }
         else
            guia = guia->siguiente;
         }
      }
   }

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Violacion D Segmento En Mi Lista Enlazada(ayuda)
« Respuesta #1 en: Sábado 16 de Abril de 2005, 21:36 »
0
Hola

Ese codigo es imposible de revisar, esta mal ordenado y confuso, por lo pronto yo haria las cosas bien y quitaria esos break de las condiciones if

chao

AkiLaCañaSePideAsi

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Violacion D Segmento En Mi Lista Enlazada(ayuda)
« Respuesta #2 en: Domingo 17 de Abril de 2005, 01:12 »
0
CHAO