La Pila o Stack Programación. La pila (stack) es una estructura ordenada de elementos en la que se pueden insertar o remover elementos por un extremo.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Compiladores e intérpretes Análisis Sintáctico III
PILA.
Informática I – 4to año Volumen II.
Repaso para la construcción del intérprete 2012
SQL Server Integration Services SSIS
Programación I Teoría III
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
PROGRAMACION DE Pilas o Stacks y Colas
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Temas Operaciones básicas Operaciones Operadores Aritméticos
3. INTRODUCCIÓN A LA PROGRAMACIÓN
ESTRUCTURAS DE SECUENCIA
Algebra Booleana y Compuertas Lógicas
ÁRBOLES DE EXPRESION.
APLICACIONES DE PILAS Estructuras de Datos.
TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Arboles Binarios de expresiones
UNIVERSIDAD DE MANAGUA I CUATRIMESTRE INTRODUCCION A LA PROGRAMACION
Programación de Computadores
Práctica 7 AOC. Gestión de la pila Una pila es una estructura de datos caracterizada por que el último dato que se almacena es el primero que se obtiene.
Sistemas de Numeración
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
JAVA J.A.C..
Unidad III Elementos del lenguaje C++
Tema 2: Los tipos de datos
Estructura de Datos y Algoritmos
Sintaxis de C# (Declaraciones y Tipos)
ESTRUCTURA DE DATOS EN JAVA
Estructura de Datos En C++
Clasificación de Gramáticas y Manejo de Errores
ESTRUCTURA DE DATOS ESD-243
Pila1UVM Pilas. Pila2UVM Pila3UVM 2.1 Objetivos El estudiante manejará el tad Pila contigua.
AED3: Algoritmos y Estructuras de Datos 3.  Uno de los conceptos mas utiles en computacion es la pila o stack  Es un conjunto de elementos, en la que:
COMPONENTES DE UN ALGORITMOS
TDA PILA ESTRUCTURAS DE DATOS.
Tema 3: Operadores Antonio J. Sierra. Índice Aritméticos A nivel de bit Relacionales Lógicos Asignación.
Teoría – Alejandro Gonzalez
Computación I Primer Semestre 2006 Capítulo IV Ciclos y Colecciones (con un sabor a algoritmos)
VBA – Elementos del Lenguaje
El Concepto de Tipo Los tipos permiten indicar la característica de los valores (datos) manipulados en un programa. Toda variable tiene asociado un tipo.
Recursividad Estructuras de datos.
Compiladores e intérpretes
Programación en C para electrónicos
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
Tecnologías de las computadoras
Fundamentos de Programación Tipos de Datos en Java
Algoritmo Ing. Maria Rosana Heredia
Introducción a la programación
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
Departamento de Informática Universidad Técnica Federico Santa María Temas 2,3,4: Estructura de un Programa Pascal Declaraciones Tipos de Datos Simples.
Expresiones Lógicas Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes.
FUNDAMENTOS DE PROGRAMACIÓN
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
UNIVERSIDAD TECNICA PERTICULAR DE LOJA
PRINCIPIOS DE PROGRAMACIÓN

CIRCUITOS NO COMBINACIONALES
Lic. En C.C. Ann Margareth Meza Rodríguez
Presente un cuestionario con los aspectos mas importantes sobre los
PROGRAMACION DE Pilas o Stacks
Estructura de Datos PILAS. es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In.
ARREGLOS BIDIMENSIONALES MATRICES Son un espacio de almacenamiento continuo, que contiene una serie de elementos del mismo tipo de datos. Desde el punto.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
PROGRAMACION DE Pilas o Stacks y Colas
Informática Ingeniería en Electrónica y Automática Industrial
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
Listas Dinámicas.
Transcripción de la presentación:

La Pila o Stack Programación

La pila (stack) es una estructura ordenada de elementos en la que se pueden insertar o remover elementos por un extremo llamado la cima de la pila (stack top). El apuntador de pila (stack pointer) señala al elemento de la cima. La pila puede carecer por completo de elementos, en tal caso se le llama pila vacía. En una pila vacía el apuntador de pila señala a NULL. Una pila Cima de la pila Apuntador de pila LA PILA

Las operaciones básicas de la pila son: Apilar (push(s, i)) - inserta un nuevo elemento a la pila. Desapilar (pop(s)) - remueve el elemento de la cima de la pila. A B C D Pila antes de Push(s, E) A B C D Pila después de Push(s, E) E A B C D Pila antes de i  Pop(s) A B C Pila después de i  Pop(s) i=D OPERACIONES BÁSICAS

EVOLUCIÓN DE UNA PILA

La función EMPTY(S) es verdadera si la pila está vacía. La operación STACKTOP(S), que es equivalente a un POP seguido de un PUSH. I = POP(S); PUSH(S,I); determina el valor del elemento de la cima sin removerlo. OTRAS OPERACIONES

Algoritmo para checar paréntesis. La expresión se almacena en la cadena S. 1. VALIDO = VERDADERO 2. i = 1 3. CONTADOR = 0 4. MIENTRAS VALIDO AND i <= LONGITUD(S) HACER 5. SI S[i] = '(' ENTONCES 6. CONTADOR = CONTADOR SINO 8. SI S[i] = ')' ENTONCES 9. CONTADOR = CONTADOR SI CONTADOR < 0 ENTONCES 11. VALIDO = FALSO 12. i = i SI CONTADOR <> 0 ENTONCES 14. VALIDO = FALSO ALGORITMO DE CHEQUEO DE PARÉNTESIS

Actividad Escriba el algoritmo de chequeo de paréntesis en Java.

Algoritmo para checar expresiones con paréntesis bien construidas. Se utiliza una pila P. La cadena se almacena en una variable S. 1. VALIDO = VERDADERO 2. i = 1 3. MIENTRAS VALIDO AND i <= LONGITUD(S) 4. SI (S[i] = '(') OR (S[i] = '[') OR (S[I] = '{') ENTONCES 5. PUSH(P,S[i]) 6. SINO 7. SI (S[i] = ')') OR SI (S[i] = ']') OR SI (S[i] = '}') ENTONCES 8. SI EMPTY(P) ENTONCES 9. VALIDO = FALSO 10. SINO 11. C = POP(P) 12. SI NOT((C='(' AND S[i] = ')')OR(C='[' AND S[i] =']') OR (C='{' AND S[i]= '}')) ENTONCES 13. VALIDO = FALSO 14. i = i SI NOT EMPTY(P) ENTONCES 16. VALIDO = FALSO ALGORITMO DE CHEQUEO DE PARÉNTESIS 2

Una pila puede representarse con un registro, uno de los campos es un entero usado como apuntador de pila y el otro campo es un arreglo lineal de elementos de la pila. S.TOPE = apuntador de pila. S.ITEM[S.TOPE] = elemento de la cima de la pila REPRESENTACIÓN

Función EMPTY(S:PILA) regresa BOOLEANO 1. SI S.TOPE = 0 ENTONCES 2. REGRESA VERDADERO 3. SINO 4. REGRESA FALSO Función POP(S:PILA) regresa CARÁCTER 1. X ¬ S.ITEM[S.TOPE] 2. S.TOPE ¬ S.TOPE REGRESA X NOTA: Se supone una pila de caracteres OPERACIONES EMPTY Y POP

Función POP(S:PILA) regresa CARÁCTER 1. SI EMPTY(S) ENTONCES 2. ERROR (‘bajo flujo, pila vacía’) 3. SINO 4. X = S.ITEM[S.TOPE] 5. S.TOPE = S.TOPE REGRESA X OTRA VERSIÓN DE POP

SUBRUTINA POPANDTEST(S: PILA; BAJOFLUJO: BOOLEANO; X: CARÁCTER) 1. SI EMPTY(S) ENTONCES 2. BAJOFLUJO = VERDADERO 3. SINO 4. BAJOFLUJO = FALSO 5. X = S.ITEM[S.TOPE] 6. S.TOPE = S.TOPE REGRESA X OPERACIÓN POPANDTEST

SUBRUTINA PUSH(S:PILA, X:CARACTER) 1. S.TOPE = S.TOPE S.ITEM[S.TOPE] = X SUBRUTINA PUSH(S:PILA, X:CARACTER) 1. SI S.TOPE = STACKSIZE ENTONCES 2. ERROR (’sobreflujo en la pila’) 3. SINO 4. S.TOPE = S.TOPE S.ITEM[S.TOPE] ¬ X OPERACIÓN PUSH

FUNCION STACKTOP(S:PILA) regresa CARACTER 1. SI EMPTY(S) ENTONCES 2. ERROR (‘pila vacia’) 3. SINO 4. REGRESA S.ITEM[S.TOP] OPERACIÓN STACKTOP

Implementación de pilas en Java public class PilaChar{ private char pila[]; private int tope; public PilaChar(int capacidad){ pila = new char[capacidad]; tope = -1; } public boolean isEmpty(){ return tope == -1; } public void push(char i){ if(tope+1 < pila.length) pila[++tope] = i; } public char pop(){ if(isEmpty()) return 0; return pila[tope--]; } public String toString(){ return new String(pila,0,tope+1); } } Primero se incrementa, luego se hace la asignación Primero se obtiene el valor de pila y luego se decrementa. Convierte a cadena un arreglo de caracteres.

Actividad Escriba en Java el algoritmo de chequeo de paréntesis de tres tipos utilizando pilas. Escriba un applet que lea una expresión con un TextField e informe si la expresión está correcta.

Entrefijo - el operador se escribe entre los dos operandos. Es la normalmente utilizada en álgebra. Prefijo - el operador se escribe antes de los operandos. Se utiliza en algunos lenguajes de programación como LISP. Posfijo - el operador se escribe después de los operandos. Es utilizada en algunas calculadoras y computadoras. REPRESENTACIÓN DE EXPRESIONES

EJEMPLOS DE EXPRESIONES entrefijoprefijoposfijo a+b+abab+ (a+b)*c*+abcab+c* (a-b)*(c-d)*-ab-cdab-cd-* ((a+b)*c-(d-e))^(f+g)^-*+abc-de+fgab+c*de--fg+^

EJEMPLO DE CONVERSIÓN ((a+b)*c-(d-e))^(f+g) ((+ab)*c-(-de))^(+fg) ((*(+ab)c)-(-de))^(+fg) (-(*(+ab)c)(-de))^(+fg) ^(-(*(+ab)c)(-de))(+fg) ^-*+abc-de+fg Conversión de entrefijo a prefijo

((a+b)*c-(d-e))^(f+g) ((ab+)*c-(de-))^(fg+) (((ab+)c*)-(de-))^(fg+) (((ab+)c*)(de-)-) ^(fg+) ((((ab+)c*)(de-)-)(fg+) ^) ab+c*de--fg+ ^ Conversión de entrefijo a posfijo EJEMPLO DE CONVERSIÓN 2

ALGORITMO DE EVALUACIÓN DE POSFIJO Algoritmo para evaluar una cadena en posfijo. Se suponen números de un solo dígito. La pila S guarda valores numéricos. 1. MIENTRAS no se lea toda la cadena 2. Leer el siguiente símbolo y almacenarlo en simb 3. SI simb es un operando entonces 4. PUSH(S,SIMB) 5. SINO 6. OP2 = POP(S) 7. OP1 = POP(S) 8. VALOR = resultado de aplicar simb a op2 y op1 9. PUSH(S,VALOR) 10. RESULTADO = POP(S)

FUNCIÓN ES_DÍGITO FUNCION ES_DIGITO ( C : CARÁCTER ) REGRESA BOOLEANO 1. SI C >= '0' AND C <= '9' ENTONCES 2. REGRESAR VERDADERO 3. SINO 4. REGRESAR FALSO

FUNCIÓN OPER FUNCION OPER(SIMB : CARACER, OP1, OP2 : REAL ) REGRESA REAL 1. SI SIMB = '+' ENTONCES 2. REGRESA OP1 + OP2 3. SI SIMB = '-' ENTONCES 4. REGRESA OP1 - OP2 5. SI SIMB = '*' ENTONCES 6. REGRESA OP1 * OP2 7. SI SIMB = '/' ENTONCES 8. REGRESA OP1 / OP2 9. SI SIMB = '^' ENTONCES 10. REGRESA OP1 ^ OP2

ALGORITMO DE EVALUACIÓN 1. i = 1 2. MIENTRAS i <= LONGITUD(CAD) HACER 3. SIMB = CAD[i] 4. SI ES_DIGITO(SIMB) ENTONCES 5. PUSH(S, SIMB - 48) 6. SINO 7. OP2 = POP(S) 8. OP1 = POP(S) 9. VALOR = OPER(SIMB, OP2, OP1) 10. PUSH(S,VALOR) 11. i = i RESULTADO = POP(S)

Actividad Escriba el algoritmo de evaluación de posfijo en Java.

CONVERSIÓN DE ENTREFIJO A POSFIJO En la expresión a + b * c no puede procesarse el signo + hasta haber procesado el signo * dado que tiene precedencia respecto a +. La función PRCD acepta dos caracteres y es verdadera si el primer símbolo tiene precedencia respecto al segundo: PRCD('*',' +') es VERDADERO PRCD('+','+') es VERDADERO PRCD('+', '*') es FALSO

ALGORITMO DE CONVERSIÓN Algoritmo para convertir una cadena en entrefijo en posfijo. S es una pila de operadores. 1. i = 1 2. MIENTRAS i <= LONGITUD(CAD) HACER 3. SIMB ¬ CAD[i] 4. SI ES_OPERANDO(SIMB) ENTONCES 5.agregar a la cadena de posfijo 6. SINO 7.MIENTRAS(NOT EMPTY(S)AND PRCD(STACKTOP(S), SIMB ))HACER 8. SIMBTOPE = POP(S) 9. agregar a la cadena de posfijo 10. PUSH(S,SIMB) 11. i = i MIENTRAS NOT EMPTY(S) 13. SIMBTOPE = POP(S) 14. agregar a la cadena de posfijo

USO DE PARÉNTESIS Para incluir expresiones con paréntesis basta con definir adecuadamente la función PRCD. La siguiente tabla resume estos valores: PRCD('(', op) = FALSOpara cualquier operador op PRCD(op, '(') = FALSOpara cualquier operador op que no sea ')’ PRCD(op, ')')=VERDADEROpara cualquier operador op que no sea ')’ Además hay que asegurar que el símbolo ')' no sea insertado en al pila y que el paréntesis que abra sea descartado. Para esto cambiamos la sentencia PUSH por SI (EMPTY(S) OR SIMB <> ')') ENTONCES PUSH(S,SIMB) SINO SIMBTOPE = POP(S)[extrae el paréntesis que abre ]

ALGORITO DE CONVERSIÓN FINAL 1. i = 1 2. MIENTRAS i <= LONGITUD(CAD) 3. SIMB = CAD[i] 4. SI ES_OPERANDO(SIMB) ENTONCES 5. agregar a la cadena de posfijo 6. SINO 7. SI EMPTY(S) ENTONCES 8. BAJOFLUJO = VERDADERO 9. SINO 10. SIMBTOPE = POP(S) 11. MIENTRAS (NOT BAJOFLUJO AND PRCD(STACKTOP(S),SIMB)) 12. agregar a la cadena de posfijo 13. SI EMPTY(S) ENTONCES 14. BAJOFLUJO = VERDADERO 15. SINO 16. SIMBTOPE = POP(S) 17. SI NOT BAJOFLUJO ENTONCES 18. PUSH(S,SIMBTOPE) 19. SI (EMPTY(S) OR SIMB <> ')') ENTONCES 20. PUSH(S,SIMB) 21. SINO 22. SIMBTOPE = POP(S)[extrae el paréntesis que abre] 23. i = i + 1

24. MIENTRAS NOT EMPTY(S) 25. SIMBTOPE = POP(S) 26. agregar a la cadena de posfijo