0% encontró este documento útil (0 votos)
3 vistas9 páginas

Implementación de Lista Enlazada Circular en Python y Java

El documento presenta la implementación de una lista enlazada circular en Python y Java, incluyendo métodos para insertar, eliminar, buscar y mostrar nodos, así como para rotar la lista. Se proporciona un menú de operaciones para interactuar con la lista en ambas implementaciones. La estructura de datos permite una gestión eficiente de nodos en un formato circular.

Cargado por

thepigomg
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas9 páginas

Implementación de Lista Enlazada Circular en Python y Java

El documento presenta la implementación de una lista enlazada circular en Python y Java, incluyendo métodos para insertar, eliminar, buscar y mostrar nodos, así como para rotar la lista. Se proporciona un menú de operaciones para interactuar con la lista en ambas implementaciones. La estructura de datos permite una gestión eficiente de nodos en un formato circular.

Cargado por

thepigomg
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

LISTA ENLAZADA CIRCULARES

PYTHON
class Nodo:
def __init__(self, dato):
[Link] = dato
[Link] = None

class ListaEnlazadaCircular:
def __init__(self):
[Link] = None
[Link]ño = 0

def esta_vacia(self):
"""Verifica si la lista está vacía"""
return [Link] is None

def insertar_inicio(self, dato):


"""Inserta un nodo al inicio de la lista"""
nuevo_nodo = Nodo(dato)
if self.esta_vacia():
nuevo_nodo.siguiente = nuevo_nodo # Apunta a sí mismo
[Link] = nuevo_nodo
else:
# Encontrar el último nodo
ultimo = [Link]
while [Link] != [Link]:
ultimo = [Link]
nuevo_nodo.siguiente = [Link]
[Link] = nuevo_nodo
[Link] = nuevo_nodo
[Link]ño += 1

def insertar_final(self, dato):


"""Inserta un nodo al final de la lista"""
nuevo_nodo = Nodo(dato)
if self.esta_vacia():
nuevo_nodo.siguiente = nuevo_nodo
[Link] = nuevo_nodo
else:
ultimo = [Link]
while [Link] != [Link]:
ultimo = [Link]
nuevo_nodo.siguiente = [Link]
[Link] = nuevo_nodo
[Link]ño += 1

def eliminar(self, dato):


"""Elimina la primera ocurrencia del dato"""
if self.esta_vacia():
return False

actual = [Link]
anterior = None

# Caso especial: lista con un solo nodo


if [Link]ño == 1 and [Link] == dato:
[Link] = None
[Link]ño -= 1
return True

# Buscar el nodo a eliminar


while True:
if [Link] == dato:
# Caso: eliminar cabeza
if actual == [Link]:
# Encontrar el último nodo
ultimo = [Link]
while [Link] != [Link]:
ultimo = [Link]
[Link] = [Link]
[Link] = [Link]
else:
[Link] = [Link]
[Link]ño -= 1
return True

anterior = actual
actual = [Link]

# Si hemos dado una vuelta completa


if actual == [Link]:
break
return False

def buscar(self, dato):


"""Busca un dato en la lista"""
if self.esta_vacia():
return False
actual = [Link]
while True:
if [Link] == dato:
return True
actual = [Link]
if actual == [Link]:
break
return False

def mostrar(self):
"""Muestra todos los elementos de la lista"""
if self.esta_vacia():
print("Lista vacía")
return
elementos = []
actual = [Link]
while True:
[Link](str([Link]))
actual = [Link]
if actual == [Link]:
break
print(" -> ".join(elementos) + " → (cabeza)")

def obtener_tamaño(self):
"""Retorna el tamaño de la lista"""
return [Link]ño

def rotar(self, posiciones=1):


"""Rota la lista n posiciones hacia la derecha"""
if self.esta_vacia() or [Link]ño <= 1:
return
posiciones = posiciones % [Link]ño
for _ in range(posiciones):
[Link] = [Link]

if __name__ == "__main__":
lista = ListaEnlazadaCircular()
while True:
print("\nMENÚ DE OPERACIONES")
print("1. Anexar nodo al inicio")
print("2. Anexar nodo al final")
print("3. Borrar nodo")
print("4. Mostrar lista")
print("5. Mostrar tamaño de la lista")
print("6. Buscar elemento")
print("7. Rotar n lugares")
print("8. Salir")
eleccion = input("Digite el número al cual quiere acceder: ")

if eleccion == "1":
dato = input("Ingrese el valor a insertar al inicio: ")
lista.insertar_inicio(dato)
elif eleccion == "2":
dato = input("Ingrese el valor a insertar al final: ")
lista.insertar_final(dato)
elif eleccion == "3":
dato = input("Ingrese el valor a borrar: ")
if [Link](dato):
print("Nodo eliminado.")
else:
print("Nodo no encontrado.")
elif eleccion == "4":
[Link]()
elif eleccion == "5":
print(f"Tamaño de la lista: {lista.obtener_tamaño()}")
elif eleccion == "6":
dato = input("Ingrese el valor a buscar: ")
print("Encontrado" if [Link](dato) else "No encontrado")
elif eleccion == "7":
n = int(input("¿Cuántas posiciones desea rotar? "))
[Link](n)
print("Lista rotada.")
[Link]()
elif eleccion == "8":
print("Saliendo del programa...")
break
else:
print("Opción no válida. Intente de nuevo.")

JAVA
import [Link];

class Nodo {
int dato;
Nodo siguiente;
public Nodo(int dato) {
[Link] = dato;
[Link] = null;
}
}
class ListaEnlazadaCircular {
private Nodo cabeza;
private int tamaño;

public ListaEnlazadaCircular() {
[Link] = null;
[Link]ño = 0;
}

public boolean estaVacia() {


return cabeza == null;
}

public void insertarInicio(int dato) {


Nodo nuevoNodo = new Nodo(dato);
if (estaVacia()) {
[Link] = nuevoNodo;
cabeza = nuevoNodo;
} else {
Nodo ultimo = encontrarUltimo();
[Link] = cabeza;
[Link] = nuevoNodo;
cabeza = nuevoNodo;
}
tamaño++;
}

public void insertarFinal(int dato) {


Nodo nuevoNodo = new Nodo(dato);
if (estaVacia()) {
[Link] = nuevoNodo;
cabeza = nuevoNodo;
} else {
Nodo ultimo = encontrarUltimo();
[Link] = cabeza;
[Link] = nuevoNodo;
}
tamaño++;
}

private Nodo encontrarUltimo() {


if (estaVacia()) return null;
Nodo actual = cabeza;
while ([Link] != cabeza) {
actual = [Link];
}
return actual;
}

public boolean eliminar(int dato) {


if (estaVacia()) return false;
Nodo actual = cabeza;
Nodo anterior = null;

if (tamaño == 1 && [Link] == dato) {


cabeza = null;
tamaño--;
return true;
}

do {
if ([Link] == dato) {
if (actual == cabeza) {
Nodo ultimo = encontrarUltimo();
cabeza = [Link];
[Link] = cabeza;
} else {
[Link] = [Link];
}
tamaño--;
return true;
}
anterior = actual;
actual = [Link];
} while (actual != cabeza);

return false;
}

public boolean buscar(int dato) {


if (estaVacia()) return false;
Nodo actual = cabeza;
do {
if ([Link] == dato) return true;
actual = [Link];
} while (actual != cabeza);
return false;
}

public void mostrar() {


if (estaVacia()) {
[Link]("Lista vacía");
return;
}
StringBuilder elementos = new StringBuilder();
Nodo actual = cabeza;
do {
[Link]([Link]).append(" -> ");
actual = [Link];
} while (actual != cabeza);
[Link]("(cabeza)");
[Link]([Link]());
}

public int obtenerTamaño() {


return tamaño;
}

public void rotar(int posiciones) {


if (estaVacia() || tamaño <= 1) return;
posiciones = posiciones % tamaño;
for (int i = 0; i < posiciones; i++) {
cabeza = [Link];
}
}

// Clase Nodo interna


static class Nodo {
int dato;
Nodo siguiente;

public Nodo(int dato) {


[Link] = dato;
[Link] = null;
}

@Override
public String toString() {
return [Link](dato);
}
}
}

// Clase principal para probar


public class Main {
public static void main(String[] args) {
ListaEnlazadaCircular lista = new ListaEnlazadaCircular();
Scanner sc = new Scanner([Link]);

while (true) {
[Link]("\nMENÚ DE OPERACIONES");
[Link]("1. Anexar nodo al inicio");
[Link]("2. Anexar nodo al final");
[Link]("3. Borrar nodo");
[Link]("4. Mostrar lista");
[Link]("5. Mostrar tamaño de la lista");
[Link]("6. Buscar elemento");
[Link]("7. Rotar n lugares");
[Link]("8. Salir");

[Link]("Digite el número al cual quiere acceder: ");


int eleccion = [Link]();

if (eleccion == 1) {
[Link]("Ingrese el valor a insertar al inicio: ");
int dato = [Link]();
[Link](dato);
[Link]("Nodo insertado al inicio.");
}
else if (eleccion == 2) {
[Link]("Ingrese el valor a insertar al final: ");
int dato = [Link]();
[Link](dato);
[Link]("Nodo insertado al final.");
}
else if (eleccion == 3) {
[Link]("Ingrese el valor a borrar: ");
int dato = [Link]();
boolean eliminado = [Link](dato);
if (eliminado)
[Link]("Nodo eliminado.");
else
[Link]("El valor no existe en la lista.");
}
else if (eleccion == 4) {
[Link]();
}
else if (eleccion == 5) {
[Link]("Tamaño de la lista: " + [Link]ño());
}
else if (eleccion == 6) {
[Link]("Ingrese el valor a buscar: ");
int dato = [Link]();
if ([Link](dato))
[Link]("El valor SÍ existe en la lista.");
else
[Link]("El valor NO existe en la lista.");
}
else if (eleccion == 7) {
[Link]("Ingrese el número de posiciones a rotar: ");
int dato = [Link]();
[Link](dato);
[Link]("Lista rotada.");
[Link]();

}
else if (eleccion == 8) {
[Link]("Saliendo del programa...");
break;
}
else {
[Link]("Opción no válida. Intente de nuevo.");
}
}
[Link]();

}
}

También podría gustarte