Off Topic - como hacer para ordenar las listas en C99

 
Vista:

como hacer para ordenar las listas en C99

Publicado por Manu (1 intervención) el 24/06/2021 19:12:21
Hola, mañana día 25 a las 10 tengo que entregar un trabajo de programación 2, esta casi acabado pero faltan un par de detalles que no consigo solucionar, los cuales marcarían la diferencia entre el aprobado y el suspenso.

El trabajo se trata de diseñar un programa en C99 que realiza varias funciones usando listas. El caso es que no se como hacer para ordenar las listas. Si pueden ayudarme lo agradecería.
Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder
Imágen de perfil de Alejandro

Cómo ordenar listas en un programa de C99 en C

Publicado por Alejandro (53 intervenciones) el 27/08/2024 21:34:27
Hola Manu,

Entiendo que necesitas ayuda para ordenar las listas en tu programa de C99. Ordenar una lista puede ser un proceso complejo, pero hay varias formas de hacerlo. Una de las formas más comunes es utilizar un algoritmo de ordenamiento, como el algoritmo de ordenamiento de burbuja o el algoritmo de ordenamiento rápido (quicksort).

Aquí te proporciono un ejemplo de cómo podrías implementar el algoritmo de ordenamiento de burbuja en tu programa de C99:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <stdio.h>
 
// Estructura de un nodo de la lista
struct Nodo {
    int dato;
    struct Nodo* siguiente;
};
 
// Función para intercambiar dos nodos
void intercambiar(struct Nodo* a, struct Nodo* b) {
    int temp = a->dato;
    a->dato = b->dato;
    b->dato = temp;
}
 
// Función para ordenar la lista utilizando el algoritmo de ordenamiento de burbuja
void ordenarLista(struct Nodo* cabeza) {
    int intercambiado;
    struct Nodo* actual;
    struct Nodo* siguiente = NULL;
 
    // Caso base
    if (cabeza == NULL)
        return;
 
    do {
        intercambiado = 0;
        actual = cabeza;
 
        while (actual->siguiente != siguiente) {
            if (actual->dato > actual->siguiente->dato) {
                intercambiar(actual, actual->siguiente);
                intercambiado = 1;
            }
            actual = actual->siguiente;
        }
        siguiente = actual;
    } while (intercambiado);
}
 
// Función para imprimir la lista
void imprimirLista(struct Nodo* nodo) {
    while (nodo != NULL) {
        printf("%d ", nodo->dato);
        nodo = nodo->siguiente;
    }
    printf("\n");
}
 
int main() {
    // Crear la lista
    struct Nodo* cabeza = NULL;
    struct Nodo* segundo = NULL;
    struct Nodo* tercero = NULL;
 
    cabeza = (struct Nodo*)malloc(sizeof(struct Nodo));
    segundo = (struct Nodo*)malloc(sizeof(struct Nodo));
    tercero = (struct Nodo*)malloc(sizeof(struct Nodo));
 
    cabeza->dato = 3;
    cabeza->siguiente = segundo;
 
    segundo->dato = 2;
    segundo->siguiente = tercero;
 
    tercero->dato = 1;
    tercero->siguiente = NULL;
 
    // Imprimir la lista antes de ordenarla
    printf("Lista original: ");
    imprimirLista(cabeza);
 
    // Ordenar la lista
    ordenarLista(cabeza);
 
    // Imprimir la lista después de ordenarla
    printf("Lista ordenada: ");
    imprimirLista(cabeza);
 
    return 0;
}

En este ejemplo, se crea una lista enlazada con tres nodos y se utiliza la función `ordenarLista` para ordenar la lista utilizando el algoritmo de ordenamiento de burbuja. Luego, se imprime la lista antes y después de ordenarla.

Recuerda que este es solo un ejemplo y que puedes adaptarlo según tus necesidades y la estructura de tu programa. Además, asegúrate de liberar la memoria asignada a los nodos de la lista una vez que hayas terminado de usarla.

Espero que este ejemplo te sea útil y te ayude a resolver los detalles que faltan en tu trabajo. ¡Buena suerte con tu entrega!

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar