Una lista es una colección de elementos homogéneos entre los cuales existe una relación lineal en donde cada elemento indica la dirección donde se encuentra el siguiente elemento de la lista.
Una lista se puede represtentar de dos formas:
Una lista se compone de nodos y estos a su vez están compuestos por dos partes:
En la implementación por los general un nodo de la lista se abstrae de un clase:
class Nodo:
dato = None
siguiente = None
def __init__(sig):
self.siguiente = sig
Se refieren a una colección de elementos cuya relación lineal es determinada por la posición del elemento en la lista.
Caso 1: Cuando la lista enlazada simple no existe
SINOPSIS:
Utilidad: añadir un elemento al inico de la lista L
Datos de entrada: la lista L y el nuevo elemento
Datos de salida: la lista L con el nuevo elemento al inicio
Precondición: ninguna
Poscondición: la lista L contiene el elemento nuevo al inicio
Caso 2: Cuando el nodo se debe insertar antes del primero
Caso 3: Cuando el nodo se debe insertar después del último nodo
SINOPSIS:
Utilidad: añadir un elemento al final de la lista L
Datos de entrada: la lista L y el nuevo elemento
Datos de salida: la lista L con el nuevo elemento al final
Precondición: ninguna
Poscondición: la lista L contiene el elemento nuevo al final
Caso 4: Cuando el nodo debe insertarse entre nodos
SINOPSIS:
Utilidad: añadir un nuevo nodo en un orden específico dentro de la lista L
Datos de entrada: la lista L, el nuevo elemento y el nodo predecesor
Datos de salida: la lista L con el nuevo elemento insertado en el lugar que le corresponde
Precondición: ninguna
Poscondición: la lista L contiene al elemento nuevo en el orden que le corresponde
Caso 1: Borrar el primer nodo
SINOPSIS:
Utilidad: quitar un elemento del inicio de la lista L
Datos de entrada: la lista L
Datos de salida: la lista L con un nodo menos y el valor del nodo eliminado
Precondición: las lista L no está vacía
Poscondición: la lista L con un nodo menos (el del inicio)
Caso 2: Borrar cualquier nodo que no sea el primero
SINOPSIS:
Utilidad: quitar un nodo de un orden específico de la lista L
Datos de entrada: la lista L y el elemento a eliminar
Datos de salida: la lista L con un elemento menos
Precondición: las lista L no esté vacía y que contenga el nodo a eliminar
Poscondición: la lista L contiene un elemento menos y corresponde al que se eliminó
Buscar un nodo
SINOPSIS:
Utilidad: recorrer la lista L hasta encontrar un determinado nodo dentro de la misma
Datos de entrada: la lista L y el elemento a buscar
Datos de salida: verdadero si se ha encontrado el nodo, caso contrario falso
Precondición: las lista L no esté vacía
Poscondición: ninguna
Codificar en el lenguaje de programación establecido la definición de la clase Lista Simple.
class ListaSimple:
# Atributo de la Clase
top = None
def __init__(self):
# Inicialización del campo de información y de la referencia
self.dato = None
self.sig = None
def es_vacia(self):
if ListaSimple.top is None:
return True
else:
return False
def insertar_vacia(self, dato):
if self.es_vacia():
ListaSimple.top = ListaSimple()
ListaSimple.dato = dato
print("El nodo insertado es el primero")
else:
print("La lista ya contiene elementos")
def insertar_inicio(self, dato):
"""
Inserta el elemento en el inicio de la lista
"""
if not self.es_vacia():
tmp = ListaSimple()
tmp.dato = dato
tmp.sig = ListaSimple.top
ListaSimple.top = tmp
else:
print("No puede insertarse al final ... lista no contiene nodos")
def insertar_final(self, dato):
"""
Inserta el elemento al final de la lista
"""
if not self.es_vacia():
tmp = ListaSimple()
tmp.dato = dato
auxtop = ListaSimple.top
# Se recorre la lista
while auxtop.sig is not None:
auxtop = auxtop.sig
auxtop.sig = tmp
else:
print("No puede insertarse al final ... lista no contiene nodos")
def insertar_entre_nodos(self, refdato, dato):
# El campo refdato determina el nodo luego del cual debe insertarse
if not self.es_vacia():
tmp = ListaSimple()
tmp.dato = dato
auxtop = ListaSimple.top
# Se recorre la lista
while auxtop.dato is not dato:
auxtop = auxtop.sig
# Si se llega al nodo referencia
if auxtop.dato == refdato:
tmp.sig = auxtop.sig
tmp.sig = auxtop
else:
print("No puede insertarse al final ... lista no contiene nodos")
def presentar(self):
if self.es_vacia():
print("No existen nodos en la lista")
else:
auxtop = ListaSimple.top
while auxtop is not None:
print("[{0}]".format(auxtop.dato), end='->')
auxtop = auxtop.sig