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

// Definición de la estructura para un nodo de la lista
typedef struct Nodo {
    char nombre[50];     // Nombre del cliente
    int habitacion;      // Número de la habitación del cliente
    struct Nodo *siguiente;  // Puntero al siguiente nodo en la lista
} Nodo;

// Función para crear un nuevo nodo
Nodo* crearNodo(char nombre[], int habitacion) {
    Nodo *nuevoNodo = (Nodo*) malloc(sizeof(Nodo));
    strcpy(nuevoNodo->nombre, nombre);  // Copia el nombre en la estructura
    nuevoNodo->habitacion = habitacion; // Asigna el número de habitación
    nuevoNodo->siguiente = NULL;        // Inicializa el siguiente nodo como NULL
    return nuevoNodo;
}

// Función para insertar un nodo en la lista enlazada manteniendo el orden alfabético
void insertarOrdenado(Nodo **cabeza, Nodo *nuevoNodo) {
    if (*cabeza == NULL || strcmp((*cabeza)->nombre, nuevoNodo->nombre) > 0) {
        // Inserta el nuevo nodo al principio de la lista
        nuevoNodo->siguiente = *cabeza;
        *cabeza = nuevoNodo;
    } else {
        // Busca la posición correcta para insertar el nuevo nodo
        Nodo *actual = *cabeza;
        while (actual->siguiente != NULL && strcmp(actual->siguiente->nombre, nuevoNodo->nombre) < 0) {
            actual = actual->siguiente;
        }
        nuevoNodo->siguiente = actual->siguiente;
        actual->siguiente = nuevoNodo;
    }
}

// Función para imprimir todos los nodos en la lista
void imprimirClientes(Nodo *cabeza) {
    Nodo *actual = cabeza;
    printf("+----------------+-------------+\n");
    printf("| Nombre Cliente | Habitación  |\n");
    printf("+----------------+-------------+\n");
    while (actual != NULL) {
        printf("| %-14s | %-11d |\n", actual->nombre, actual->habitacion);
        actual = actual->siguiente;
    }
    printf("+----------------+-------------+\n");
}

// Función principal del programa
int main() {
    Nodo *cabeza = NULL;  // Inicializa la lista enlazada como vacía

    // Agrega clientes a la lista
    insertarOrdenado(&cabeza, crearNodo("Pedro Solís", 105));
    insertarOrdenado(&cabeza, crearNodo("Alicia Fonseca", 102));
    insertarOrdenado(&cabeza, crearNodo("Brandon Ulate", 201));

    // Imprime la lista de clientes
    imprimirClientes(cabeza);

    return 0;
}

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: