2. PILAS
Una Pila (Stack) es una colección ordenada de elementos a los cuales
sólo se pueden acceder por un único lugar o extremo de la pila. Los
elementos se añaden o se quitan de la pila sólo por su parte superior
(cima o tope). Este es el caso de una pila de platos, una pila de libros,
de tarros, etc.
La propiedad específica de la pila es último en entrar, primero en salir,
se conoce a las pilas como estructuras de datos LIFO(last in, first out).
La pila se puede implementar guardando los elementos en un arreglo,
en cuyo caso su dimensión o longitud es fija. Así como también se
puede implementar con una lista enlazada, de modo que cada
elemento de la pila forma un nodo de la lista.
3. Una pila es un tipo especial de lista simplemente enlazada en la que sólo
se pueden insertar y eliminar nodos en uno de los extremos de la lista.
Estas operaciones se conocen como "push" y "pop", respectivamente
"apilar" y "desapilar".
Por ejemplo la pila de platos. Sólo es posible añadir platos en la parte
superior de la pila, y sólo pueden tomarse del mismo extremo
4. Representación en memoria estática
Las técnicas de asignación de memoria estática son sencillas.
La asignación de memoria puede hacerse en tiempo de compilación y los
objetos están vigentes desde que comienza la ejecución del programa hasta
que termina.
En los lenguajes que permiten la existencia de subprogramas, y siempre que
todos los objetos de estos subprogramas puedan almacenarse estáticamente
se aloja en la memoria estática un registro de activación correspondiente a
cada uno de los subprogramas.
Estos registros de activación contendrán las variables locales, parámetros
formales y valor devuelto por la función.
5.
6. Representación en memoria dinámica
La memoria dinámica es un espacio de almacenamiento que se solicita
en tiempo de ejecución. De esa manera, a medida que el proceso va
necesitando espacio para más líneas, va solicitando más memoria al
sistema operativo para guardarlas.
El medio para manejar la memoria que otorga el sistema operativo, es
el puntero, puesto que no podemos saber en tiempo de compilación
dónde nos dará huecos el sistema operativo (en la memoria de nuestro
PC).
Un dato importante es que como tal este tipo de datos se crean y se
destruyen mientras se ejecuta el programa y por lo tanto la estructura
de datos se va dimensionando de forma precisa a los requerimientos
del programa, evitándonos así perder datos o desperdiciar memoria si
hubiéramos tratado de definirla cantidad de memoria a utilizar en el
momento de compilar el programa.
7.
8. Operaciones básica con pilas
Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las
que en las implementaciones modernas de las pilas se suelen añadir más de
uso habitual.
Crear: se crea la pila vacía. (constructor)
Tamaño: regresa el número de elementos de la pila. (size)
Apilar: se añade un elemento a la pila.(push)
Desapilar: se elimina el elemento frontal de la pila.(pop)
Cima: devuelve el elemento que esta en la cima de la pila. (top o peek)
Vacía: devuelve cierto si la pila está vacía o falso en caso contrario (empty).
9. Otras operaciones básicas con pilas
Insertar elementos a la pila
insertar(&pila,elemento);
Eliminar elementos de la pila
elemento=eliminar(&pila);
Determinar si la pila esta vacía
bandera=vacia(pila);
Determinar si la pila está llena
bandera=llena(pila);
10. Aplicaciones
Apilar libros, productos
Problema de torres de Hanoi, sistema de estacionamiento
Leer una secuencia de caracteres desde teclado e
imprimirlos al revés
Expresión matemática que contenga paréntesis anidados
correctamente.
Convertir expresiones de notación infija a prefija, a
postfija y viceversa.
Llamadas a subprogramas
Recursividad
Tratamiento de Expresiones Aritméticas
Ordenación
11. Notación infija
La posición y precedencia de los operadores, así como si son asociativos por la
izquierda o por la derecha
Operadores: Suma, resta, multiplicación, división y exponenciación ($)
Orden de precedencia:
exponenciación
multiplicación/división
suma/resta
Todos son asociativos por la izquierda, excepto la exponenciación que es
asociativo por la derecha
También conocida como interfija, donde en una expresión los operadores se
encuentran en medio
Ejemplos:
a+b
(a+b)*(c-d)
12. Notación postija
Aquí los operadores de expresiones se encuentran al final
de los operandos
No usa paréntesis
Ejemplos:
AB+
ABC*+
AB+CD-*
13. Notación prefija
En esta notación, el operador precede a los
operandos
No usa paréntesis
Ejemplos:
+AB
-+ABC
*+AB-CD
15. Recursividad con ayuda de pilas
Las pilas se usan comúnmente para indicar en que punto se encuentra un
programa cuando contiene procedimientos que se llaman a si mismos.
Estos procedimientos se conocen como procedimientos recursivos.
La recursividad es una técnica en la que un procedimiento o función se
hace llamadas a si mismo en el proceso de realización de sus tareas. La
recursividad se puede definir mediante un clásico ejemplo de la función
factorial.
La recursividad es una técnica de programación muy potente que puede
ser usada en lugar de una iteración (Bucles o ciclos). Ello implica una
forma diferente de ver las acciones repetitivas permitiendo que un
subprograma se llame a si mismo para resolver una operación mas
pequeña del programa original.
4!= 4*3*2*1=24
16. Ejercicios
Ingresar una ecuación matemática y que me
muestre de uno en uno los elementos de la
ecuación invertida
Realizar la polaca inversa postfija e infija