2
« en: Sábado 16 de Abril de 2005, 19:18 »
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;
}
}
}