Ejercicios selectos de pilas (C++).

  1. Con base en el Ejemplo pila_primitiva, haga una implementación completa de una pila que almacene char primitivos y realice las pruebas correspondientes. Cuando termine, considere lo siguiente:
    1. ¿Puede visualizar las implicaciones de este ejercicio?
    2. ¿Qué pasa por ejemplo si ahora se necesita almacenar datos de tipo double?
  2. En el Ejemplo pila_primitiva se creó una pila utilizando implícitamente un constructor sin argumentos. Modifique dicho ejemplo para asignar un nuevo nombre a la pila por medio del constructor correspondiente; asígnele a la pila el nombre de "Mi primera pila", recompile y pruebe su funcionamiento.
  3. Para el Ejemplo pila_primitiva modifique main para que permita leer n números enteros desde la entrada estándar y los almacene en la pila.
  4. Modifique el Ejemplo pila_primitiva para que:
    1. Agregue el método peek a la implementación. Recuerde que dicha operación hecha un vistazo al elemento que se encuentra en el tope de la pila y lo regresa, pero no lo elimina.
    2. Incorpore un atributo privado numérico (n) que lleve el control del número de elementos insertados en la pila. Al respecto no olvide:
      1. Inicializar explícitamente dicho atributo a cero en el constructor.
      2. Proporcionar únicamente el método de tipo get para el atributo n: size( ).
  5. Tomando como referencia el Ejemplo pila_generica, modifíquelo para que la pila genérica almacene otro tipo de objetos además de string. Pruebe su funcionamiento con:
    1. int (sugerido en el mismo ejemplo).
    2. double.
    3. persona (consulte el Ejemplo herencia).
    4. cientifico (consulte el Ejemplo herencia).
  6. Utilice una pila para verificar si, dada una expresión, ésta es o no un palíndromo. Un palíndromo es una palabra, frase o expresión que se lee o interpreta igual procesándola de izquierda a derecha, que de derecha a izquierda. Algunos ejemplos de palíndromos son (Nota: Simplifique el problema y no considere acentos ni la letra ñ en su implementación)
    1. 1991.
    2. 2002.
    3. Hannah.
    4. Reconocer.
    5. Se van sus naves.
    6. Ateo por Arabia iba raro poeta.
    7. Dábale arroz a la zorra el abad.
    8. Anita lava la tina.
    9. La ruta nos aportó otro paso natural.
    10. Las Nemocón no comen sal.
    11. No di mi decoro, cedí mi don.
    12. A la catalana banal, atácala.
  7. Realice la implementación del Algoritmo de verificación de balanceo presentado en la entrada Algunas aplicaciones de las pilas. Para lo anterior, construya una clase cuyo nombre sea Expresion e implemente dicho algoritmo como uno de los servicios o acciones de la clase, identifique al método como verifica_balance de tal forma que su declaración sea: public bool verifica_balance( );.
    1. No olvide realizar las pruebas correspondientes para validar y verificar la funcionalidad de su propuesta.
    2. Sugerencia: implemente la verificación de equivalencia de símbolos como un método privado; es decir, un método que proporcione servicio a otros métodos de la misma clase (servicio interno), pero no a los objetos instanciados (servicios públicos).
  8. Convierta paso a paso utilizando papel y lápiz, las siguientes expresiones en su representación en interfija a su correspondiente notación postfija. Nota: el símbolo @ representa la potencia y es el de mayor precedencia. Note que se han proporcionado las soluciones correspondientes:
    1. A + B.
      1. A B +.
    2. A + B - C.
      1. A B + C -.
    3. (A + B) * (C - D).
      1. A B + C D - *.
    4. A @ B * C – D + E / F / (G + H).
      1. A B @ C * D - E F / G H + / +.
    5. ((A + B) * C – (D - E)) @ ( F + G).
      1. A B + C * D E - - F G + @.
    6. A – B / (C * D @ E).
      1. A B C D E @ * / -.
  9. Continuando lo planteado en el ejercicio anterior, convierta paso a paso las mismas expresiones pero ahora a su representación en notación prefija. A continuación se proporcionan las soluciones correspondientes:
    1. + A B.
    2. - + A B C.
    3. * + A B - C D.
    4. + - * @ A B C D / / E F + G H.
    5. @ - * + A B C - D E + F G.
    6. - A / B * C @ D E.
  10. Diseñe un algoritmo, así como su correspondiente implementación, para convertir una expresión en notación interfija a su correspondiente notación postfija y prefija respectivamente. Agregue los métodos siguientes a la clase Expresion iniciada en el Ejercicio 7. Asegúrese de probar sus implementaciones con al menos, los dos ejercicios anteriores:
    1. Postfija (declaración del método public string obten_postfija( )).
    2. Prefija (método public string obten_prefija( )).
  11. Realice la implementación del Algoritmo de evaluación de una expresión en notación postfija presentado en la entrada Algunas aplicaciones de las pilas. Implemente dicho algoritmo como uno de los servicios de la clase Expresion iniciada en el Ejercicio 7. Proponga un método ad hoc a la responsabilidad de éste pero utilice el identificador evalua_postfija.
    1. No olvide realizar las pruebas correspondientes para validar y verificar la funcionalidad de su propuesta.
    2. Sugerencia: implemente la realización de la operación representada por símbolo como un método privado; es decir, un método que proporcione servicio a otros métodos de la misma clase (servicio interno), pero no a los objetos instanciados (servicios públicos).
  12. Repita el Ejercicio 7 con la clase de plantilla stack de la biblioteca de contenedores de C++:
    1. Infórmese acerca del funcionamiento de dicho contenedor.
    2. Desde el punto de vista de la ejecución, ¿nota alguna diferencia?
    3. ¿Tendría alguna ventaja o desventaja utilizar la clase de biblioteca?
  13.  Considere el Ejemplo pila genérica con vector. Realice una implementación equivalente, pero ahora utilice el contenedor list; en este sentido, podría ser útil al lector consultar el Ejercicio 12 de los Ejercicios Selectos de Transición.



No hay comentarios.:

Publicar un comentario