SlideShare una empresa de Scribd logo
TDA PILA
Estructuras de Datos
CCPG1006
LA PILA: UN TDA SIMPLE
• Uno de los conceptos más útiles en computación es la pila o stack
• Es un conjunto de elementos, en la que:
• Los elementos se añaden y se remueven por un solo extremo
• Este extremo es llamado “tope” de la pila
La última en llegar,
será la primera en
salir:
LAST IN, FIRST OUT
LIFO
Ejemplo:
 Cuando un empleado se va de vacaciones, le llega correo a su escritorio.
 Las cartas se van “apilando”.
 Al regresar de vacaciones, la última carga en llegar, será la primera que revisara
 Al terminar de revisarla, la nueva carta del tope de la pila habrá cambiado
 Del “pilo” de cartas, la más nueva que queda, será la siguiente en ser revisada
TDA PILA (STACK): DEFINICION
Dada una Pila llamada S
– ¿Qué datos serían importantes conocer sobre la Pila?
– ¿Y que operaciones podríamos efectuar a la misma?
S.push(elemento1)
Elemento 1
Tope
o Cima
S.push(elemento2)
Elemento 2
S.push(elemento3)
Elemento 3
S.pop()
EstaVacia? NoSi
 Al revisar c/carta, se la “sacaba” de la pila
 elemento = pila.pop()
 La operación pop remueve el elemento Tope de
la pila y lo retorna. La pila disminuye su tamaño
Usemos el ejemplo del correo:
 Al acumularse,
 Cada carta(elemento), era “metida” a la pila:
pila.push(elemento)
 La operación push aumenta un elemento a la pila,
y esta aumenta en su tamaño
Al remover el último elemento de una pila esta queda vacía
• Una vez vacía, no se pueden “sacar” más elementos de la pila
Antes de sacar un elemento de la pila
• Debemos saber si la pila Esta Vacía?: size() == 0
El tope de la pila siempre esta cambiando
• Deberíamos poder “revisar” el elemento tope de la pila: peek()
• Si la pila esta vacía, no debe existir un valor tope
El tratar de remover elementos o acceder a elementos de una
pila vacía se llama
• SUBDESBORDAMIENTO de la pila
TDA PILA (STACK): DEFINICION
PILA: OPERACIONES
size() retorna -> int
Efecto: Devuelve el tamaño
push(elemento)
Efecto: Aumenta el tamaño de la pila, poniendo
el elemento en la cima (tope)
pop() retorna -> elemento
Efecto: Remueve el elemento tope y lo retorna
Excepcion: Si la pila esta vacía, produce error
peek() retorna -> elemento
Efecto: Devuelve el elemento tope de la pila
Excepcion: Si la pila esta vacía produce error
TDA PILA: DEFINICION FORMAL
• En conclusión:
– La pila es un conjunto de elementos
– De los cuales solo conozco y puedo ver el TOPE
• Cada elemento en la pila
– Puede contener información de cualquier tipo, es decir, es genérico
<pila> ::= <tope> + {<nodo>}
<tope> ::= <enlace>
<enlace> ::= (<Nodo> | NULL)
<nodo> ::= <contenido> + <enlace>
<contenido> ::= <<dato>>
TDA PILA: IMPLEMENTACION
Hay varias formas, analicemos la más sencilla
La Pila es una Lista… pero limitada
– En la lista los nuevos nodos se pueden insertar y remover:
Al/del Inicio, al final, dada una posición, etc.
– En la Pila los elementos solo se pueden:
• insertar al final y solo se pueden remover del final.
• insertar al inicio y solo se pueden remover del inicio.
Las implementaciones
– Estática
– Dinámica
IMPLEMENTACION ESTATICA
Pila basada en arreglos
Las operaciones sobre el arreglo
– push
– pop
– peek
MAX_ELEM
Tope = -1
Tope =
MAX_ELEM-1
Tope = 0
IMPLEMENTACION ESTATICA
IMPLEMENTACION ESTATICA
IMPLEMENTACION DINAMICA
• Una pila, o una cola, las dos son Listas realmente
– Listas en las cuales las operaciones en Insertar y Remover
están limitadas
• Una pila, se implementa exactamente igual que una Lista
– Al hacer push, es InsertarNodoFinal (o inicio)
– Al hacer pop, es SacarNodoFinal (o inicio)
IMPLEMENTACION DINAMICA
TDA Stack
EJEMPLO
• Las pilas se usan para
– Recuperar un conjunto de elementos en orden inverso a
como se introdujeron
• Ejemplo: Un programa debe
– Leer una secuencia de elementos enteros
– Luego mostrarlos en orden inverso al ingresado
• Si se ingresa: 1, 3, 5, 7
• Se muestra: 7, 5, 3, 1
ANALISIS
• Cada elemento ingresado puede ser “metido” en la pila
• Ejemplo:
1
3
5
7
1
3
5
1
3
1
7 5 3 1
Una vez llenada la pila,
Solo hay que “sacar”, elemento
tras elemento
Hasta que la pila quede vacía
SOLUCION
Stack<Integer> pila = new Stack( );
System.out.println("Ingrese numero");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while(n!= centinela){
pila.push(n);
System.out.println("Ingrese numero");
n = sc.nextInt();
}
while(! pila.empty( )){
System.out.println(pila.pop( ));
}
UN APLICACION MAS PRACTICA
• El compilador siempre sabe cuando se ha escrito un
paréntesis, o una llave de más
• (a+b)) Mal
• ((a+b) * c / 4*g-h) OK
• Con el uso de pilas, se puede reconocer los paréntesis que no
coinciden
• ¿Como lograr esta aplicación de la pila?
• Cuando revisamos una expresión de este tipo:
– Revisamos los paréntesis de la derecha, y buscamos si tienen “match” en la
izquierda
Para seguir este enfoque podríamos:
“Recordar” los paréntesis de la izquierda ( a medida que aparecen:
 El primero en aparecer, será el último en ser “recordado”
 El último en aparecer, será el primero en ser “recordado”
La Pila se utiliza
justamente para
“recordar” de la forma
abajo indicada
7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5))
Así, cuando aparece un )
 El primer ( recordado, debe ser su “match”
 En ese momento, este primero recordado, ya puede ser “olvidado”
 Al llegar al final de la expresión, ningún ( debería ser “recordado”
7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5))
ANALISIS DEL PROBLEMA
APLICANDO PILAS
Revisemos la expresión anterior
Todos los ),
encontraron su (
7 - ( ( X *( ( X+Y) / ( J - 3) ) +Y) / ( 4- 2) )
(
(
(
(
Y AHORA, EL ALGORITMO
Stack<String> s = new Stack();
int i =0;
while(i<cadena.length())//Mientras no hayamos leido toda la cadena
{
//evaluar el siguiente simbolo de la expresion
if(cadena.charAt(i)=='(')
s.push('('); /*Almacenarlo*/
if(cadena.charAt(i)== ')'){ /*Buscar match*/
if(s.empty()) /*No hubo match!!*/
return false
s.pop();
}i++;
}
if(s.empty())
return true;
else
/*Algun simbolo se quedo dentro, porque no hubo match*/
return false;
• Una expresión aritmética:
– Conjunto de operadores, variables y paréntesis. Ejemplo:
• A+B
• Esta forma de escribir las expresiones: NOTACION INFIJA
• El operador siempre va en medio de los operandos
• En una expresión, las operaciones se “ejecutan” en un cierto
orden
– A+B*C no es igual que (A+B)*C
– Cada operador tiene su nivel de precedencia, recordemos:
• Paréntesis : () Mayor prioridad
• Potencia : ^
• Multiplicación/división: *,/
• Suma/Resta : +,- Menor Prioridad
APLICANDO PILAS
NOTACIONES
• La notación infija es la más popular
• No es la única forma, hay dos más
– NOTACION PREFIJA(POLACA)
• +AB Aquí el operador va antes que
los operandos
– NOTACION POSFIJA(POLACA INVERSA)
• AB+ Aquí el operador va después
que los operandos
• Siempre tener en cuenta la precedencia de
los operadores
• Ejemplo. Pasar a postfija las siguientes
expresiones:
 Agrupar como establece la precedencia
 (A+B)*C
 Convertir operación por operación
 La de mayor precedencia primero
 (AB+)*C
 La que le sigue en precedencia
 (AB+)C*
 Remover Paréntesis
 AB+C*
Ya no se necesitan paréntesis
En postfija, el orden de los
operadores es el verdadero
orden de ejecución
A+B*C
(A+B)*C
 Agrupar como establece la precedencia
 A+(B*C)
 Convertir operación por operación
 La de mayor precedencia primero
 A+(BC*)
 La que le sigue en precedencia
 A(BC*)+
 Remover Paréntesis
 ABC*+
EVALUACION DE EXPRESIONES POSFIJAS
• Dadas
– AB+C*
– ABC*+
– Evalúelas, cuando A = 3, B = 4 y C = 5
– La primera, resultado : 35
– La segunda, resultado: 23
• Que algoritmo se siguió para evaluar estas expresiones?
AB+C* ABC*+
A+B -> 7
7*C -> 35
B*C -> 20
A+20 -> 23
7C* A20+
EVALUACION: ALGORITMO
• Con lo anterior, ya tenemos una idea de que hacer
– Deberíamos poder “recordar” c/operando de la expresión
– Si encontramos un operador
• Los dos últimos operandos recordados son los usados y “olvidados”
• El resultado de la operación, debe ser también “recordado”
– Así, hasta que la expresión termine
Podría ser un una pila
2 veces Pop
Push del
resultado en la
pila
ABC*+ B * C+A
A
B
C
B*C
EN PSEUDOCODIGO
Stack s;
while(no hayamos revisados toda la expresion)
{
simbolo = siguiente elemento
if(simbolo es un operando)
s.push( símbolo );
else{
operando2 = s.pop( );
operando1 = s.pop( );
valor = resultado de operación símbolo entre
operando1 y operando2
s.push( valor );
}
}
return s.pop( );
Pero aun no podemos continuar. Seguimos
comparando el – con el de mayor prioridad
hasta ahora, el +. Como el – no tiene mayor
prioridad que el +, el + ya puede ser añadido
a la expresión. Como ya no queda mas en la
pila,
El – es definitivamente hasta ahora, el de
“mayor prioridad”, debemos recordarlo
Comparado con el de mayor
prioridad hasta ahora(el *), el –
no tiene mayor prioridad.
Ahora si podemos decir, que el *
es el operador de mayor
prioridad
Podemos añadir el * a la nueva
expresion, y “olvidarnos” de el
Aquí terminamos de revisar la
expresión, símbolo por símbolo.
En la pila, quedan aun
operadores.
Todos se sacan y se añaden a la
nueva expresión
Así termina la conversión
+ es un operador, como la
pila esta vacía, mejor,
guardarlo
* Es un operador. Si se
compara con el ultimo
recordado, el * tiene
mayor prioridad. Se
guarda
CONVERSION DE INFIJA A POSFIJA
A + B * C - D A B C * + D -
El operador de mayor
precedencia en la expresión será
el primero en aparecer en la
conversión
A
El operador de
mayor
precedencia es el
primero en
aparecer en la
expresión
A es un operando,
es añadido
directamente a la
nueva expresión en
postfija
+
*
-
B C *+ D -
CONVERSION: ALGORITMO
• Cada símbolo de la expresión es revisado
• Si el símbolo es un operando,
– Se añade a la expresión
• Si el símbolo es un operador
– El símbolo es evaluado con respecto a su prioridad
– Si tiene mayor prioridad que el último operador almacenado
• Aún no se puede decir nada, y se recuerda, es decir, se almacena en un pila
– Si no tiene mayor prioridad que el último operador almacenado
• El último operador almacenado se saca y se añade a la nueva expresión
• Esto sigue hasta que el operador que estamos revisando sea el de mayor
prioridad de todos los almacenados en la pila
• Una vez revisados todos los símbolos de la expresión
– Si hay algo almacenado en la pila, se saca y se añade a la nueva expresión
EN PSEUDOCODIGO
Stack s;
s.clear( );
while(no termine la expresión en infija)
{
símbolo = siguiente carácter de entrada;
if(símbolo es un operando)
añadir símbolo a la nueva expresión posfija
else{
while(símbolo tenga menor o igual precedencia que el tope de la pila)
{
simb_tope = s.pop( );
añadir simb_tope a la nueva exp.
}
s.push( símbolo )
}
}
/*le da salida a los operadores restantes*/
while( !s.empty( ) ){
simb_tope = s.pop( );
añadir simb_tope a la nueva exp. posfija
}
Y CON PARENTESIS
• Lo anterior, es valido para conversión de expresiones
sin paréntesis
• Para resolver este problema, podemos seguir las
siguientes reglas:
– Los paréntesis izquierdos (
• Siempre van a ser añadidos a la pila, pase lo que pase
– Los paréntesis derechos )
• Significa que un ambiente de () ha sido terminado,
• Todos los operadores de la pila, se sacan, hasta encontrar un (
CON PARENTESIS: ALGORITMO
Stack s;
s.clear( );
while(no termine la expresión en infija){
símbolo = siguiente carácter de entrada;
if(símbolo es un operando)
añadir símbolo a la nueva expresión posfija
else{
if(símbolo == ‘)’){
while( true ){
simb_tope = s.pop( );
if (simb_tope == ‘(’ || s.empty( )) break;
añadir simb_tope a la nueva exp.
}
}
else if(simbolo != ‘(’ ){
while(simbolo tenga menor o igual precedencia que el tope de la pila)
simb_tope = s.pop( );
añadir simb_tope a la nueva exp.
}
}
s.push( símbolo )
}
}
/*le da salida a los operadores restantes*/
while( !s.empty( ) )){
simb_tope = s.pop( );
añadir simb_tope a la nueva exp. posfija
}
Escribir el método estático eliminarBase que tenga como argumento una pila
de enteros. El método debe retornar el elemento situado en la base (o fondo)
de la pila. Además, la pila debe quedar con los elementos originales sin la
base.
Escribir el método estático reemplazarElementos que tenga como
argumentos una pila de enteros y dos números (buscar y reemplazo), de
forma que todas las apariciones del número 'buscar' en la pila sean
reemplazadas por el número de reemplazo.
TAREA
• Stack<Integer> pila = new Stack( );
• pila.push(n);
• n = pila.pop( );
• while(! pila.empty( ))
System.out.println( pila.pop( ));

Más contenido relacionado

La actualidad más candente

Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pilajefer
 
Estructura de datos I Primera Parte
Estructura de datos I Primera ParteEstructura de datos I Primera Parte
Estructura de datos I Primera Partecarpio
 
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Eli Diaz
 
Estructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasEstructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasElias Peña
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadasguestbd36f7
 
Estructura de datos I pilas
Estructura de datos I pilasEstructura de datos I pilas
Estructura de datos I pilasgeova666
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colasJose R. Trejo
 
Funcionamiento de un pila2
Funcionamiento de un pila2Funcionamiento de un pila2
Funcionamiento de un pila2jefer
 

La actualidad más candente (18)

Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pila
 
Colas
ColasColas
Colas
 
Pilas
PilasPilas
Pilas
 
Listas Pilas Colas
Listas Pilas ColasListas Pilas Colas
Listas Pilas Colas
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 
Pilas En C++
Pilas En C++Pilas En C++
Pilas En C++
 
Estructura de datos I Primera Parte
Estructura de datos I Primera ParteEstructura de datos I Primera Parte
Estructura de datos I Primera Parte
 
7
77
7
 
Pilas
PilasPilas
Pilas
 
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
 
Estructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasEstructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colas
 
Estructura de Datos (LISTAS, COLAS, PILAS)
Estructura de Datos (LISTAS, COLAS, PILAS)Estructura de Datos (LISTAS, COLAS, PILAS)
Estructura de Datos (LISTAS, COLAS, PILAS)
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Estructura de datos I pilas
Estructura de datos I pilasEstructura de datos I pilas
Estructura de datos I pilas
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Funcionamiento de un pila2
Funcionamiento de un pila2Funcionamiento de un pila2
Funcionamiento de un pila2
 
Python Pilas y Colas
Python Pilas y ColasPython Pilas y Colas
Python Pilas y Colas
 

Similar a 08 pilas1 t2018

Curso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacionCurso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacionLUISFERNANDOMORENOSO2
 
Estructuradatospilasycolas 121106170754-phpapp02
Estructuradatospilasycolas 121106170754-phpapp02Estructuradatospilasycolas 121106170754-phpapp02
Estructuradatospilasycolas 121106170754-phpapp02Z Karina Hernandez A
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colasElbery
 
Pilas Dylan Medina.pdf
Pilas Dylan Medina.pdfPilas Dylan Medina.pdf
Pilas Dylan Medina.pdfDylanMedina4
 
Pilas y Colas
Pilas y ColasPilas y Colas
Pilas y ColasAlex Pin
 
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233GABRIEL64287
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrbviela6
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrbviela6
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrbviela6
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrbviela6
 
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10chrisflores001
 

Similar a 08 pilas1 t2018 (20)

Curso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacionCurso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacion
 
Estructuradatospilasycolas 121106170754-phpapp02
Estructuradatospilasycolas 121106170754-phpapp02Estructuradatospilasycolas 121106170754-phpapp02
Estructuradatospilasycolas 121106170754-phpapp02
 
Estructura de datos pilas y colas
Estructura de datos pilas y colasEstructura de datos pilas y colas
Estructura de datos pilas y colas
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Pilas Dylan Medina.pdf
Pilas Dylan Medina.pdfPilas Dylan Medina.pdf
Pilas Dylan Medina.pdf
 
Pilas y Colas
Pilas y ColasPilas y Colas
Pilas y Colas
 
PILAS
PILASPILAS
PILAS
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Pilas ALAN MENDEZ.pdf
Pilas ALAN MENDEZ.pdfPilas ALAN MENDEZ.pdf
Pilas ALAN MENDEZ.pdf
 
Practica 3
Practica  3Practica  3
Practica 3
 
10 colas1 t2018
10 colas1 t201810 colas1 t2018
10 colas1 t2018
 
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233
TRABAJO JOSE GABRIEL LUCENA PILAS PDF1233
 
DECLARACIÓN DE PILAS.pdf
DECLARACIÓN DE PILAS.pdfDECLARACIÓN DE PILAS.pdf
DECLARACIÓN DE PILAS.pdf
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
 
Estructura de Datos (LISTAS, COLAS y PILAS)
Estructura de Datos (LISTAS, COLAS y PILAS) Estructura de Datos (LISTAS, COLAS y PILAS)
Estructura de Datos (LISTAS, COLAS y PILAS)
 
S6-EDD-3.2 Pilas y colas
S6-EDD-3.2 Pilas y colasS6-EDD-3.2 Pilas y colas
S6-EDD-3.2 Pilas y colas
 

Más de Cindy Adriana Bohórquez Santana

265306183 ecolog-a-impacto-de-la-problem-tica-ambiental-actual-sobre-la-salud...
265306183 ecolog-a-impacto-de-la-problem-tica-ambiental-actual-sobre-la-salud...265306183 ecolog-a-impacto-de-la-problem-tica-ambiental-actual-sobre-la-salud...
265306183 ecolog-a-impacto-de-la-problem-tica-ambiental-actual-sobre-la-salud...Cindy Adriana Bohórquez Santana
 
Unidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UML
Unidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UMLUnidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UML
Unidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UMLCindy Adriana Bohórquez Santana
 

Más de Cindy Adriana Bohórquez Santana (20)

Proyecto parcial1t2018
Proyecto parcial1t2018Proyecto parcial1t2018
Proyecto parcial1t2018
 
265306183 ecolog-a-impacto-de-la-problem-tica-ambiental-actual-sobre-la-salud...
265306183 ecolog-a-impacto-de-la-problem-tica-ambiental-actual-sobre-la-salud...265306183 ecolog-a-impacto-de-la-problem-tica-ambiental-actual-sobre-la-salud...
265306183 ecolog-a-impacto-de-la-problem-tica-ambiental-actual-sobre-la-salud...
 
20152 sfiec030121 1
20152 sfiec030121 120152 sfiec030121 1
20152 sfiec030121 1
 
4 estructuras enlazadas
4 estructuras enlazadas4 estructuras enlazadas
4 estructuras enlazadas
 
12 conjuntos mapas1t2018
12 conjuntos mapas1t201812 conjuntos mapas1t2018
12 conjuntos mapas1t2018
 
11 colas prioridad1t2018
11 colas prioridad1t201811 colas prioridad1t2018
11 colas prioridad1t2018
 
09 pilas aplicaciones1t2018
09 pilas aplicaciones1t201809 pilas aplicaciones1t2018
09 pilas aplicaciones1t2018
 
06 listas1 t2018
06 listas1 t201806 listas1 t2018
06 listas1 t2018
 
05 listas1 t2018
05 listas1 t201805 listas1 t2018
05 listas1 t2018
 
04 recursividad1 t2018
04 recursividad1 t201804 recursividad1 t2018
04 recursividad1 t2018
 
03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
02 tda1 t2018
02 tda1 t201802 tda1 t2018
02 tda1 t2018
 
Unidad 5 VARIABLES Y MÉTODOS ESTÁTICOS
Unidad 5 VARIABLES Y MÉTODOS ESTÁTICOSUnidad 5 VARIABLES Y MÉTODOS ESTÁTICOS
Unidad 5 VARIABLES Y MÉTODOS ESTÁTICOS
 
Unidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UML
Unidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UMLUnidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UML
Unidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UML
 
Unidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIASUnidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIAS
 
Unidad 2 Sintaxis en java
Unidad 2 Sintaxis en javaUnidad 2 Sintaxis en java
Unidad 2 Sintaxis en java
 
Unidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a ObjetosUnidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a Objetos
 
Teoria basica probabilidad_2015_4_ed
Teoria basica probabilidad_2015_4_edTeoria basica probabilidad_2015_4_ed
Teoria basica probabilidad_2015_4_ed
 
Tema3 probabilidades
Tema3 probabilidadesTema3 probabilidades
Tema3 probabilidades
 
Ejercicios calculo probabilidades
Ejercicios calculo probabilidadesEjercicios calculo probabilidades
Ejercicios calculo probabilidades
 

Último

PETROLEO triptico para estudiantes de educacion
PETROLEO triptico para estudiantes de educacionPETROLEO triptico para estudiantes de educacion
PETROLEO triptico para estudiantes de educacionctrlc3
 
PresentaciónReto_Equipo6 Explicacion del reto de freno electromagnetico
PresentaciónReto_Equipo6 Explicacion del reto de freno electromagneticoPresentaciónReto_Equipo6 Explicacion del reto de freno electromagnetico
PresentaciónReto_Equipo6 Explicacion del reto de freno electromagneticoa00834109
 
&PLC Ladder.pdf automatización industrial
&PLC Ladder.pdf automatización industrial&PLC Ladder.pdf automatización industrial
&PLC Ladder.pdf automatización industrialjulianmayta1
 
Mapa de carreteras de Colombia 2022 INVIAS
Mapa de carreteras de Colombia 2022 INVIASMapa de carreteras de Colombia 2022 INVIAS
Mapa de carreteras de Colombia 2022 INVIASAlfonsoRosalesFonsec
 
LA SEÑALES ANALOGICAS Y LAS SEÑALES DIGITALES
LA SEÑALES ANALOGICAS Y LAS SEÑALES DIGITALESLA SEÑALES ANALOGICAS Y LAS SEÑALES DIGITALES
LA SEÑALES ANALOGICAS Y LAS SEÑALES DIGITALESLuisLobatoingaruca
 
Trabajo Mecanismos de cuatro barras.pdf
Trabajo  Mecanismos de cuatro barras.pdfTrabajo  Mecanismos de cuatro barras.pdf
Trabajo Mecanismos de cuatro barras.pdfIvanIsraelPiaColina
 
Algebra, Trigonometria y Geometria Analitica.pdf
Algebra, Trigonometria y Geometria Analitica.pdfAlgebra, Trigonometria y Geometria Analitica.pdf
Algebra, Trigonometria y Geometria Analitica.pdffrankysteven
 
Flujograma de gestión de pedidos de usuarios.
Flujograma de gestión de pedidos de usuarios.Flujograma de gestión de pedidos de usuarios.
Flujograma de gestión de pedidos de usuarios.thatycameron2004
 
IMPORTANCIA DE LOS LIPIDOS EN FARMACIA.pdf
IMPORTANCIA DE LOS LIPIDOS EN FARMACIA.pdfIMPORTANCIA DE LOS LIPIDOS EN FARMACIA.pdf
IMPORTANCIA DE LOS LIPIDOS EN FARMACIA.pdfJonathanFernandoRodr
 
Mecanismo de cuatro barras articuladas!!
Mecanismo de cuatro barras articuladas!!Mecanismo de cuatro barras articuladas!!
Mecanismo de cuatro barras articuladas!!shotter2005
 
Mecanismos de transferencia de un generador de vapor
Mecanismos de transferencia de un generador de vaporMecanismos de transferencia de un generador de vapor
Mecanismos de transferencia de un generador de vaporalema3825
 
CONTROL DE MOTORES DE CORRIENTE ALTERNA PPT
CONTROL DE MOTORES DE CORRIENTE ALTERNA  PPTCONTROL DE MOTORES DE CORRIENTE ALTERNA  PPT
CONTROL DE MOTORES DE CORRIENTE ALTERNA PPTLuisLobatoingaruca
 
Ergonomía_MÉTODO_ROSA. Evaluación de puesto de trabajo de oficina - coworking
Ergonomía_MÉTODO_ROSA. Evaluación de puesto de trabajo de oficina - coworkingErgonomía_MÉTODO_ROSA. Evaluación de puesto de trabajo de oficina - coworking
Ergonomía_MÉTODO_ROSA. Evaluación de puesto de trabajo de oficina - coworkingGonzalo141557
 
habilidad para el manejo de estación total.pdf
habilidad para el manejo de estación total.pdfhabilidad para el manejo de estación total.pdf
habilidad para el manejo de estación total.pdfJosemanuelMayradamia
 
El abecedario constituye el conjunto de grafías que son utilizadas para repre...
El abecedario constituye el conjunto de grafías que son utilizadas para repre...El abecedario constituye el conjunto de grafías que son utilizadas para repre...
El abecedario constituye el conjunto de grafías que son utilizadas para repre...MarjorieDeLeon12
 
Diagrama de flujo "Resolución de problemas".pdf
Diagrama de flujo "Resolución de problemas".pdfDiagrama de flujo "Resolución de problemas".pdf
Diagrama de flujo "Resolución de problemas".pdfjoseabachesoto
 
Deilybeth Alaña - Operaciones Básicas - Construcción
Deilybeth Alaña - Operaciones Básicas - ConstrucciónDeilybeth Alaña - Operaciones Básicas - Construcción
Deilybeth Alaña - Operaciones Básicas - ConstrucciónDeilybethAinellAlaaY
 
matematicas en la ingenieria de la construccion
matematicas en la ingenieria de la construccionmatematicas en la ingenieria de la construccion
matematicas en la ingenieria de la construccionalberto891871
 
Plan de Desarrollo Urbano de la Municipalidad Provincial de Ilo
Plan de Desarrollo Urbano de la Municipalidad Provincial de IloPlan de Desarrollo Urbano de la Municipalidad Provincial de Ilo
Plan de Desarrollo Urbano de la Municipalidad Provincial de IloAlbertoRiveraPrado
 

Último (20)

Tasaciones Ñuñoa - La Reina - Las Condes
Tasaciones Ñuñoa - La Reina - Las CondesTasaciones Ñuñoa - La Reina - Las Condes
Tasaciones Ñuñoa - La Reina - Las Condes
 
PETROLEO triptico para estudiantes de educacion
PETROLEO triptico para estudiantes de educacionPETROLEO triptico para estudiantes de educacion
PETROLEO triptico para estudiantes de educacion
 
PresentaciónReto_Equipo6 Explicacion del reto de freno electromagnetico
PresentaciónReto_Equipo6 Explicacion del reto de freno electromagneticoPresentaciónReto_Equipo6 Explicacion del reto de freno electromagnetico
PresentaciónReto_Equipo6 Explicacion del reto de freno electromagnetico
 
&PLC Ladder.pdf automatización industrial
&PLC Ladder.pdf automatización industrial&PLC Ladder.pdf automatización industrial
&PLC Ladder.pdf automatización industrial
 
Mapa de carreteras de Colombia 2022 INVIAS
Mapa de carreteras de Colombia 2022 INVIASMapa de carreteras de Colombia 2022 INVIAS
Mapa de carreteras de Colombia 2022 INVIAS
 
LA SEÑALES ANALOGICAS Y LAS SEÑALES DIGITALES
LA SEÑALES ANALOGICAS Y LAS SEÑALES DIGITALESLA SEÑALES ANALOGICAS Y LAS SEÑALES DIGITALES
LA SEÑALES ANALOGICAS Y LAS SEÑALES DIGITALES
 
Trabajo Mecanismos de cuatro barras.pdf
Trabajo  Mecanismos de cuatro barras.pdfTrabajo  Mecanismos de cuatro barras.pdf
Trabajo Mecanismos de cuatro barras.pdf
 
Algebra, Trigonometria y Geometria Analitica.pdf
Algebra, Trigonometria y Geometria Analitica.pdfAlgebra, Trigonometria y Geometria Analitica.pdf
Algebra, Trigonometria y Geometria Analitica.pdf
 
Flujograma de gestión de pedidos de usuarios.
Flujograma de gestión de pedidos de usuarios.Flujograma de gestión de pedidos de usuarios.
Flujograma de gestión de pedidos de usuarios.
 
IMPORTANCIA DE LOS LIPIDOS EN FARMACIA.pdf
IMPORTANCIA DE LOS LIPIDOS EN FARMACIA.pdfIMPORTANCIA DE LOS LIPIDOS EN FARMACIA.pdf
IMPORTANCIA DE LOS LIPIDOS EN FARMACIA.pdf
 
Mecanismo de cuatro barras articuladas!!
Mecanismo de cuatro barras articuladas!!Mecanismo de cuatro barras articuladas!!
Mecanismo de cuatro barras articuladas!!
 
Mecanismos de transferencia de un generador de vapor
Mecanismos de transferencia de un generador de vaporMecanismos de transferencia de un generador de vapor
Mecanismos de transferencia de un generador de vapor
 
CONTROL DE MOTORES DE CORRIENTE ALTERNA PPT
CONTROL DE MOTORES DE CORRIENTE ALTERNA  PPTCONTROL DE MOTORES DE CORRIENTE ALTERNA  PPT
CONTROL DE MOTORES DE CORRIENTE ALTERNA PPT
 
Ergonomía_MÉTODO_ROSA. Evaluación de puesto de trabajo de oficina - coworking
Ergonomía_MÉTODO_ROSA. Evaluación de puesto de trabajo de oficina - coworkingErgonomía_MÉTODO_ROSA. Evaluación de puesto de trabajo de oficina - coworking
Ergonomía_MÉTODO_ROSA. Evaluación de puesto de trabajo de oficina - coworking
 
habilidad para el manejo de estación total.pdf
habilidad para el manejo de estación total.pdfhabilidad para el manejo de estación total.pdf
habilidad para el manejo de estación total.pdf
 
El abecedario constituye el conjunto de grafías que son utilizadas para repre...
El abecedario constituye el conjunto de grafías que son utilizadas para repre...El abecedario constituye el conjunto de grafías que son utilizadas para repre...
El abecedario constituye el conjunto de grafías que son utilizadas para repre...
 
Diagrama de flujo "Resolución de problemas".pdf
Diagrama de flujo "Resolución de problemas".pdfDiagrama de flujo "Resolución de problemas".pdf
Diagrama de flujo "Resolución de problemas".pdf
 
Deilybeth Alaña - Operaciones Básicas - Construcción
Deilybeth Alaña - Operaciones Básicas - ConstrucciónDeilybeth Alaña - Operaciones Básicas - Construcción
Deilybeth Alaña - Operaciones Básicas - Construcción
 
matematicas en la ingenieria de la construccion
matematicas en la ingenieria de la construccionmatematicas en la ingenieria de la construccion
matematicas en la ingenieria de la construccion
 
Plan de Desarrollo Urbano de la Municipalidad Provincial de Ilo
Plan de Desarrollo Urbano de la Municipalidad Provincial de IloPlan de Desarrollo Urbano de la Municipalidad Provincial de Ilo
Plan de Desarrollo Urbano de la Municipalidad Provincial de Ilo
 

08 pilas1 t2018

  • 1. TDA PILA Estructuras de Datos CCPG1006
  • 2. LA PILA: UN TDA SIMPLE • Uno de los conceptos más útiles en computación es la pila o stack • Es un conjunto de elementos, en la que: • Los elementos se añaden y se remueven por un solo extremo • Este extremo es llamado “tope” de la pila La última en llegar, será la primera en salir: LAST IN, FIRST OUT LIFO Ejemplo:  Cuando un empleado se va de vacaciones, le llega correo a su escritorio.  Las cartas se van “apilando”.  Al regresar de vacaciones, la última carga en llegar, será la primera que revisara  Al terminar de revisarla, la nueva carta del tope de la pila habrá cambiado  Del “pilo” de cartas, la más nueva que queda, será la siguiente en ser revisada
  • 3. TDA PILA (STACK): DEFINICION Dada una Pila llamada S – ¿Qué datos serían importantes conocer sobre la Pila? – ¿Y que operaciones podríamos efectuar a la misma? S.push(elemento1) Elemento 1 Tope o Cima S.push(elemento2) Elemento 2 S.push(elemento3) Elemento 3 S.pop() EstaVacia? NoSi  Al revisar c/carta, se la “sacaba” de la pila  elemento = pila.pop()  La operación pop remueve el elemento Tope de la pila y lo retorna. La pila disminuye su tamaño Usemos el ejemplo del correo:  Al acumularse,  Cada carta(elemento), era “metida” a la pila: pila.push(elemento)  La operación push aumenta un elemento a la pila, y esta aumenta en su tamaño
  • 4. Al remover el último elemento de una pila esta queda vacía • Una vez vacía, no se pueden “sacar” más elementos de la pila Antes de sacar un elemento de la pila • Debemos saber si la pila Esta Vacía?: size() == 0 El tope de la pila siempre esta cambiando • Deberíamos poder “revisar” el elemento tope de la pila: peek() • Si la pila esta vacía, no debe existir un valor tope El tratar de remover elementos o acceder a elementos de una pila vacía se llama • SUBDESBORDAMIENTO de la pila TDA PILA (STACK): DEFINICION
  • 5. PILA: OPERACIONES size() retorna -> int Efecto: Devuelve el tamaño push(elemento) Efecto: Aumenta el tamaño de la pila, poniendo el elemento en la cima (tope) pop() retorna -> elemento Efecto: Remueve el elemento tope y lo retorna Excepcion: Si la pila esta vacía, produce error peek() retorna -> elemento Efecto: Devuelve el elemento tope de la pila Excepcion: Si la pila esta vacía produce error
  • 6. TDA PILA: DEFINICION FORMAL • En conclusión: – La pila es un conjunto de elementos – De los cuales solo conozco y puedo ver el TOPE • Cada elemento en la pila – Puede contener información de cualquier tipo, es decir, es genérico <pila> ::= <tope> + {<nodo>} <tope> ::= <enlace> <enlace> ::= (<Nodo> | NULL) <nodo> ::= <contenido> + <enlace> <contenido> ::= <<dato>>
  • 7. TDA PILA: IMPLEMENTACION Hay varias formas, analicemos la más sencilla La Pila es una Lista… pero limitada – En la lista los nuevos nodos se pueden insertar y remover: Al/del Inicio, al final, dada una posición, etc. – En la Pila los elementos solo se pueden: • insertar al final y solo se pueden remover del final. • insertar al inicio y solo se pueden remover del inicio. Las implementaciones – Estática – Dinámica
  • 8. IMPLEMENTACION ESTATICA Pila basada en arreglos Las operaciones sobre el arreglo – push – pop – peek MAX_ELEM Tope = -1 Tope = MAX_ELEM-1 Tope = 0
  • 11. IMPLEMENTACION DINAMICA • Una pila, o una cola, las dos son Listas realmente – Listas en las cuales las operaciones en Insertar y Remover están limitadas • Una pila, se implementa exactamente igual que una Lista – Al hacer push, es InsertarNodoFinal (o inicio) – Al hacer pop, es SacarNodoFinal (o inicio)
  • 13. EJEMPLO • Las pilas se usan para – Recuperar un conjunto de elementos en orden inverso a como se introdujeron • Ejemplo: Un programa debe – Leer una secuencia de elementos enteros – Luego mostrarlos en orden inverso al ingresado • Si se ingresa: 1, 3, 5, 7 • Se muestra: 7, 5, 3, 1
  • 14. ANALISIS • Cada elemento ingresado puede ser “metido” en la pila • Ejemplo: 1 3 5 7 1 3 5 1 3 1 7 5 3 1 Una vez llenada la pila, Solo hay que “sacar”, elemento tras elemento Hasta que la pila quede vacía
  • 15. SOLUCION Stack<Integer> pila = new Stack( ); System.out.println("Ingrese numero"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); while(n!= centinela){ pila.push(n); System.out.println("Ingrese numero"); n = sc.nextInt(); } while(! pila.empty( )){ System.out.println(pila.pop( )); }
  • 16. UN APLICACION MAS PRACTICA • El compilador siempre sabe cuando se ha escrito un paréntesis, o una llave de más • (a+b)) Mal • ((a+b) * c / 4*g-h) OK • Con el uso de pilas, se puede reconocer los paréntesis que no coinciden • ¿Como lograr esta aplicación de la pila?
  • 17. • Cuando revisamos una expresión de este tipo: – Revisamos los paréntesis de la derecha, y buscamos si tienen “match” en la izquierda Para seguir este enfoque podríamos: “Recordar” los paréntesis de la izquierda ( a medida que aparecen:  El primero en aparecer, será el último en ser “recordado”  El último en aparecer, será el primero en ser “recordado” La Pila se utiliza justamente para “recordar” de la forma abajo indicada 7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5)) Así, cuando aparece un )  El primer ( recordado, debe ser su “match”  En ese momento, este primero recordado, ya puede ser “olvidado”  Al llegar al final de la expresión, ningún ( debería ser “recordado” 7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5)) ANALISIS DEL PROBLEMA
  • 18. APLICANDO PILAS Revisemos la expresión anterior Todos los ), encontraron su ( 7 - ( ( X *( ( X+Y) / ( J - 3) ) +Y) / ( 4- 2) ) ( ( ( (
  • 19. Y AHORA, EL ALGORITMO Stack<String> s = new Stack(); int i =0; while(i<cadena.length())//Mientras no hayamos leido toda la cadena { //evaluar el siguiente simbolo de la expresion if(cadena.charAt(i)=='(') s.push('('); /*Almacenarlo*/ if(cadena.charAt(i)== ')'){ /*Buscar match*/ if(s.empty()) /*No hubo match!!*/ return false s.pop(); }i++; } if(s.empty()) return true; else /*Algun simbolo se quedo dentro, porque no hubo match*/ return false;
  • 20. • Una expresión aritmética: – Conjunto de operadores, variables y paréntesis. Ejemplo: • A+B • Esta forma de escribir las expresiones: NOTACION INFIJA • El operador siempre va en medio de los operandos • En una expresión, las operaciones se “ejecutan” en un cierto orden – A+B*C no es igual que (A+B)*C – Cada operador tiene su nivel de precedencia, recordemos: • Paréntesis : () Mayor prioridad • Potencia : ^ • Multiplicación/división: *,/ • Suma/Resta : +,- Menor Prioridad APLICANDO PILAS
  • 21. NOTACIONES • La notación infija es la más popular • No es la única forma, hay dos más – NOTACION PREFIJA(POLACA) • +AB Aquí el operador va antes que los operandos – NOTACION POSFIJA(POLACA INVERSA) • AB+ Aquí el operador va después que los operandos • Siempre tener en cuenta la precedencia de los operadores • Ejemplo. Pasar a postfija las siguientes expresiones:  Agrupar como establece la precedencia  (A+B)*C  Convertir operación por operación  La de mayor precedencia primero  (AB+)*C  La que le sigue en precedencia  (AB+)C*  Remover Paréntesis  AB+C* Ya no se necesitan paréntesis En postfija, el orden de los operadores es el verdadero orden de ejecución A+B*C (A+B)*C  Agrupar como establece la precedencia  A+(B*C)  Convertir operación por operación  La de mayor precedencia primero  A+(BC*)  La que le sigue en precedencia  A(BC*)+  Remover Paréntesis  ABC*+
  • 22. EVALUACION DE EXPRESIONES POSFIJAS • Dadas – AB+C* – ABC*+ – Evalúelas, cuando A = 3, B = 4 y C = 5 – La primera, resultado : 35 – La segunda, resultado: 23 • Que algoritmo se siguió para evaluar estas expresiones? AB+C* ABC*+ A+B -> 7 7*C -> 35 B*C -> 20 A+20 -> 23 7C* A20+
  • 23. EVALUACION: ALGORITMO • Con lo anterior, ya tenemos una idea de que hacer – Deberíamos poder “recordar” c/operando de la expresión – Si encontramos un operador • Los dos últimos operandos recordados son los usados y “olvidados” • El resultado de la operación, debe ser también “recordado” – Así, hasta que la expresión termine Podría ser un una pila 2 veces Pop Push del resultado en la pila ABC*+ B * C+A A B C B*C
  • 24. EN PSEUDOCODIGO Stack s; while(no hayamos revisados toda la expresion) { simbolo = siguiente elemento if(simbolo es un operando) s.push( símbolo ); else{ operando2 = s.pop( ); operando1 = s.pop( ); valor = resultado de operación símbolo entre operando1 y operando2 s.push( valor ); } } return s.pop( );
  • 25. Pero aun no podemos continuar. Seguimos comparando el – con el de mayor prioridad hasta ahora, el +. Como el – no tiene mayor prioridad que el +, el + ya puede ser añadido a la expresión. Como ya no queda mas en la pila, El – es definitivamente hasta ahora, el de “mayor prioridad”, debemos recordarlo Comparado con el de mayor prioridad hasta ahora(el *), el – no tiene mayor prioridad. Ahora si podemos decir, que el * es el operador de mayor prioridad Podemos añadir el * a la nueva expresion, y “olvidarnos” de el Aquí terminamos de revisar la expresión, símbolo por símbolo. En la pila, quedan aun operadores. Todos se sacan y se añaden a la nueva expresión Así termina la conversión + es un operador, como la pila esta vacía, mejor, guardarlo * Es un operador. Si se compara con el ultimo recordado, el * tiene mayor prioridad. Se guarda CONVERSION DE INFIJA A POSFIJA A + B * C - D A B C * + D - El operador de mayor precedencia en la expresión será el primero en aparecer en la conversión A El operador de mayor precedencia es el primero en aparecer en la expresión A es un operando, es añadido directamente a la nueva expresión en postfija + * - B C *+ D -
  • 26. CONVERSION: ALGORITMO • Cada símbolo de la expresión es revisado • Si el símbolo es un operando, – Se añade a la expresión • Si el símbolo es un operador – El símbolo es evaluado con respecto a su prioridad – Si tiene mayor prioridad que el último operador almacenado • Aún no se puede decir nada, y se recuerda, es decir, se almacena en un pila – Si no tiene mayor prioridad que el último operador almacenado • El último operador almacenado se saca y se añade a la nueva expresión • Esto sigue hasta que el operador que estamos revisando sea el de mayor prioridad de todos los almacenados en la pila • Una vez revisados todos los símbolos de la expresión – Si hay algo almacenado en la pila, se saca y se añade a la nueva expresión
  • 27. EN PSEUDOCODIGO Stack s; s.clear( ); while(no termine la expresión en infija) { símbolo = siguiente carácter de entrada; if(símbolo es un operando) añadir símbolo a la nueva expresión posfija else{ while(símbolo tenga menor o igual precedencia que el tope de la pila) { simb_tope = s.pop( ); añadir simb_tope a la nueva exp. } s.push( símbolo ) } } /*le da salida a los operadores restantes*/ while( !s.empty( ) ){ simb_tope = s.pop( ); añadir simb_tope a la nueva exp. posfija }
  • 28. Y CON PARENTESIS • Lo anterior, es valido para conversión de expresiones sin paréntesis • Para resolver este problema, podemos seguir las siguientes reglas: – Los paréntesis izquierdos ( • Siempre van a ser añadidos a la pila, pase lo que pase – Los paréntesis derechos ) • Significa que un ambiente de () ha sido terminado, • Todos los operadores de la pila, se sacan, hasta encontrar un (
  • 29. CON PARENTESIS: ALGORITMO Stack s; s.clear( ); while(no termine la expresión en infija){ símbolo = siguiente carácter de entrada; if(símbolo es un operando) añadir símbolo a la nueva expresión posfija else{ if(símbolo == ‘)’){ while( true ){ simb_tope = s.pop( ); if (simb_tope == ‘(’ || s.empty( )) break; añadir simb_tope a la nueva exp. } } else if(simbolo != ‘(’ ){ while(simbolo tenga menor o igual precedencia que el tope de la pila) simb_tope = s.pop( ); añadir simb_tope a la nueva exp. } } s.push( símbolo ) } } /*le da salida a los operadores restantes*/ while( !s.empty( ) )){ simb_tope = s.pop( ); añadir simb_tope a la nueva exp. posfija }
  • 30. Escribir el método estático eliminarBase que tenga como argumento una pila de enteros. El método debe retornar el elemento situado en la base (o fondo) de la pila. Además, la pila debe quedar con los elementos originales sin la base. Escribir el método estático reemplazarElementos que tenga como argumentos una pila de enteros y dos números (buscar y reemplazo), de forma que todas las apariciones del número 'buscar' en la pila sean reemplazadas por el número de reemplazo. TAREA • Stack<Integer> pila = new Stack( ); • pila.push(n); • n = pila.pop( ); • while(! pila.empty( )) System.out.println( pila.pop( ));