Este documento presenta el código fuente para implementar una lista enlazada genérica en Java. Incluye las clases Nodo, MiListaEnlazada y la interfaz MiLista, con métodos para agregar, eliminar, obtener y modificar nodos. También incluye una clase Main que prueba los métodos implementados mediante la creación y manipulación de listas de cadenas.
1. UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
UNIVERSIDAD DEL PERÚ, DECANA DE AMÉRICA
FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMATICA
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
ASIGNATURA: ESTRUCUTRA DE DATOS
“Actividad 3 – Semana 1”
SECCIÓN: N° 01
DOCENTE: Javier Elmer Cabrera Díaz
SEMESTRE: Quinto
ESTUDIANTES: Jack Marlon Valqui Trujillo
LIMA – PERÚ 2022
“Año del Fortalecimiento de la Soberanía Nacional”
2. 2
CÓDIGO FUENTE
Clases Nodo
package semana2.tareas;
public class Nodo <T>{
T elemento;
Nodo<T> next;
public Nodo(T e){
elemento=e;
next = null;
}
}
Clases MiListaEnlazada
package semana2.tareas;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
public class MiListaEnlazada<T> implements MiLista<T>{
public Nodo<T> cabeza = null;
public Nodo<T> ultimo = null;
3. 3
public int longi = 0;
//MÉTODOS PROPIOS DE CLASE
//LISTO
public MiListaEnlazada(T[] e){
for (int i = 0; i < e.length; i++)
insertarInicio(e[i]);
}
//LISTO
public T getPrimero(){
if(cabeza!=null)
return this.cabeza.elemento;
return null;
}
//LISTO
public T getUltimo(){
if(ultimo!=null)
return this.ultimo.elemento;
return null;
}
//LISTO
public void insertarInicio(T e){
Nodo<T> nuevo = new Nodo(e);
nuevo.next = cabeza;
cabeza = nuevo;
longi++;
11. 11
//MÉTODOS DE LA INTERFAZ COLLECTION
@Override //LISTO
public boolean addAll(Collection<? extends T> c){
ArrayList<T> elemts = new ArrayList<>(c);
for (int i = 0; i <elemts.size(); i++) {
insertarFinal(elemts.get(i));
}
return true;
}
@Override
public void clear(){
while(cabeza !=null){
eliminarUltimo();
}
}
@Override//LISTO
public boolean contains(Object c){
boolean contiene = false;
if(cabeza!= null){
Nodo<T> puntero = cabeza;
while (puntero != null) {
if (puntero.elemento.equals(c)) {
12. 12
contiene = true;
return contiene;
}
puntero = puntero.next;
}
}
return contiene;
}
@Override//LISTO
public boolean containsAll(Collection<?> c){
int contador =0;
T valor;
if(cabeza!= null){
Nodo<T> puntero = cabeza;
ArrayList<T> comparador = (ArrayList<T>) c;
for (int i = 0; i < comparador.size(); i++) {
valor = comparador.get(i);
if(contains(valor))
contador++;
}
return comparador.size() == contador;
}
return false;
}
13. 13
@Override//LISTO
public boolean remove(Object o){
if(contains(o)){
T element = (T) o;
T eliminado;
int indice = indicealprimerbuscado(element)-1;
eliminado = elimina(indice);
System.out.println("Elemento eliminado: "+eliminado);
return true;
}
return false;
}
@Override//LISTO
public boolean removeAll(Collection<?> c){
ArrayList<T> elemt = (ArrayList) c;
boolean repetir = true;
for (int i = 0; i < elemt.size(); i++) {
while(repetir){
repetir = remove(elemt.get(i));
}
repetir = true;
}
14. 14
return true;
}
@Override//LISTO
public boolean retainAll(Collection<?> c){
ArrayList<T> elemt = (ArrayList) c;
ArrayList<T> eliminar = new ArrayList<>();
Nodo<T> puntero = cabeza;
boolean aEliminar = true;
T valor;
while (puntero != null) {
valor = puntero.elemento;
for (int i = 0; i < elemt.size(); i++) {
if(valor.equals(elemt.get(i))){
aEliminar = false;
break;
}
}
if(aEliminar)
eliminar.add(valor);
puntero = puntero.next;
aEliminar = true;
}
removeAll(eliminar);
15. 15
return true;
}
@Override//LISTO
public Object[] toArray(){
Object[] a = new Object[longi];
Nodo<T> puntero = cabeza;
for (int i = 0; i < longi ; i++) {
a[i] = puntero.elemento;
puntero = puntero.next;
}
return a;
}
@Override//LISTO
public <E> E[] toArray(E[] a){
Object[] alterno = toArray() ;
//Crea un nuevo arreglo del tiempo en tiempo de ejecución, pero con mi contenido:
if (a.length < longi)
return (E[]) Arrays.copyOf(alterno, longi, a.getClass());
System.arraycopy(alterno, 0, a, 0, longi);
if (a.length > longi)
a[longi] = null;
return a;
16. 16
}
//NO ESPECIFICADOS POR LE PROFESOR
@Override
public int size() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated
methods, choose Tools | Templates.
}
@Override
public Iterator<T> iterator() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated
methods, choose Tools | Templates.
}
}
}
Interface MiLista
package semana2.tareas;
import java.util.ArrayList;
import java.util.Collection;
public interface MiLista<E> extends Collection<E> {
//añadir un nuevo elemento a la lista dado el indice
17. 17
public void add(int indice, E e);
//devuelve el elemento del indice dado
public E get(int indice);
//devolver el indice del último elemento de la lista igual al buscado, sino devolver -1
public int indicealultimobuscado(E e);
//devolver el indice del primer elemento de la lista igual al buscado, sino devolver -1
public int indicealprimerbuscado(E e);
//elminar un elemento de una posición, devolver el elemento eliminado
public E elimina(int indice);
//Modifica el elemento en función al indice
public void set(int indice, E e);
//añadir al final
@Override
public default boolean add(E e){
add(size(), e);
return true;
}
18. 18
@Override
public default boolean isEmpty(){
return size()==0;
}
}
Clase Main
package semana2.tareas;
import java.util.ArrayList;
public class C_MiLista {
public static void main(String[] args) {
//DECLARACIÓN DE OBJETOS A UTILIZAR
String[] alumnos = {"Jack", "Jimmy", "Jheus", "Jean"};
MiListaEnlazada<String> list = new MiListaEnlazada<>(alumnos);
ArrayList<String> paises = new ArrayList<String>();
paises.add("Perú");
paises.add("Venezuela");
paises.add("Argentina");
paises.add("Brazil");
19. 19
ArrayList<String> capitales = new ArrayList<String>();
capitales.add("Lima");
capitales.add("Caracas");
capitales.add("Buenos Aires");
capitales.add("Brazilia");
ArrayList<String> personas = new ArrayList<String>();
personas.add("Jheus");
personas.add("Jack");
personas.add("Winni");
//COMPROBACIÓN DE LOS MÉTODOS DESCRITOS
//Mostranlo la lista inicial
System.out.println("LISTA INICIALIZADA");
list.mostrarLista();
//MÉTODOS getPrimero y getUltimo y su Longitud
System.out.println("nnVARIABLES DE LA CLASE MiListaEnlazada");
System.out.println(" PRIMERO: " + list.getPrimero());
System.out.println(" ULTIMO: " + list.getUltimo());
System.out.println(" LONGITUD: " + list.longi);
20. 20
//Eliminando el último elemento - MÉTODO eliminarUltimo()- y mostramos la lista actual
list.eliminarUltimo();
System.out.println("nLISTA ACTUALIZADA");
list.mostrarLista();
System.out.println("nnVARIABLES DE LA CLASE MiListaEnlazada ACTUALIZADOS");
System.out.println(" PRIMERO: " + list.getPrimero());
System.out.println(" ULTIMO: " + list.getUltimo());
System.out.println(" LONGITUD: " + list.longi);
//Obtenemos un elemento particualar de la lista - MÉTODO get()
System.out.println("nELEMENTOS PARTICULARES DE LA LISTA");
System.out.println(" Elmento 1: " + list.get(0));
System.out.println(" Elmento 2: " + list.get(1));
System.out.println(" Elmento 3: " + list.get(2));
//Anexando un elemento a la Lista a partir del indice - MÉTODO add()
list.add(2, "Winni");
list.add(0, "Winni");
System.out.println("nANEXANDO LOS NUEVOS ELEMENTOS");
list.mostrarLista();
//Buscando el indice un elemento a la Lista - MÉTODOS indicealultimobuscado() y
indicealprimerbuscado()
System.out.println("nnBUSCANDO EL ÍNDICE DEL PRIMER Y ÚLTIMO ELEMENTO");
System.out.println("Primer indice de 'Winni': " + list.indicealprimerbuscado("Winni"));
21. 21
System.out.println("Primer indice de 'Winni': " + list.indicealultimobuscado("Winni"));
//Eliminando elementos de la lista a partir de un indice - MÉTODO elimina()
System.out.println("nnELIMINANDO EL ELEMENTO DE LA POSICIÓN 4");
System.out.println("nValor elimindo: " + list.elimina(3));
list.mostrarLista();
//Cambiando los datos de un elemento de la lista a partir de un indice - MÉTODO set()
list.set(2, "Jack");
System.out.println("nnCAMBIANDO LOS DATOS DEL ELEMENTO 3");
list.mostrarLista();
//MÉTODO addAll()
System.out.println("nnANEXANDO LA LISTA DE PAISES");
list.addAll(paises);
list.mostrarLista();
//MÉTODO contains()
System.out.println("nnCOMPROBANDO QUE LA LISTA CONTENGA AL ELEMENTO
'Winni'");
if (list.contains("Winni"))
System.out.println("El nombre SÍ se encuentra");
else
System.out.println("El nombre NO se encuentra");
22. 22
//MÉTODO contains()
System.out.println("nCOMPROBANDO QUE LA LISTA CONTENGA A TODA LA LISTA
capitales'");
if (list.containsAll(capitales))
System.out.println("SÍ contiene todos los elementos");
else
System.out.println("NO contiene a todos los elementos");
//MÉTODO remove() e insertarFinal()
System.out.println("nnREMOVIENDO EL ELEMENTO 'Venezuela'");
list.remove("Venezuela");
System.out.println("INSERTANDO AL FINAL AL ELEMENTO 'Buenos Aires'");
list.insertarFinal("Buenos Aires");
System.out.println("INSERTANDO AL INICIO AL ELEMENTO 'Lima'");
list.insertarInicio("Lima");
System.out.println("nLISTA ACTUALIZADA");
list.mostrarLista();
//MÉTODO removeAll()
System.out.println("nnREMOVIENDO TODAS LAS CAPITALES");
list.removeAll(capitales);
System.out.println("LISTA ACTUALIZADA");
list.mostrarLista();
//MÉTODO retainsAll()
23. 23
System.out.println("nnRETENIENDO SOLO A LOS ELEMENTOS DE LA LISTA 'personas'");
list.retainAll(personas);
System.out.println("LISTA ACTUALIZADA");
list.mostrarLista();
//MÉTODO toArray()
Object[] ciudades = list.toArray();
System.out.println("nnMOSTRANDO LOS ELEMENTOS COMO UN ARRAY DE OBJETOS
DE LA CLASE Object");
for (int i = 0; i < ciudades.length; i++) {
System.out.print(ciudades[i].toString() + " ");
}
//MÉTODO toArray(T[] a)
String[] nombrePrueba = list.toArray(new String[8]);
System.out.println("nnMOSTRANDO LOS ELEMENTOS COMO UN ARRAY DE OBJETOS
DE LA CLASE GENÉRICA");
for (int i = 0; i < nombrePrueba.length; i++) {
System.out.print(nombrePrueba[i] + " ");
}
System.out.println("nnANEXANDO LOS ELEMENTOS 'Cordoba'-al inicio y al final");
list.insertarInicio("Cordoba");
list.insertarFinal("Cordoba");
list.mostrarLista();
24. 24
//MÉTODO eleminarPrimero() y eliminarUltimo()
System.out.println("nnREMOVIENDO EL PRIMER Y ÚLTIMO ELEMENTO");
list.eliminarPrimero();
list.eliminarUltimo();
list.mostrarLista();
//MÉTODO clear()
System.out.println("nnUTILIZANDO EL MÉTODO CLEAR PARA QUITAR TODOS LOS
ELEMENTOS DE LA LISTA");
System.out.println("n");
list.clear();
list.mostrarLista();
}
}