Soluciones ejercicios Pilas Java

Soluciones a los ejercicios del modelo Pila
Ejercicio 1.- diseñar un método "numElem" que dada una pila genérica cuente (destruyendo la pila en el proceso) cuántos elementos contiene y lo devuelva como dato.
Solucion 1: Para esta solución se ha utilizado un método estático y genérico ya que todos los datos necesarios se pasan como parámetro y no se usa ningún objeto ni dato fuera de dichosparámetros.

  public static  int numElem(Pila p) {
        int contador=0; 
        while (!p.esVacia()) {
              p.desapilar();
             // no es necesario guardar el dato
              contador++;
        }
        return contador;
  } 

Solucion 2: Para esta solución se ha utilizado un método dinámico. Se asume que se trabaja en una extensión del modelo y que this es elobjeto de tipo pila sobre el que se opera.

  public int numElem() {
        int contador=0; 
        while (!this.esVacia()) {
              this.desapilar();
             // no es necesario guardar el dato
              contador++;
        }
        return contador;
  }


Soluciones a los ejercicios del modelo Pila
Ejercicio 2.- Diseñar un método llamado 'numElemR' que dada una pilagenérica cuente cuántos elementos contenía y lo devuelva como dato dejando la pila como estaba. No usar ninguna estructura de datos adicional (se sugiere usar un método recursivo)
Solucion 1:Para este problema se ha utilizado un método estático y genérico ya que todos los datos necesarios se pasan como parámetro y no se usa ningún objeto ni dato fuera de dichos parámetros. No obstante podríautilizarse también como método dinámico.

  public static int numElemR(Pila p) {
    int contador=0; 
    if (!p.esVacia()) {
      E aux = p.desapilar();
      // guarda el dato para reconstruir la pila
        contador=1+numElemR(p);
        p.apilar(aux);
      }
    return contador;
  } 
Solucion 2:Para esta solución se ha utilizado un método dinámico. Se asume que se trabaja en unaextensión del modelo y que this es el objeto de tipo pila sobre el que se opera.

  public int numElemR() {
    int contador=0; 
    if (!this.esVacia()) {
      E aux = this.desapilar();
      // guarda el dato para reconstruir la pila
        contador=1+numElemR(p);
        this.apilar(aux);
      }
    return contador;
  }

Soluciones a los ejercicios del modelo Pila
Ejercicio 3.- Sedice que una pila p1 es sombrero de otra p2 si sus elementos desde el tope son iguales uno a uno a los de p2 hasta que se acaben los de p1. Diseñar un método 'esSombrero(Pila p1, Pila p2)' que diga si p1 es sombrero de p2. Al finalizar, ambas pilas deben quedar como estaban al entrar. No usar ninguna estructura de datos adicional (se sugiere usar un método recursivo)
Solucion 1:Para esta soluciónse ha utilizado un método estático y genérico ya que todos los datos necesarios se pasan como parámetro y no se usa ningún objeto ni dato fuera de dichos parámetros.

  public static  boolean esSombrero
       (Pila p1, Pila p2) {
    boolean res; 
    if (!p1.esVacia()) res=true;
    else if (p2.esVacia()) res=false;
      else {
        E aux1 p1.desapilar();
        E aux2p2.desapilar();
        if (aux1.equals(aux2))
          res=esSombrero(p1,p2);
        else res=false;
        p1.apilar(aux1);
        p2.apilar(aux2);
      }
    return res;
  } 
Solucion 2:Para esta solución se ha utilizado un método dinámico. Se asume que se trabaja en una extensión del modelo y que this es el objeto de tipo pila sobre el que se opera para saber si el parámetro pes sombrerosuyo.

  public boolean esSombrero(Pila p){
    boolean res; 
    if (!p1.esVacia()) res=true;
    else if (this.esVacia()) res=false;
      else {
        E aux1 p1.desapilar();
        E aux2 this.desapilar();
        if (aux1.equals(aux2))
          res=esSombrero(p1);
        else res=false;
        p1.apilar(aux1);
        this.apilar(aux2);
      }
    return res;
  }...
tracking img