1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Ordenar lista simplemente enlazada en lenguaje C método burbuja ordenamiento
« en: 05 de Julio 2016, 19:08 »
Hola, a todos. Les voy a pedir un poco de colaboración para aprender a ordenar una lista simplemente enlazada, lo voy a implementar utilizando el método de la burbuja pero desconozco cómo hacerlo, vi algunos Ejs. pero no me queda claro si se hace como ordenar un vector o como leí que se debe volcar los datos a un vector, ordenarlos y luego crear una lista nueva con los datos ordenados.
Les dejo el código de lo que llevo hasta el momento. -
Saludos.
Daniel
Les dejo el código de lo que llevo hasta el momento. -
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
struct _agenda{
int dato;
struct _agenda *siguiente;
};
struct _agenda *primero, *ultimo;
void mostrar_menu();
void agregar_elemento( size_t *cont );
void mostrar_lista( size_t cont);
void ordenar_lista( size_t cont);
int main(void){
char opcion, ch;
size_t cont = 0;
primero = (struct _agenda *) NULL;
ultimo = (struct _agenda *) NULL;
do{
mostrar_menu();
opcion = getchar();
while((ch = getchar()) != EOF && ch != '\n');
switch ( opcion ){
case '1': agregar_elemento( &cont );
break;
case '2': printf("No disponible todavía!\n");
break;
case '3': mostrar_lista( cont );
break;
case '4': ordenar_lista( cont );
break;
case '5': exit( 1 );
default: printf( "Opción no válida\n" );
printf( "\n Pulse una tecla para continuar..." ); getchar();
break;
}
} while (opcion!='5');
return 0;
}
void mostrar_menu(){
system( "clear" );
printf( "\n\n ===== Menu =====" );
printf( "\n\n 1 - Agregar elemento" );
printf( "\n 2 - Borrar elemento" );
printf( "\n 3 - Mostrar elementos" );
printf( "\n 4 - Ordenar elementos" );
printf( "\n 5 - Salir" );
printf("\n\n Escoge una opcion......: ");
}
/* Con esta función añadimos un elemento al final de la lista */
void agregar_elemento( size_t *cont ){
struct _agenda *nuevo;
int ch;
/* reservamos memoria para el nuevo elemento */
nuevo = (struct _agenda *) malloc (sizeof(struct _agenda));
if( nuevo == NULL){
printf(" \n No hay memoria disponible");
}
printf( "\n ===== Nuevo elemento =====" );
printf( "\n Dato.....:" );
scanf( "%d", &nuevo->dato );
while ((ch = getchar()) != EOF && ch != '\n');
/* el campo siguiente va a ser NULL por ser el último elemento*/
nuevo->siguiente = NULL;
/* ahora metemos el nuevo elemento en la lista. lo situamos al final de la lista */
/* comprobamos si la lista está vacía. si primero==NULL es que no
hay ningún elemento en la lista. también vale ultimo==NULL */
if( primero == NULL ){
printf( "\n Primer elemento" );
primero = nuevo;
ultimo = nuevo;
}else{
/* el que hasta ahora era el último tiene que apuntar al nuevo */
ultimo->siguiente = nuevo;
/* hacemos que el nuevo sea ahora el último */
ultimo = nuevo;
}
*cont += 1;
}
void mostrar_lista( size_t cont ){
struct _agenda *auxiliar; /* lo usamos para recorrer la lista */
int i=0;
auxiliar = primero;
printf( "\n Mostrando la lista completa (total %lu):\n ", cont);
while( auxiliar != NULL ){
printf( "\n Dato....: %d", auxiliar->dato);
auxiliar = auxiliar->siguiente;
i++;
}
if( i==0 ){
printf( "\n La lista esta vacia!!\n" );
}
printf( "\n Pulse una tecla para continuar..." ); getchar();
}
void ordenar_lista( size_t cont){
printf( "\n No desarrollado..." ); getchar();
}
Saludos.
Daniel