Lista enlazada simples

Iniciado por angie07, 12 Noviembre 2016, 16:54 PM

0 Miembros y 1 Visitante están viendo este tema.

angie07

Buenos días
Necesito generar listas enlazada de números aleatorios enteros y ordenarlos por el método de ordenamiento burbuja

Este es el codigo que estoy manejando pero no se como hacer la parte del ordenamiento con las listas y la parte aleatoria

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

typedef struct _nodo{
   int numero;
   struct _nodo *siguiente;
}_Nodo;

typedef _Nodo * _pNodo;

_pNodo CrearLista(int numero)
{
   _pNodo Lista;

   Lista = (_pNodo)malloc(sizeof(_Nodo));
   Lista->numero = numero;
   Lista->siguiente = NULL;

   return Lista;
}

_pNodo InsertarElementoAlFinal(int numero, _pNodo ListaInicial)
{
   _pNodo NuevoNodo;
   _pNodo Auxiliar = ListaInicial;
   NuevoNodo = malloc(sizeof(_Nodo));

   NuevoNodo->numero = numero;
   NuevoNodo->siguiente = NULL;

   if(ListaInicial->siguiente == NULL)
   {
       ListaInicial->siguiente = NuevoNodo;
   }
   else
   {
       while(Auxiliar->siguiente != NULL)
       {
           Auxiliar = Auxiliar->siguiente;
       }
       Auxiliar->siguiente = NuevoNodo;
   }
   return NuevoNodo; ///RETORNAMOS DIRECCIÓN DEL ELEMENTO INSERTADO
}

_pNodo InsertarElementoAlInicio(int numero, _pNodo ListaInicial)
{
   _pNodo NuevoNodo;
   NuevoNodo = malloc(sizeof(_Nodo));
   NuevoNodo->numero = numero;
   NuevoNodo->siguiente = ListaInicial;

   return NuevoNodo; ///RETORNAMOS NUEVA LISTA INICIAL
}

_pNodo InsertarElementoPosterior(int numero, _pNodo ElementoAnterior)
{
   _pNodo NuevoNodo;
   NuevoNodo = malloc(sizeof(_Nodo));

   NuevoNodo->numero = numero;
   NuevoNodo->siguiente = ElementoAnterior->siguiente;

   ElementoAnterior->siguiente = NuevoNodo;

   return NuevoNodo; ///RETORNAMOS DIRECCIÓN DEL ELEMENTO INSERTADO
}

_pNodo EliminarPrimerElemento(_pNodo Lista)
{
   _pNodo Auxiliar;
   Auxiliar = Lista;

   if(Auxiliar->siguiente == NULL)
   {
       return Lista; ///SI NO HAY ELEMENTOS DEJAMOS TODO IGUAL
   }
   Lista = Auxiliar->siguiente;
   free(Auxiliar);

   return Lista; ///RETORNAMOS LA NUEVA BASE DE LA LISTA
}

///ELIMINAMOS ELEMENTO POR SU DIRECCIÓN
int EliminarElemento(_pNodo Elemento, _pNodo Lista)
{
   _pNodo Auxiliar;
   Auxiliar = Lista;
   while(Auxiliar != NULL)
   {
       if(Auxiliar->siguiente == Elemento)
       {
           break;
       }
       Auxiliar = Auxiliar->siguiente;
   }
   if(Auxiliar == NULL)
   {
       return 0;
   }
   else
   {
       if(Elemento->siguiente == NULL)
       {
           Auxiliar->siguiente = NULL;
       }
       else
       {
           Auxiliar->siguiente = Elemento->siguiente;
       }
       free(Elemento);
       return 1;
   }
}

///BUSQUEDA DE ELEMENTOS
_pNodo BuscarElemento(int numero, _pNodo Lista)
{
   _pNodo Auxiliar;

   Auxiliar = Lista;
   while(Auxiliar != NULL)
   {
       if(Auxiliar->numero == numero)
       {
           break;
       }
       Auxiliar = Auxiliar->siguiente;
   }
   return Auxiliar; ///RETORNAMOS DIRECCIÓN DEL ELEMENTO ENCONTRADO
}

void OrdenarLista()
{
   _Nodo *p=NULL;
   _Nodo *t=NULL;
   int temp, i, j;

   for(i=0;i<15; i++)
   {
       for(j=0;j<15;j++)
       {
           if(numero[j]>numero[j+1])
           {
               temp = numero[j];
               numero[j] = numero[j+1];
               numero[j+1] = temp;
       }
   }
}

///ASCENDENTE
for(i=0; i<15; i++)
{
   printf("%d ",numero[i]);
}
}

int main(){

   CrearLista();

   int num,i;

   srand(time(NULL));

   for(i=1; i<=15; i=i+1)
   {
       num = 1+ rand()%51;
       printf("\tELEMENTOS: %d")
   }

   return 0;
}

Espero me puedan ayuda, gracias.


Mod: Los códigos deben ir en etiquetas GeSHi