class Nodo:
    """Representa un nodo en una lista enlazada.
    
    Atributos:
        nombre (str): Nombre del cliente.
        habitacion (int): Número de la habitación asignada al cliente.
        siguiente (Nodo): Referencia al siguiente nodo en la lista.
    """
    def __init__(self, nombre, habitacion):
        self.nombre = nombre
        self.habitacion = habitacion
        self.siguiente = None

class ListaEnlazada:
    """Representa una lista enlazada que mantiene los clientes ordenados alfabéticamente.
    
    Atributos:
        cabeza (Nodo): El primer nodo en la lista enlazada.
    """
    def __init__(self):
        self.cabeza = None

    def agregar_cliente(self, nombre, habitacion):
        """Agrega un nuevo cliente a la lista en una posición que mantiene el orden alfabético.
        
        Parámetros:
            nombre (str): El nombre del cliente a agregar.
            habitacion (int): El número de habitación del cliente.
        """
        nuevo_nodo = Nodo(nombre, habitacion)
        # Insertar al principio si la lista está vacía o el nuevo nombre es menor que el de la cabeza.
        if self.cabeza is None or self.cabeza.nombre > nuevo_nodo.nombre:
            nuevo_nodo.siguiente = self.cabeza
            self.cabeza = nuevo_nodo
        else:
            # Insertar en la posición correcta para mantener el orden alfabético.
            actual = self.cabeza
            while actual.siguiente and actual.siguiente.nombre < nuevo_nodo.nombre:
                actual = actual.siguiente
            nuevo_nodo.siguiente = actual.siguiente
            actual.siguiente = nuevo_nodo

    def imprimir_tabla(self):
        """Imprime los clientes en la lista en formato de tabla con columnas alineadas."""
        actual = self.cabeza
        print("+----------------+-------------+")
        print("| Nombre Cliente | Habitación  |")
        print("+----------------+-------------+")
        while actual:# cuando el valor de actual se None se sale del ciclo
            # Alineación de texto en cada celda para mantener un formato tabular limpio.
            print(f"| {actual.nombre.ljust(14)} | {str(actual.habitacion).ljust(11)} |")
            actual = actual.siguiente
        print("+----------------+-------------+")

# Ejemplo de uso de la clase para manejar y visualizar clientes de un hotel
clientes_hotel = ListaEnlazada()
clientes_hotel.agregar_cliente("Pedro Solís", 105)
clientes_hotel.agregar_cliente("Alicia Fonseca", 102)
clientes_hotel.agregar_cliente("Brandon Ulate", 201)

clientes_hotel.imprimir_tabla()

Embed on website

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