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()
To embed this program on your website, copy the following code and paste it into your website's HTML: