• Viernes 17 de Mayo de 2024, 01:42

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - AkiLaCañaSePideAsi

Páginas: [1]
1
C/C++ / Re: Violacion D Segmento En Mi Lista Enlazada(ayuda)
« en: Domingo 17 de Abril de 2005, 01:12 »
CHAO

2
C/C++ / Violacion D Segmento En Mi Lista Enlazada(ayuda)
« 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;
         }
      }
   }

Páginas: [1]