Dev - C++ - Ordenar una lista en C

 
Vista:

Ordenar una lista en C

Publicado por Francisco (1 intervención) el 09/06/2022 06:21:25
Necesito ayuda me piden realizar un algoritmo: Ingresar dos listas de enteros, unir ambas listas, muestre la lista sin ordenar, luego muestre la lista ordenada de forma ascendente.

Primero estoy intentado ordenar una sola lista, para saber que voy por buen camino.

Pero no logro hacer que mi lista salga ordenada, estoy intentado ordenar por el método de burbuja

#include <stdio.h>
#include <conio.h>
#include <cstdlib>
int tam,i=0;
struct elemento
{
int dato;
struct elemento *siguiente;
};

struct elemento *pi,*pa,*pf; //Declaracion de los punteros

void insertarlista(int n) // Para insertar datos a la lista
{
if(pi == NULL) //La lista esta vacia
{
pi= new(elemento);
pi->dato=n;
pf=pi; //Al no existir nodos el puntero inicial es tambien el ultimo nodo
}else //Cuando la lista no esta vacia
{
pa = new(elemento);
pf->siguiente=pa;
pa->dato=n;
pf=pa;
}
pf->siguiente= NULL;
}

void mostrarlista() //Para imrpimir la lista
{
pa=pi; // El pi contiene el primer elemento de la lista
while(pa != NULL)
{
printf("\nLa lista contiene: %d",pa->dato);
pa=pa->siguiente;
}
}

void ordenarlista()
{
int temporal;
struct elemento *pivote,*actual;

pivote=pi;
while(pivote != pf)
{
actual=pivote->siguiente;
pivote=pivote->siguiente;
while(actual != NULL)
{
if(pivote->dato > actual->dato)
{
temporal=pivote->dato;
pivote->dato=actual->dato;
actual->dato=temporal;

}
actual=actual->siguiente;
}
}
}

main()
{
int n; //Variable que va almacenar el numero ingresado por el usuario;

printf("Ingrese tamaño: ");scanf("%d",&tam);

while(i<tam)
{
printf("Ingrese un numero: ");scanf("%d",&n);
insertarlista(n);
i++;

}
mostrarlista();
printf("\nLista ordenada: ");
mostrarlista();
ordenarlista();

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder