jump to navigation

Ejercicio 2 Septiembre 11, 2008

Posted by beceoca in 1.
trackback

César Juárez Megías

ENUNCIADO EJERCICIO 2

 

Se pretende construir una estructura de datos compleja, en este caso una cola mediante el uso de una lista enlazada.

Esta cola deberá contener los siguientes métodos:

            · Encolar elementos (enqueue).

            · Desencolar elementos (dequeue).

            · Indicar si la cola está vacía.

            · Imprimir por pantalla todos los contenidos de la cola.

 

En nuestro caso, la cola que vamos a crear almacenará objetos de tipo pila, cuya clase también deberemos programar, la cual llevará estos métodos:

            · Introducir un elemento en la pila (push).

            · Extraer un elemento de la pila (pop).

            · Indicar si la pila está vacía.

            · Indicar si la pila está llena.

            · Imprimir por pantalla todos los contenidos de la pila.

 

Como en el caso de las colas también deberemos programarla mediante una lista enlazada, la pila se implementará mediante un array.

 

Cada una de estas pilas contendrá vectores (uno en cada posición de la pila)

 

Suponemos que la cola y la pila tienen tamaño para 15 objetos.

Suponemos también que los vectores que se almacenan en la pila nos los dan ya tal y como se quieren almacenar

 

 

NOTAS

 El método imprimir de la cola imprimirá por pantalla cada una de las pilas almacenadas en ella.

A su vez, imprimir cada una de estas pilas significa imprimir todos y cada uno de los vectores que almacena.

Por último, imprimir uno de estos vectores quiere decir imprimir, uno debajo de otro, todos los objetos que estén guardados en él, considerando que dichos objetos serán números enteros.

Tras la impresión, la estructura de datos al completo deberá quedar tal y como estaba al principio.

CLASES EJERCICIO 2

(para hacer la lectura más fácil he puesto los comentarios en color verde)

 

Clase Cola

public class Cola{

//Declaramos los atributos necesarios, en este caso el constructor será el que viene por defecto

private int tamaño = 15;

public int objetosEnCola = 0;

public int objetosImpresos = 0;

public Nodo primero = null;

public Nodo ultimo = null;

 

//Metodo enqueue

public void enqueue(Pila pila){

//Comprobamos que la cola no está llena

if (estaLlena == false){

if (estaVacia == true){

//Al ser el primer objeto añadido tendrá a la vez la primera y la última posición

primero = new Nodo(pila);

ultimo = new Nodo(pila);

}else{

//Como no es el primer objeto añadido creo un nuevo nodo con la pila que voy a encolar

nuevoUltimo = new Nodo(pila);

//Pongo el ultimo nodo apuntando al nuevo

ultimo.setNodoSiguiente(nuevoUltimo);

//Cambio el ultimo nodo por el que acabo de añadir al final de la cola

ultimo = nuevoUltimo;}

//Sumo un objeto en la cuenta de objetos que tiene la cola

objetosEnCola++;

}else{

//Si la cola está llena saco por pantalla un mensaje de error

System.error.println(“La cola está llena, no puede añadir más objetos”);}}

 

//Metodo dequeue

public Pila dequeue(){

if (estaVacia == false){

//Guardo la pila a devolver en una variable

Pila pilaADevolver = primero.getPila();

//Pongo la posición siguiente como la primera de la cola

Nodo NuevoPrimero = primero.getSiguiente();

primero = nuevoPrimero;

//Resto el objeto que acabo de sacar de la cola

objetosEnCola–;

//Devuelvo el nodo que había en la primera posición

return (PilaADevolver);}

//Si no hay objetos en la cola

else{

System.error.println(“No hay más objetos en esta cola”);}}

 

//Metodo estaVacia

public boolean estaVacia(){

//Si la cola está vacía (no hay ningún objeto) devuelvo true, sino, devuelvo false

if (objetosEnCola==0){

return true;

}else{

return false;}}

 

//Metodo imprimir

public void imprimir(){

//Si la cola está vacia lo comunicamos en un mensaje por pantalla

if (estaVacia()==true){

System.out.println(“La cola está vacia”);

}else{

primero.imprimir();

imprimeRestantes(primero.getSiguiente());}

 

public void imprimeRestantes(Nodo nod)

//Si el nodo no es nulo, lo imprimimos y llamamos a este método para que imprima el siguiente

if (nod != null){

nod.imprimir();

imprimeRestantes(nod.gesSiguiente());

//Si el nodo es nulo, no hay más que hacer y por lo tanto se sale automáticamente del algoritmo recursivo

}}}//Fin de la clase Cola

 

Clase Nodo

public class Nodo{

//Declaramos los atributos necesarios

Pila pila;

Nodo siguiente == null;

 

//Constructor

public Nodo(Pila pila){

this.pila = pila;}

 

//Método setNodoSiguiente

public void setNodoSiguiente(Nodo siguiente){

this.siguiente = siguiente;}

 

//Método getNodoSiguiente

public Nodo getNodoSiguiente(){

return (siguiente);}

 

//Método getPila

public Pila getPila(){

return pila;}

//Método imprimir (llama directamente al método imprimir de la pila)

public void imprimir(){

pila.imprimir();}

}//Fin de la clase Nodo

 

Clase Pila

import import java.util.*;

public class Pila{

//Declaramos las variables necesarias

public Vector array [];

public int tamaño = 15;

public int posicion = 0;

 

//Constructor

public Pila(){

array = new Vector [tamaño];}

 

//Método push

public void push(Vector i){

//Miramos si la cola no está llena, si lo está sacamos un mensaje por pantalla,

y si no lo está añadimos el objeto en su posición

if (estaLlena()){

System.out.println(“La pila está llena”);}

else{

array [posicion] = i;

posicion++;}}

 

//Método pop

public Vector pop(){

//Devolvemos el objeto de la lista que está en la primera posición para salir de ella

return array [posicion];

posicion–;}

 

//Método estaLlena

public boolean estaLlena(){

if (posicion == (tamaño-1)){

return true;

}else{

return false;}}

 

//Método estaVacia

public boolean estaVacia(){

if (posicion == -1){

return true;

}else{

return false;}}

 

//Método imprimir

public void imprimir(){

//Comprobamos que no está vacia y si no lo está imprimimos por pantalla todos los elementos de la lista

if (estaVacia()){

System.out.println(“La pila está llena”);

}else{

//Recorremos la pila

for(int i = 0; i<=posicion; i++){

//Recorremos el vector

for(int j=0; j<array[i].size(); j++){

System.out.print(array[i].elementAt(j)+”  “);}}}}

 

}//Fin de la clase Pila

CONCEPTOS USADOS EN EL EJERCICIO 2

 

En este caso los conceptos usados para resolver este ejercicio son los siguientes:

            - Concepto de pilas y colas

            - Uso de una cola dinámica

            - Uso de la clase Vector

            - Conceptos de algoritmia nivel básico/medio (recorrer arrays, llamadas a otros métodos dentro de un método)

            - Recursividad

Comentarios»

No comments yet — be the first.