UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS AÑO DEL
BICENTENARIO DEL PERÚ: 200 AÑOS DE INDEPENDENCIA
E.P. INGENIERÍA DE SISTEMAS
ESTRUCTURA DE DATOS
DOCENTE: Javier Elmer Cabrera Diaz
Actividad: En base al código utilizado para el quiz1 de semana 3
. implementar array list
Estudiante:
Gonzales Camarena, Dylan Bruno
LIMA- PERÚ
2022
//CLASE Array List
package SolucionFISI0402;
import [Link];
public class MyArrayList<E> extends MyAbstractList<E> {
private Node<E> head, tail;
public MyArrayList() {
}
public MyArrayList(E[] objects) {
super(objects);
}
/**
* Devuelve el primer elemento (head) elemento de la lista
*/
public E getFirst() {
if (size == 0) {
return null;
} else {
return [Link];
}
}
/**
* Devuelve el ultimo elemento de la lista
*/
public E getLast() {
if (size == 0) {
return null;
} else {
return [Link];
}
}
/**
* Añade un elemento al inicio de la lista
*/
public void addFirst(E e) {
Node<E> newNode = new Node<E>(e); // Crea un nuevo nodo
[Link] = head; // enlace al nuevo nodo con la cabeza
head = newNode; // Cabeza apunta al nuevo nodo
size++; // incremento del tamño
if (tail == null) // el nuevo nodo es el único en la listaa
{
tail = head;
}
}
/**
* Añade un elemento al final de la lista
*/
public void addLast(E e) {
Node<E> newNode = new Node<E>(e); // Crea un nuevo nodo para el
elemento e
if (tail == null) {
head = tail = newNode; // el nuevo nodo es el único en la listaa
} else {
[Link] = newNode; // enlace del nuevo nodo con el nodo último
tail = [Link]; // tail apunta tail al último nodo
}
size++; // incremento del tamaño
}
@Override
/**
* Añade un nuevo elemento en el indice espeficado in la lista el indice de
* la cabeza - head es 0
*/
public void add(int index, E e) {
if (index == 0) {
addFirst(e);
} else if (index >= size) {
addLast(e);
} else {
Node<E> current = head;
for (int i = 1; i < index; i++) {
current = [Link];
}
Node<E> temp = [Link];
[Link] = new Node<E>(e);
([Link]).next = temp;
size++;
}
}
/**
* Elimina en nodo head node y devuelve el objeto que contenido en el nodo
* removido.
*/
public E removeFirst() {
if (size == 0) {
return null;
} else {
Node<E> temp = head;
head = [Link];
size--;
if (head == null) {
tail = null;
}
return [Link];
}
}
/**
* Elimina el ultimo nodo y return el objeto que contenido en el nodo
* removido.
*/
public E removeLast() {
if (size == 0) {
return null;
} else if (size == 1) {
Node<E> temp = head;
head = tail = null;
size = 0;
return [Link];
} else {
Node<E> current = head;
for (int i = 0; i < size - 2; i++) {
current = [Link];
}
Node<E> temp = tail;
tail = current;
[Link] = null;
size--;
return [Link];
}
}
@Override
/**
* Elimina el elemento de la posicioón especificada en la lista . Devuelve
* el elemento que fue eliminada de la lista.
*/
public E remove(int index) {
if (index < 0 || index >= size) {
return null;
} else if (index == 0) {
return removeFirst();
} else if (index == size - 1) {
return removeLast();
} else {
Node<E> previous = head;
for (int i = 1; i < index; i++) {
previous = [Link];
}
Node<E> current = [Link];
[Link] = [Link];
size--;
return [Link];
}
}
@Override
/**
* Override toString() para devolver los elementos de la lista
*/
public String toString() {
StringBuilder result = new StringBuilder("[");
Node<E> current = head;
for (int i = 0; i < size; i++) {
[Link]([Link]);
current = [Link];
if (current != null) {
[Link](", "); // Separa dos elementos con coma
} else {
[Link]("]"); // Inserta ] en el string
}
}
return [Link]();
}
@Override
/**
* Limpia la lista
*/
public void clear() {
size = 0;
head = tail = null;
}
@Override
/**
* DEvuelve true si la lista contiene el elemento e
*/
public boolean contains(E e) {
Node<E> current = head;
for (int i = 0; i < size; i++, current = [Link]) {
if ([Link](e)) {
return true;
}
}
return false;
}
@Override
/**
* Devuelve que se especifica en el índice
*/
public E get(int index) {
checkIndex(index);
if (index == 0) {
return getFirst();
} else if (index == size - 1) {
return getLast();
} else {
Node<E> current = head;
for (int i = 0; i < index; i++) {
current = [Link];
}
return [Link];
}
}
@Override
/**
* devuelve el índice del elemento que coincide con e Devuelve -1 sino
* coincide.
*/
public int indexOf(E e) {
if (getFirst().equals(e)) {
return 0;
} else if (getLast().equals(e)) {
return size - 1;
}
Node<E> current = [Link];
for (int i = 1; i < size - 1; i++, current = [Link]) {
if ([Link](e)) {
return i;
}
}
return -1;
}
@Override
/**
* devuelve el indice del ultimo elemento de la lista que coincide con e
* Devuelve -1 sino coincide.
*/
public int lastIndexOf(E e) {
Node<E> current = head;
int lastIndex = -1;
for (int i = 0; i < size; i++, current = [Link]) {
if ([Link](e)) {
lastIndex = i;
}
}
return lastIndex;
}
@Override
/**
* reemplaza el elemento de la posición especificada con el elemento
* especificado.
*/
public E set(int index, E e) {
checkIndex(index);
Node<E> current = head;
for (int i = 0; i < index; i++, current = [Link]) {
}
E temp = [Link];
[Link] = e;
return temp;
}
@Override
/**
* Override iterator() definido en Iterable
*/
public [Link]<E> iterator() {
return new LinkedListIterator();
}
private void checkIndex(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " +
size);
}
}
private class LinkedListIterator implements [Link]<E> {
private Node<E> current = head; // indice actual
@Override
public boolean hasNext() {
return (current != null);
}
@Override
public E next() {
E e = [Link];
current = [Link];
return e;
}
@Override
public void remove() {
}
}
private static class Node<E> {
E element;
Node<E> next;
public Node(E element) {
[Link] = element;
}
}
}
//CLASE PRINCIPAL
package SolucionFISI0402;
public class SolucionFISI0402 {
public static void main(String[] args) {
String[] array1 = {"Gonzales", "Quispe", "Anchahua", "Comena", "Ugarte"};
MyArrayList<String> list = new MyArrayList<>(array1);
[Link]([Link]("Gonzales"));
[Link]([Link]("Anchahua"));
[Link]([Link](3));
[Link]([Link]("Gonzales"));
[Link]([Link]("Manrique"));
[Link]([Link]("Ugarte"));
[Link]([Link]("Quispe"));
[Link]([Link]("Quispe"));
[Link]([Link](0, "Bardon"));
[Link](list);
}
}