Documentos de Académico
Documentos de Profesional
Documentos de Cultura
“Práctica de listas”
Programación II
Código fuente:
Clase Persona:
package ColaParaCine;
this.edad=edad;
return edad;
this.edad = edad;
}
Clase Main (principal):
package ColaParaCine;
import cola.ColaDinamica;
//Constantes
rellenarCola(colaCine);
double cantidadRecaudada = 0;
Persona p;
while (!colaCine.isEmpty()){
p = colaCine.dequeue();
if(p.getEdad()<=5 && p.getEdad()<=10){
cantidadRecaudada+=ENTRADA_5_10_ANIOS;
cantidadRecaudada+=ENTRADA_11_17_ANIOS;
}else{
cantidadRecaudada+=ENTRADA_18_ANIOS;
Persona p;
int edad;
p = new Persona(edad);
System.out.println("Se ha generado una persona con
"+p.getEdad()+"años");
cola.enqueue(p);
Clase Metodos:
package ColaParaCine;
return num;
}
public static double generaNumeroRealAleatorio(double minimo, double maximo)
{
return num;
Clase ColaDinamica:
package cola;
//Atributos
public ColaDinamica() {
primero = null;
ultimo = null;
tamanio = 0;
return tamanio;
public T primero() {
if (isEmpty()) {
return null;
return primero.getElemento();
public T dequeue() {
if (isEmpty()) {
return null;
T elemento = primero.getElemento();
primero = null;
primero = aux;
tamanio--;
if (isEmpty()) {
ultimo = null;
return elemento;
if (isEmpty()) {
primero = aux;
ultimo = aux;
} else {
if (size() == 1) {
primero.setSiguiente(aux);
} else {
ultimo.setSiguiente(aux);
ultimo = aux;
tamanio++;
return aux.getElemento();
if (isEmpty()) {
} else {
cadena += aux;
aux = aux.getSiguiente();
return cadena;
Clase Nodo:
package cola;
//Atributos
private T elemento;
//Contructor
public Nodo(T elemento, Nodo<T> siguiente){
this.elemento = elemento;
this.siguiente = siguiente;
//Metodos
public T getElemento() {
return elemento;
this.elemento = elemento;
return siguiente;
this.siguiente = siguiente;
@Override
public String toString() {
return elemento+"\n";
Ejecución:
Zip en Drive:
https://drive.google.com/file/d/1G5ORQ3q5gnhnhMI8C4hlNlR_FbTSSGYb/view?u
sp=sharing
2) Realiza el ejercicio anterior pero el lugar de usar una lista enlazada, usar la
clase ArrayList. Usa un iterador para recorrer el ArrayList. Usa la misma clase
Persona del ejercicio anterior.
Código fuente:
Clase Persona:
package ColaParaCineArrayList;
this.edad=edad;
return edad;
this.edad = edad;
}
Clase Main (principal):
package ColaParaCineArrayList;
import java.util.ArrayList;
import java.util.Iterator;
generarCola(cola);
double recaudacion;
double recaudacionTotal=0;
Persona espectadorActual;
int edadActual;
//Creamos el iterator
Iterator<Persona> it=cola.iterator();
//Recorremos la cola
while(it.hasNext()){
espectadorActual=it.next();
edadActual=espectadorActual.getEdad();
//Comprobamosla edad
recaudacion=2.5;
}else{
recaudacion=3.5;
recaudacionTotal+=recaudacion;
//Mostramos el resultado
int numeroPersonas=generaNumeroAleatorio(1,50);
for(int i=0;i<numeroPersonas;i++){
int num=(int)Math.floor(Math.random()*(minimo-(maximo+1))+(maximo+1));
return num;
}
Ejecución:
Zip en Drive:
https://drive.google.com/file/d/10nCoAx2R9zILrN8Je9kLDFChJ3-
g0WkG/view?usp=sharing
3) Un supermercado nos pide que hagamos una pequeña aplicación que
almacene los productos pasados por el escáner.
La aplicación debe almacenar Productos (clase), cada producto al crearse
contiene una cantidad, un precio (estos dos generados aleatoriamente). El
nombre del producto será básico (producto1, producto2, producto3, etc.).
Calcular el precio total de una lista de entre 1 y 8 productos (aleatorio).
Mostrar un ticket con todo lo vendido y el precio final como se hacen en los
supermercados.
Código fuente:
Clase Producto:
package SuperMercado;
import java.text.DecimalFormat;
this.cantidad=cantidad;
this.precio=precio;
return cantidad;
}
return precio;
package SuperMercado;
double precioTotal=0;
Producto productoActual;
for(int i=0;!productos.estaVacia();i++){
productoActual=productos.devolverYBorrarPrimero();
precioTotal+=productoActual.precioFinal();
ticket+="Producto"+(i+1)+"\t"+productoActual.getCantidad()+
"\t"+productoActual.getPrecio()+
"\t"+productoActual.precioFinal()+"\n";
ticket+="Precio final\t\t\t"+precioTotal;
System.out.println(ticket);
int cantidad;
double precio;
for(int i=0;i<numeroPersonas;i++){
cantidad=Metodos.generaNumeroAleatorio(1,10);;
precio=Metodos.generaNumeroRealAleatorio(0.05, 50);
Clase Metodos:
package SuperMercado;
return num;
Clase ListaEnlazada:
package SuperMercado;
//Atributos
public ListaEnlazada(){
listaVacia();
}
private void listaVacia(){
primero = null;
if (!estaVacia()){
nuevo.setSiguiente(primero);
primero=nuevo;
Nodo<T> rec_aux;
if (estaVacia()) {
insertarPrimero(t);
}else {
rec_aux = primero;
while(rec_aux.getSiguiente() != null){
rec_aux=rec_aux.getSiguiente();
rec_aux.setSiguiente(aux);
Nodo<T> aux;
if (!estaVacia()){
aux=primero;
primero = primero.getSiguiente();
aux=null;
}
}
Nodo<T> aux=primero;
if(aux.getSiguiente()==null)
listaVacia();
if(!estaVacia()) {
aux=primero;
while(aux.getSiguiente().getSiguiente() != null){
aux=aux.getSiguiente();
aux.setSiguiente(null);
public T devolverUltimo(){
T elemen = null;
Nodo<T> aux;
if (!estaVacia()){
aux = primero;
while(aux.getSiguiente() != null){
aux = aux.getSiguiente();
elemen = aux.getDato();
return elemen;
public T devolverPrimero(){
T elemen = null;
if (!estaVacia()){
elemen = primero.getDato();
return elemen;
Nodo<T> aux;
int numElementos=0;
aux = primero;
while(aux != null){
numElementos++;
aux = aux.getSiguiente();
return numElementos;
Nodo<T> aux=primero;
int cont=0;
T dato=null;
if(pos<0 || pos>=cuantosElementos()){
}else{
while(aux!=null){
if (pos == cont){
dato=aux.getDato();
aux=aux.getSiguiente();
cont++;
}
return dato;
Nodo<T> aux=primero;
int cont=0;
if(pos<0 || pos>=cuantosElementos()){
}else{
while(aux!=null){
if (pos == cont){
return aux;
aux=aux.getSiguiente();
cont++;
}
}
return aux;
Nodo<T> aux=primero;
Nodo<T> auxDato=null;
Nodo<T> anterior=primero;
int contador=0;
if(pos<0 || pos>cuantosElementos()){
}else{
if(pos==0){
insertarPrimero(dato);
}else if(pos==cuantosElementos()){
insertarUltimo(dato);
}else{
while(aux!=null){
if (pos == contador){
anterior.setSiguiente(auxDato);
anterior=aux;
contador++;
aux=aux.getSiguiente();
Nodo<T> aux=primero;
int cont=0;
if(pos<0 || pos>=cuantosElementos()){
}else{
while(aux!=null){
if (pos == cont){
aux.setDato(dato);
cont++;
aux=aux.getSiguiente();
Nodo<T> aux=primero;
Nodo<T> anterior=null;
int contador=0;
if(pos<0 || pos>=cuantosElementos()){
}else{
while(aux!=null){
if (pos == contador){
if (anterior==null){
primero = primero.getSiguiente();
}else {
anterior.setSiguiente(aux.getSiguiente());
aux=null;
}else{
anterior=aux;
aux=aux.getSiguiente();
contador++;
public T devolverYBorrarPrimero(){
T dato=devolverPrimero();
quitarPrimero();
return dato;
Nodo<T> aux=primero;
if (estaVacia()){
return -1;
}else{
int contador=0;
boolean encontrado=false;
if(t.equals(aux.getDato())){
encontrado=true;
}else{
contador++;
aux=aux.getSiguiente();
if(encontrado){
return contador;
}else{
return -1;
if (estaVacia()){
return -1;
}else{
int contador=pos;
boolean encontrado=false;
aux=devolverNodo(pos);
if(t.equals(aux.getDato())){
encontrado=true;
}else{
contador++;
aux=aux.getSiguiente();
if(encontrado){
return contador;
}else{
return -1;
}
}
boolean existe=false;
Nodo<T> aux=primero;
if(aux.getDato().equals(t)){
existe=true;
aux=aux.getSiguiente();
return existe;
System.out.println("Contenido de la lista");
System.out.println("---------------------");
Nodo<T> aux=primero;
while(aux!=null){
System.out.println(aux.getDato());
aux=aux.getSiguiente();
@Override
String contenido="";
Nodo<T> aux=primero;
while(aux!=null){
contenido=aux.getDato()+"\n";
aux=aux.getSiguiente();
return contenido;
}
}
Clase Nodos:
package SuperMercado;
private T dato;
public Nodo(){
siguiente=null;
siguiente=null;
dato = p;
this.siguiente=siguiente;
dato = t;
}
public T getDato() {
return dato;
this.dato = dato;
return siguiente;
this.siguiente = siguiente;
}
Ejecución:
Zip en Drive:
https://drive.google.com/file/d/1BUOQpys0AoQceFk3eVvevdAUoP_sdD0e/view?u
sp=sharing
4) Realiza el ejercicio anterior pero el lugar de usar una lista enlazada, usar la
clase ArrayList. Usa un iterador para recorrer el ArrayList.
Código fuente:
Clase Producto:
package SuperMercadoArrayList;
import java.text.DecimalFormat;
this.cantidad=cantidad;
this.precio=precio;
return cantidad;
package SuperMercadoArrayList;
import java.util.*;
import java.util.Iterator;
generarProductos(productos);
String ticket=" Cantidad Precio Total\n";
double precioTotal=0;
Producto productoActual;
Iterator<Producto> it=productos.iterator();
for(int i=0;it.hasNext();i++){
productoActual= it.next();
precioTotal+=productoActual.precioFinal();
ticket+="Producto"+(i+1)+"\t"+productoActual.getCantidad()
+"\t"+productoActual.getPrecio()
+"\t"+productoActual.precioFinal()+"\n";
ticket+="Precio final\t\t\t"+precioTotal;
System.out.println(ticket);
int cantidad;
double precio;
for(int i=0;i<numeroPersonas;i++){
cantidad=Metodos.generaNumeroAleatorio(1,10);
precio=Metodos.generaNumeroRealAleatorio(0.05, 50);
Clase Métodos:
package SuperMercadoArrayList;
int num=(int)Math.floor(Math.random()*(minimo-(maximo+1))+(maximo+1));
return num;
}
public static double generaNumeroRealAleatorio(double minimo, double
maximo){
double num=Math.rint(Math.floor(Math.random()*(minimo-
((maximo*100)+1))+((maximo*100)+1)))/100;
return num;
Ejecución:
Zip en Drive:
https://drive.google.com/file/d/17eQ4lk__EW7qEmM6TRBOI--
GYTRe0C6R/view?usp=sharing
5) Un amigo funcionario nos pide que le hagamos un informe para sus informes.
Debemos gestionar informes que están formados de un código numérico y
una tarea que pueden ser ADMINISTRATIVO, EMPRESARIAL y
PERSONAL. Debe comprobarse que la tarea es alguna de estas.
Nuestro amigo quiere que seamos capaz de agregar y eliminar informes en
forma de pila (el último en entrar es el primero en salir). Agrega 10 informes
y muestra su contenido, elimina todo el contenido y agrega de nuevo 5
informes.
Código fuente:
Clase InformeAEP:
package Informe;
@Override
public String toString(){
return "El informe con codigo "+codigo+" tiene la tarea de "+tarea;
}
}
package Informe;
informes.insertarUltimo(new InformeAEP(i,
Metodos.generaNumeroAleatorio(0,2)));
}
while(!informes.estaVacia()){
aux.insertarUltimo(informes.devolverUltimo());
informes.quitarUltimo();
System.out.println(aux.devolverUltimo());
}
informes = aux;
while(!informes.estaVacia()){
informes.quitarUltimo();
}
System.out.println("\n***Informes eliminados***\n");
for(int i=1;i<=5;i++){
informes.insertarUltimo(new InformeAEP(i,
Metodos.generaNumeroAleatorio(0,2)));
}
while(!informes.estaVacia()){
aux.insertarUltimo(informes.devolverUltimo());
informes.quitarUltimo();
System.out.println(aux.devolverUltimo());
}
informes = aux;
aux=null;
}
}
Clase Metodos:
package Informe;
int num=(int)Math.floor(Math.random()*(minimo-(maximo+1))+(maximo+1));
return num;
}
}
Clase ListaEnlazada:
package Informe;
//Atributos
private Nodo<T> primero;
//Constructor
public ListaEnlazada(){
listaVacia();
}
if (!estaVacia()){
nuevo.setSiguiente(primero);
}
primero=nuevo;
if (estaVacia()) {
insertarPrimero(t);
}else {
rec_aux = primero;
while(rec_aux.getSiguiente() != null){
rec_aux=rec_aux.getSiguiente();
}
rec_aux.setSiguiente(aux);
}
}
aux.setSiguiente(null);
}
public T devolverUltimo(){
T elemen = null;
Nodo<T> aux;
if (!estaVacia()){
aux = primero;
while(aux.getSiguiente() != null){
aux = aux.getSiguiente();
}
elemen = aux.getDato();
}
return elemen;
}
public T devolverPrimero(){
T elemen = null;
if (!estaVacia()){
elemen = primero.getDato();
}
return elemen;
}
while(aux != null){
numElementos++;
aux = aux.getSiguiente();
}
return numElementos;
if(pos<0 || pos>=cuantosElementos()){
System.out.println("La posicion insertada no es correcta");
}else{
while(aux!=null){
if (pos == cont){
dato=aux.getDato();
}
aux=aux.getSiguiente();
cont++;
}
}
return dato;
if(pos<0 || pos>=cuantosElementos()){
System.out.println("La posicion insertada no es correcta");
}else{
while(aux!=null){
if (pos == cont){
return aux;
}
aux=aux.getSiguiente();
cont++;
}
}
return aux;
if(pos<0 || pos>cuantosElementos()){
System.out.println("La posicion insertada no es correcta");
}else{
if(pos==0){
insertarPrimero(dato);
}else if(pos==cuantosElementos()){
insertarUltimo(dato);
}else{
while(aux!=null){
if (pos == contador){
auxDato=new Nodo<>(dato, aux);
anterior.setSiguiente(auxDato);
}
anterior=aux;
contador++;
aux=aux.getSiguiente();
}
}
}
if(pos<0 || pos>=cuantosElementos()){
System.out.println("La posicion insertada no es correcta");
}else{
while(aux!=null){
if (pos == cont){
aux.setDato(dato);
}
cont++;
aux=aux.getSiguiente();
}
}
if(pos<0 || pos>=cuantosElementos()){
System.out.println("La posicion insertada no es correcta");
}else{
while(aux!=null){
if (pos == contador){
if (anterior==null){
primero = primero.getSiguiente();
}else {
anterior.setSiguiente(aux.getSiguiente());
}
aux=null;
}else{
anterior=aux;
aux=aux.getSiguiente();
contador++;
}
}
}
}
public T devolverYBorrarPrimero(){
T dato=devolverPrimero();
quitarPrimero();
return dato;
}
Nodo<T> aux=primero;
if (estaVacia()){
return -1;
}else{
int contador=0;
boolean encontrado=false;
while(aux!=null && !encontrado){
if(t.equals(aux.getDato())){
encontrado=true;
}else{
contador++;
aux=aux.getSiguiente();
}
}
if(encontrado){
return contador;
}else{
return -1;
}
}
}
Nodo<T> aux;
if (estaVacia()){
return -1;
}else{
int contador=pos;
boolean encontrado=false;
aux=devolverNodo(pos);
boolean existe=false;
Nodo<T> aux=primero;
if(aux.getDato().equals(t)){
existe=true;
}
aux=aux.getSiguiente();
}
return existe;
}
Nodo<T> aux=primero;
while(aux!=null){
System.out.println(aux.getDato());
aux=aux.getSiguiente();
}
@Override
public String toString(){
String contenido="";
Nodo<T> aux=primero;
while(aux!=null){
contenido=aux.getDato()+"\n";
aux=aux.getSiguiente();
}
return contenido;
}
}
Clase Nodos:
package Informe;
private T dato;
private Nodo<T> siguiente;
public Nodo(){
siguiente=null;
}
public Nodo(T p){
siguiente=null;
dato = p;
}
public T getDato() {
return dato;
}
}
Ejecución:
Zip en Drive:
https://drive.google.com/file/d/1lR-6-
pfYOzuxyzeO8XqWUrn3cRLrnCN4/view?usp=sharing