Ejercicios Listas Enlazadas PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 9

MSC. Marco A. Adarme. E-mail: madarme@ufps.edu.

co
Ejercicios de Listas en Java

EJERCICIOS DE LISTAS SIMPLES, DOBLES Y CIRCULARES DOBLES

(TODOS LOS EJERCICIOS SE PUEDEN REALIZAR CON LISTAS-LISTAD O LISTACD, estas se


van a representar como: ListaX)

1. Dada una dos listas l1 y l2 con enteros generados aleatoriamenté, realice métodos sobre
la clase Prueba que permitan:
• Las listas contienen elementos repetidos
• Las listas No contienen elementos repetidos
• Eliminar de la lista l1 sus elementos repetidos.
• Determinar si son iguales, esto es que sus elementos están en el mismo orden.
• Unir l1 con l2 en L3.
• Unir l1 con l2 en L4 siendo L4 ordenada ascendentemente.

2. Realice los métodos del punto 1, en la clase ListaX (simples, dobles o circulares):
a. public booelan contieneElemRepetidos()
b. public void eliminarElemRepetidos()
c. public void equals(ListaX<T> L2)
d. public void unir(ListaX<T> L2)
e. public void unir_Ordenado(ListaX<Y> L2).

3. Realizar el punto a nivel del TDA ListaS<T> y ListaD<T>.

4. La biblioteca “NADIE LEE NADA” desea sistematizar su proceso de inventario de libros. El sistema tendrá
las siguientes opciones:
• Registrar un libro nuevo.
• Borrar un Libro(s) dado su autor , dado su título o dado un año.
• Buscar un libro por :
• Título
• Nombre de autor
• Tema
• Imprimir listados :
• Por temas
• Por autor
• Por fecha de adquisición del libro(dado un mes, dado un año o dado un mes , año
y día).

Los libros se encuentran almacenados en una Lista L1. Hacer uso de los métodos
equals() y compareTo().
Class Libro
{
private String autor, tema, titulo;
private int agno, dia, mes; // Fecha de adquisición
}
MSC. Marco A. Adarme. E-mail: madarme@ufps.edu.co
Ejercicios de Listas en Java

Nota los temas de los libros pueden ser: 1. Ficción, 2. Terror y 3.Suspenso.

5. Dada Tres listas L1 , L2 y L3 con enteros generados aleatoriamenté crear una nueva lista que
contenga la suma de los elementos de las tres listas uno a uno, es decir los tres primeros, los tres
segundos y así sucesivamente. Las listas no necesariamente son de la misma longitud. Hacer a nivel
de Iteradores.

6. Implemente Métodos sobre la clase ListaS<T> y ListaD<T> que permitan:


• Método addespuesdedos(int i, Object x) que permita Insertar un nuevo nodo dos posiciones
después de una posición(i) dada(validar si es posible tal operación).
• Método removedespuesdedos(int i, Object x)€que permita borrar el nodoque se encuentra
dos posiciones después de una posición(i) dada(validar si es posible tal operación).

7. El profesor de Estructura de Datos desea elaborar un previo donde cada estudiante tenga un ejercicio
diferente , para ello ha creado una lista L1(ordenada por códigos) con la información de los códigos de
los estudiantes(Objetos de tipo Long) y un vector V(vector de String) con los ejercicios a realizar. Se
desea crear una Lista “R” de objetos tipo EstudiantePrevio donde cada estudiante aparezca con una
pregunta asignada, Recuerde que cada estudiante deberá tener una pregunta diferente. La asignación de
los ejercicios se hace en forma aleatoria. V y L1 tienen la misma longitud.

Class EstudiantePrevio
{
private long codigo; private
String ejercicio;
}

8. Suponga que se tiene las siguientes instrucciones:

a. ListaS L1=new ListaS(); int a=4, b; b. ListaS L2=new ListaS(); int


b=(++a)+(++a); a1=3,c=4,b1=100; b1=(++a1)+(c--);
for( int n=b/2; n>0 ; --n ) L1.insertarAlInicio(n); for(int n=b1/2;n>0;--n)
L2.insertarAlInicio(n);

c. d. ListaS L4=new ListaS();


ListaS L3=new ListaS(); int a2=15; int a3=12;
for(Boolean sw=false; sw=!(a2%3==1);a2--) boolean sw;
if(!sw) L3.addInicio(a2); for(sw=true; a3>0; a3--, sw=(a3%3==1))
if(sw)
L4.addFin(a3);

Por medio de un esquema (dibujo, grafico,…) represente los nodos creados para cada caso.

9. La Empresa Promotora de Salud EL-BUEN-MOTILON realizo un estudio acerca de la incidencia de sus


afiliados a los servicios de urgencias; el estudio demostró que más del 80% de los usuarios no tenían
una dolencia de gravedad y podían ser atendidos por consulta externa. Tomando como referencia el
MSC. Marco A. Adarme. E-mail: madarme@ufps.edu.co
Ejercicios de Listas en Java

estudio; La gerencia decidió sancionar a los usuarios que hagan mal uso del servicio de urgencias; para tal
fin le pidió a su personal de sistemas(Un alumno de Estructura de Datos) que hiciera un programa en
lenguaje JAVA para dicha tarea. Suponga que el sistema inicialmente le genero dos(2) listados :
• Listado1: Usuarios afiliados a la EPS(solo cedulas). Información almacenada en una Lista Simple
Enlazada “L1”.
• Listado2: Usuarios (solo cedulas) que fueron atendidos en urgencias el mes pasado. Información
almacenada en una Lista Simple Enlazada “L2”.
Y tomando los listados anteriores Ud debe crear métodos que permitan:
 Método 1. Crear una Lista “L3” con los usuarios ordenados por incidencia en los servicios de
urgencias( es decir la lista L3 quedara ordenada por la cedula que más se repite o la que más ha ido
a urgencias hasta la que menos ha ido).
 Método 2. Crear una Lista “L4” con los usuarios que nunca han ido a los servicios de urgencias.

10. Tomando como referencia el ejercicio “7” , suponga que V contiene menos elementos que L1 ; cree la
Lista “R” donde los estudiantes que se encuentren en forma contigua no pueden tener el mismo
ejercicio. En este Punto los ejercicios pueden repetirse.

11. Dadas dos Listas enlazadas simples, en cuyos nodos se encuentra un digito binario (0 1) y la listas
representa dos numero binarios, elaborar métodos en la clase Prueba que permitan:
• Devolver la suma binaria en una lista simple enlazada.
• Devolver la resta binaria en una lista simple enlazada.
• Obtener el número decimal que representa la lista.

12. Dadas dos Listas(Dobles o simples) M y N, las cuales representan un polinomio, elaborar método que
devuelva en una lista L1 la Suma del polinomio M más N y en una Lista L2 la Multiplicación M*N. La lista
almacena elementos de Tipo Termino

Class Termino
{ private int exp;
private float base;
}
MSC. Marco A. Adarme. E-mail: madarme@ufps.edu.co
Ejercicios de Listas en Java

N= 4X9 + 2X7 – 5X3 + 7X M= -2X7


+ 3X6 – 4X
R= 4X9 + 3X6 –5X3 + 3X

13. A un famoso “mago” se le desea hacer un programa en JAVA que le ayude con sus trucos. El mago tiene
una bolsa llena de fichas numeradas de “0” hasta “n” y una persona del público saco una de esas fichas.
El programa debe averiguar el número que hace falta para completar las fichas. Suponga que las fichas
se encuentran en una Lista Doblemente enlazada (L1). Implemente métodos únicamente sobre la clase
“Prueba” que averigüe el número que saco la persona y vuelva a colocarlo en la bolsa(es decir
insertarlo al final de L1). Se puede dar el caso de que la persona halla engañado al mago y no halla
sacado ninguna ficha. Por ejemplo: Si n=5 y se saco una ficha :
Si L1 0, 4, 5, 3, 2 NULL Numero que hace falta “1”
ENTONCES QUEDARIA L1 0, 4, 5, 3, 2, 1 NULL

RECUERDE QUE NO EXISTEN FICHAS REPETIDAS Y ESTAS NO TIENEN NINGUN


ORDEN EN LA LISTA

LOS SIGUIENTES EJERCICIOS DEBE HACERLOS A


NIVEL DE LA LISTAS<T>,LISTAD<T> Y REALIZAR
EL MUNDO CON LAS CLASES RESPECTIVAS.
14. Dada tres listas L1, L2 y L3, elaborar un método que reemplace toda ocurrencia de L2 en L1 por la lista L3
( La listas almacenan objetos tipo Character).

L1 Estaba Maria Mareada en el Mar L2


Mar
L3 Ola
Resultado: L1 Estaba Olaia Olaeada en el Ola

(Realice el método de reemplazo sobre la clase Lista)


( public void reemplazar(ListaX<T> L1, ListaX<T> L2, ListaX<T> L3) ( X= ListaS, ListaD o
ListaCD)
MSC. Marco A. Adarme. E-mail: madarme@ufps.edu.co
Ejercicios de Listas en Java

15. Dada una lista Simple enlazada de caracteres, elaborar un método que elimine los elementos repetidos.
Los elementos repetidos ocupan posiciones sucesivas( La listas almacenan objetos tipo Carácter).

16. Suponga que una lista CON INFOS TIPO “MIVECTORUFPS.JAVA”:

public class MivectorUFPS


{
private int mivector[]; MivectorUFPS(int
canElementos)
{
this.mivector=new int[canElementos];
}
}

Realice las clases del mundo, de la GUI que permitan:

• Crear la Lista(con sus vectores, estos no necesariamente son del mismo tamaño).
• Obtener el mayor elemento del vector en una posición dada. El método recibirá la posición que ocupa el
nodo en la Lista.
• Añadir un número al final del vector en una posición dada. El método recibirá la posición que ocupa el
nodo en la Lista.
• Añadir un número al inicio del vector en una posición dada. El método recibirá la posición que ocupa el
nodo en la Lista.
• Obtener la suma de los elementos del vector en una posición dada. El método recibirá la posición que
ocupa el nodo en la Lista.
• Obtener la sumatoria de los elementos de todos los vectores de los nodos de la Lista.
• Obtener el elemento que más se repite en un vector de un nodo dado. El método recibirá la posición que
ocupa el nodo en la Lista.

Explicar en que clase se realizaron cada uno de los métodos.

17. Realice un programa en JAVA para llevar el control de notas de los estudiantes de Estructura de Datos. La
lista almacena objetos Tipo Estudiante:

public class Estudiante


{
private long cod_estudiante;
private String Nombre;
private Float previo1, previo2, previo3, examen;
}

Realice métodos sobre la clase Prueba(en el paquete GUI) que permitan:


MSC. Marco A. Adarme. E-mail: madarme@ufps.edu.co
Ejercicios de Listas en Java

• Insertar un estudiante con sus notas al sistema(recuerde que no pueden existir códigos repetidos).
• Borrar un estudiante dado su código.
• Obtener el promedio de las notas de un estudiante dado su código.
• Obtener el promedio general del grupo.
• Crear un vector(de objetos) con los estudiantes que reprobaron la materia.
• Crear un vector(de objetos) con los estudiantes que aprobaron la materia.

EJERCICIOS DE PREVIOS

• El banco "El centavo menos" desea sistematizar sus procesos de transacciones bancarias.
Actualmente no hay ningún sistema por lo que las personas dejan su recibo diligenciado y dinero y
al final del día el Banco hace las transacciones respectivas. EL banco ofrece tres transacciones para
sus clientes 1.consignación, 2. Retiros y 3. Transferencias(pasar dinero de una cuenta a otra). La
información de cada cuenta(cedula, N°. cuenta-ahorro , nombre y saldo actual) se almacena en una
lista doble enlazada L1(YA creada dinámicamente en memoria con objetos de tipo Cuenta) y las
transacciones(tipo-transacción que pueden ser 1 ,2 o 3 , N° cuenta destino y N° cuenta de origen
para el caso de transferencias y monto de la transacción) almacenados en un vector de "n"
posiciones R1(ya creados dinámicamente en memoria con objetos de tipo transacción). Realice un
programa en Java, que tome la lista y el arreglo de registros y actualice L1(consignación aumentaría
el saldo de la cuenta , retiro y transferencias disminuirá el saldo). Las transacciones que no se
puedan realizar por ejemplo por falta de fondos para un retiro y/o transferencias se debe generar
el mensaje de error respectivo (*** Fondos insuficientes para la Cuenta de Número XXXX en
operación YYYY***) donde YYYY es consignación, retiro o transferencia o si una cuenta no existe. El
programa debe:
• (Valor 1.0) Actualizar la ListaD<Cuenta> L1 tomando en cuenta
el arreglo de transacciones(el metodo devuelve el toString() de la L1 ya actualizado).
• (Valor 1.0) Borrar las cuentas de L1 que tengan fondos“0”.
• (Valor 1.0)Ordenar L1 por saldo actual (al final de las
transacciones).
Después de cada proceso se debe imprimir la Lista.
Recomendaciones:
• Las clases Cuenta y Transacción las puede encontrar en su carpeta de trabajo en la carpeta
Punto1.
• Imprima las cuentas y transacciones antes de comenzar a realizar el código. Estos métodos
ya se encuentran implementados.
• Ud puede añadir métodos a la clase Cuenta así como a la Clase Transacción si considera
necesario.
MSC. Marco A. Adarme. E-mail: madarme@ufps.edu.co
Ejercicios de Listas en Java

• Si la cuentaOrigen llega a ser “0” es por que el tipo de transacción es 1 o 2 y este solo
necesita es la cuenta destino para consignar o retirar.
• Suponga que en este banco Un cliente solo tiene una cuenta y estas son todas de ahorros.
• Los números de las cuentas se encuentran en desorden.
• Los métodos se deben realizar en la clase Banco.java. En la clase se especifica los métodos
que ud debe implementar aunque Ud puede utilizar todos los métodos auxiliares que
desee. NO PUEDE CAMBIAR LOS METODOS QUE YA SE ENCUENTRAN EN LA CLASE
Banco.JAVA.

La Lista de cuentas contiene la siguiente información:


NroCuenta:115,NombreCliente y Cedula:Cliente115-
8000215,SaldoCuenta:511500.0
NroCuenta:113,NombreCliente y Cedula:Cliente113-
8000213,SaldoCuenta:511300.0
NroCuenta:111,NombreCliente y Cedula:Cliente111-
8000211,SaldoCuenta:511100.0
NroCuenta:109,NombreCliente y Cedula:Cliente109-
8000209,SaldoCuenta:510900.0
NroCuenta:107,NombreCliente y Cedula:Cliente107-
8000207,SaldoCuenta:510700.0
NroCuenta:105,NombreCliente y Cedula:Cliente105-
8000205,SaldoCuenta:510500.0
NroCuenta:103,NombreCliente y Cedula:Cliente103-
8000203,SaldoCuenta:510300.0
NroCuenta:101,NombreCliente y Cedula:Cliente101-
8000201,SaldoCuenta:510100.0
NroCuenta:100,NombreCliente y Cedula:Cliente100-
8000200,SaldoCuenta:510000.0
NroCuenta:102,NombreCliente y Cedula:Cliente102-
8000202,SaldoCuenta:510200.0
NroCuenta:104,NombreCliente y Cedula:Cliente104-
8000204,SaldoCuenta:510400.0
NroCuenta:106,NombreCliente y Cedula:Cliente106-
8000206,SaldoCuenta:510600.0
NroCuenta:108,NombreCliente y Cedula:Cliente108-
8000208,SaldoCuenta:510800.0
NroCuenta:110,NombreCliente y Cedula:Cliente110-
8000210,SaldoCuenta:511000.0
NroCuenta:112,NombreCliente y Cedula:Cliente112-
8000212,SaldoCuenta:511200.0
NroCuenta:114,NombreCliente y Cedula:Cliente114-
8000214,SaldoCuenta:511400.0

El vector de Transacciones contiene:


TIPO CUENTAORIGEN CUENTADESTINO MONTO DESCRIPCCION
3 115 114 511500 Transferir fondos de la cuenta 115 a la
cuenta 114 el valor de $511500. La cuenta
115 quedaría en 0 y la cuenta 114 quedaría
en $1022900
MSC. Marco A. Adarme. E-mail: madarme@ufps.edu.co
Ejercicios de Listas en Java

1 0 112 400 Consigna $400 de la cuenta 112. La cuenta


112 queda en $511600.
2 0 115 100 Imprimir mensaje de “Error” no hay fondos.
1 0 103 1000 Consigna $1000 de la cuenta 103. La cuenta
103 queda con $511300.
3 106 115 510600 Transferir $510600 de la cuenta 106 a la
cuenta 115. La cuenta 115 queda con
$510600 y la cuenta 106 con “0”.
3 115 101 500000 Transferir $500000 de la cuenta 115 a la
cuenta 101. La cuenta 115 queda con
$10600 y la cuenta 101 queda con
$1010100.
2 0 180 400 Imprimir mensaje de Error la cuenta 180 No
existe en el Banco.
Al final del proceso (a) la impresión de la Lista Será:
NroCuenta:115,NombreCliente y Cedula:Cliente115-8000215,SaldoCuenta: 10600 NroCuenta:113,NombreCliente y
Cedula:Cliente113-8000213,SaldoCuenta:511300.0 NroCuenta:111,NombreCliente y Cedula:Cliente111-
8000211,SaldoCuenta:511100.0 NroCuenta:109,NombreCliente y Cedula:Cliente109-8000209,SaldoCuenta:510900.0
NroCuenta:107,NombreCliente y Cedula:Cliente107-8000207,SaldoCuenta:510700.0 NroCuenta:105,NombreCliente y
Cedula:Cliente105-8000205,SaldoCuenta:510500.0 NroCuenta:103,NombreCliente y Cedula:Cliente103-8000203,SaldoCuenta:
511300.0 NroCuenta:101,NombreCliente y Cedula:Cliente101-8000201,SaldoCuenta: 1010100.0 NroCuenta:100,NombreCliente y
Cedula:Cliente100-8000200,SaldoCuenta:510000.0 NroCuenta:102,NombreCliente y Cedula:Cliente102-
8000202,SaldoCuenta:510200.0 NroCuenta:104,NombreCliente y Cedula:Cliente104-8000204,SaldoCuenta:510400.0
NroCuenta:106,NombreCliente y Cedula:Cliente106-8000206,SaldoCuenta:0.0 ESTA CUENTA SE BORRA EN EL PROCESO B.
NroCuenta:108,NombreCliente y Cedula:Cliente108-8000208,SaldoCuenta:510800.0
NroCuenta:110,NombreCliente y Cedula:Cliente110-8000210,SaldoCuenta:511000.0
NroCuenta:112,NombreCliente y Cedula:Cliente112-8000212,SaldoCuenta: 511600.0
NroCuenta:114,NombreCliente y Cedula:Cliente114-8000214,SaldoCuenta: 1022900

Al final del Proceso (b) la impresión quedará:


NroCuenta:115,NombreCliente y Cedula:Cliente115-8000215,SaldoCuenta: 10600 NroCuenta:113,NombreCliente y
Cedula:Cliente113-8000213,SaldoCuenta:511300.0 NroCuenta:111,NombreCliente y Cedula:Cliente111-
8000211,SaldoCuenta:511100.0 NroCuenta:109,NombreCliente y Cedula:Cliente109-8000209,SaldoCuenta:510900.0
NroCuenta:107,NombreCliente y Cedula:Cliente107-8000207,SaldoCuenta:510700.0 NroCuenta:105,NombreCliente y
Cedula:Cliente105-8000205,SaldoCuenta:510500.0 NroCuenta:103,NombreCliente y Cedula:Cliente103-8000203,SaldoCuenta:
511300.0 NroCuenta:101,NombreCliente y Cedula:Cliente101-8000201,SaldoCuenta: 1010100.0 NroCuenta:100,NombreCliente y
Cedula:Cliente100-8000200,SaldoCuenta:510000.0 NroCuenta:102,NombreCliente y Cedula:Cliente102-
8000202,SaldoCuenta:510200.0 NroCuenta:104,NombreCliente y Cedula:Cliente104-8000204,SaldoCuenta:510400.0
NroCuenta:108,NombreCliente y Cedula:Cliente108-8000208,SaldoCuenta:510800.0 NroCuenta:110,NombreCliente y
Cedula:Cliente110-8000210,SaldoCuenta:511000.0 NroCuenta:112,NombreCliente y Cedula:Cliente112-8000212,SaldoCuenta:
511600.0 NroCuenta:114,NombreCliente y Cedula:Cliente114-8000214,SaldoCuenta: 1022900

• Realice métodos sobre la clase ListaS<T> que permitan:


• (Valor 1.0) concatList(int index. ListaS<T> l2) €Dada una ListaS<T> la
concatena con la lista Original según una posición dada(Ojo se
concatena después de la posición
MSC. Marco A. Adarme. E-mail: madarme@ufps.edu.co
Ejercicios de Listas en Java

“index”). Debe tener en cuenta que la ListaS<T> que se pasa como


parámetro queda vacía. No puede utilizar estructuras de datos adicionales.

Por ejemplo: Si L1=<3,4,5,6> y L2=<7,9,0> y L1.concatList(2, L2)€ L1


resultante€L1=<3,4,5, 7,9,0,6>.

• (Valor 1.0). ListaS<T> removeRango(int pos_inicio, int


pos_fin)€Remueve los nodos que se encuentren en la posición inicio
hasta la posición fin y los retorna en una ListaS<T>.

3. Realice un MÉTODO SOBRE LA CLASE LISTA, QUE, dadas dos Listas L1 y L2 que representan borre
toda incidencia de L2 en L1(this), se debe además imprimir la Lista Resultante L1 y las veces que
se encontró L2 en L1.

public int borrarIncidencia(ListaX<T>L2)

Ud no puede utilizar ningún método de clase String, todas las operaciones se deben hacer sobre la
Lista Simple. El proceso se puede realizar si L1.getSize( )
>= L2.getSize( ).

Por ejemplo:
Si las listas fueran de ListaS<Character>:

L1=A-->B-->A-->C-->D-->E-->A-->E-->F-->R-->A-->B-->C-->D-->A-->
El programa deberá imprimir:
L1=A-->B-->A-->C-->D-->E-->A-->E-->F-->R-->A-->B-->C-->D-->A--
>B-->A-->B-->F-->Null
L2 se encontró 4 veces y La lista L1 quedo:
L1=A-->C-->D-->E-->A-->E-->F-->R-->C-->D-->F-->Null

NOTA: CADA PROGRAMA DEBE TENER LOS PAQUETES GUI, MUNDO Y UTIL CON UNA CLASE DE
PRUEBA. SE DEBE TOMAR EN CUENTA TODAS LAS VALIDACIONES QUE ASEGUREN EL CORRECTO
FUNCIONAMIENTO DEL SOFTWARE.

También podría gustarte