SlideShare une entreprise Scribd logo
1  sur  20
TDA PILA
ESTRUCTURAS DE DATOS
LA PILA: UN TDA SIMPLE
 Uno de los conceptos mas utiles en computacion 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 ultima en llegar,
sera 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 ultima carga en llegar, sera la primera que revisara
 Al terminar de revisarla, la nueva carta del tope de la pila habra cambiado
 Del “pilo” de cartas, la mas nueva que queda, sera la siguiente en ser revisada
TDA PILA: DEFINICION
 Dada una Pila llamada S
 ¿Qué datos serian importantes conocer sobre la Pila?
 ¿Y que operaciones podriamos efectuar a la misma?
Push(s,elemento1)
Elemento 1
Tope
o Cima
Push(s,elemento2)
Elemento 2
Push(S,elemento3)
Elemento 3
Pop(S)
EstaVacia?NoSi
 Al revisar c/carta, se la “sacaba” de la pila
 elemento = pop(s)
 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:
push(s,elemento)
 La operación push aumenta un elemento a la pila,
y esta aumenta en su tamaño
PILA: OPERACIONES
EliminarPila(Pila)
Efecto: recibe una pila y la libera completamente
EstaVacia(Pila) retorna -> Boolean
Efecto: Devuelve true si esta vacia y false en caso contrario
Push(pila, elemento)
Efecto: Toma la pila y aumenta su tamaño, poniendo
el elemento en la cima de la pila
Pop(Pila) retorna -> elemento
Efecto: Recibe la pila, remueve el elemento tope y lo retorna
Excepcion: Si la pila esta vacia, produce error
TopePila(Pila) retorna -> elemento
Efecto: Devuelve el elemento cima de la pila
Excepcion: Si la pila esta vacia produce error
InicializarPila(Pila)
Efecto: recibe una pila y la inicializa para su trabajo normal
TDA PILA: DEFINICION
FORMAL
<pila> ::= <tope> + {<nodo>}
<tope> ::= <enlace>
<enlace> ::= (<<ReferenciaNodo>> | NULL)
<nodo> ::= <contenido> + <enlace>
<contenido> ::= <<dato>>{<<dato>>}
 En conclusion:
 La pila es un conjunto de elementos
 De los cuales solo conozco y puedo ver el TOPE
 Cada elemento en la pila
 Puede contener informacion de cualquier tipo, es decir, es generico
OTRAS OPERACIONES
 Al remover el ultimo elemento de una pila esta queda vacia
 Una vez vacia, no se pueden “sacar” mas elementos de la pila
 Antes de sacar un elemento de la pila
 Debemos saber si la pila Esta Vacia?: EstaVacia(s)
 El tope de la pila siempre esta cambiando
 Deberiamos poder “revisar” el elemento tope de la pila: TopePila(s)
 Si la pila esta vacia, no debe existir un valor tope
 El tratar de remover elementos o acceder a elementos de una pila
vacia se llama
 SUBDESBORDAMIENTO de la pila
TDA PILA:
IMPLEMENTACION
 Hay varias formas, analicemos la mas 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 posicion, etc.
 En la Pila los elementos solo se pueden insertar al final de la
Pila
 Y solo se pueden remover del Final de la Pila
 Las impelmentaciones de la Lista Simplemente Enlazada
 Estatica o Dinamica
 Nos sirven perfectamente para la Pila
IMPLEMENTACION
ESTATICA
 La Pila seria una Lista Contigua
 typededef LCont Pila;
 Y solo deberemos implementar las operaciones de
 Push, llamando a InsertarNodoFinal
 Pop, llamando a SacarNodoFinal
 TopePila, llamando a ConsultarUltimo
 … es decir, cada operación de la pila esconde dentro
 Las operaciones de la Lista Contigua
MAX_ELEM
Tope = -1
Tope =
MAX_ELEM-1
Tope = 0
Y LAS OPERACIONES?
 Pila_Crear
 Recibe una pila y la devuelve vacia
 Pila_EstaVacia
 Una pila esta vacia, cuando su tope
es menor que el fondo de la pila
 ¿Cómo serian el resto de operaciones no basicas?
bool Pila_EstaVacia(Pila s){
return(LCont_EstaVacia(s));
}
void Pila_Inicializar(Pila *s, int max)
{
LCont_Crear(s,max);
}
OPERACIONES BASICAS DE
LA PILA
 Pop
 Remueve el elemento tope de la pila, y
lo devuelve.
 Recuerde, el tope cambia
 Si la pila esta vacia, no se puede sacar
nada
 Error, y devuelve valor invalido
Generico Pila_Pop(Pila *s){
return(LCont_SacaNodoFinal(s));
}
void Pila_Push(Pila *s, Generico G){
LCont_InsertarNodoFin(s,G);
}
 Push
 Inserta un elemento en la pila, cuando
se puede
 Si la pila esta llena, no se puede
insertar
 Error
 Este elemento es el nuevo tope
 El tope aumenta
IMPLEMENTACION
DINAMICA
 Una pila, o una cola, las dos son Listas realmente
 Listas en las cuales las operaciones en Insertar y Remover estan
limitadas
 Una pila, se implemente exactamente igual que una Lista
 Al hacer Pop, es SacarNodoFinal
 Al hacer Push, es InsertarNodoFinal
typedef LSE Pila;
EJERCICIO EN CLASE
 Las pilas se usan cuando para
 Recuperar un conjunto de elementos en orden inverso a como
se introdujeron
 Un programa debe
 Leer una secuencia de elementos enteros
 Luego mostrarlos en orden inverso al ingresado
 Ejemplo:
 Si se ingresa: 1, 3, 5, 7
 Se mostrara: 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
vacia
SOLUCION
Begin{
Pila S;
Generico dato;
InicializarPila(S);
while(TRUE){
write(“Ingrese elemento:”);
read(dato)
if(dato == centinela) break;
Push(S,dato);
}
while(!EstaVacia(S)){
write(Pop(s));
}
}
UN APLICACIÓN MAS
PRACTICA
 El compilador siempre sabe cuando se ha escrito un
parentesis, o una llave de mas
 ¿Como lo hace?
 Con el uso de pilas, expresiones escritas:
 (a+b)) Mal
 ((a+b) * c / 4*g-h) OK
 Se puede reconocer los parentesis que no coinciden
 ¿Como lograr esta aplicación de la pila?
ANALISIS DEL PROBLEMA
 Cuando los parentesis coincicen:
 Al final de la expresion
 Total parentesis izq = Total parentesis der y
 En todo momento, en cualquier punto de la expresion
 Cada parentesis der. esta precedido de uno izq
 Acum. parentesis der. siempre es <= que Acum. Parentesis izq
 Por ejemplo:
7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5))
(A+B)) + 3 Al final de la
expresion:
Total ( = 1
Total ) = 2
En este punto de la expresion, ya se sabe
que es incorrecta
Acum ( = 1
Acum ) = 2
No se cumple la regla
PRIMER ENFOQUE
 Podemos llevar un conteo de
parentesis
 Este deberia llevar totales de ) y
de (
 Acum. Parentesis Izq - Acum.
Parentesis Der
 Este valor siempre debera ser
positivo
 Si en algun momento, al revisar
la expresion, el conteo de
parentesis es negativo:
 BINGO, hay un error
valida = true;
while(no hayamos revisado toda la
expresion)
{
if (elemento_actual == ‘(‘)
Total_der++;
else if(elemento_actual == ‘)’)
Total_izq++;
if(Total_der > Total_izq){
valida = false;
break;
}
}
if (Total_der != Total_izq)
valida = false;
UN ENFOQUE MAS NATURAL
 Otra forma, es la “forma natural”
 Cuando revisamos una expresion de este tipo:
 Revisamos los parentesis de la derecha, y buscamos sin tienen “match” en la izquierda
 Para seguir este enfoque podriamos:
 “Recordar” los parentesis de la izquierda ( a medida que aparecen:
 El primero en aparecer, sera el ultimo en ser “recordado”
 El ultimo en aparecer, sera el primero en ser “recordado”
La Pila se utiliza
justamente para
“recordar” de la forma
abajo indicada
Pop el
parentesis )
encontrado
7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5))
 Asi, 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 expresion, ningun ( deberia ser “recordado”
APLICANDO PILAS
 Veamos, revisemos justo la expresion anterior
Todos los ),
encontraron su (
7 - ( ( X *( ( X+Y) / ( J- 3) ) +Y) / ( 4- 2) )
(
(
(
(
Y AHORA, EL ALGORITMO
Pila S; /*Se declara una pila s, para almacenar los ( */
Pila_Inicializar(&S);
while(no hayamos leido toda la cadena)
{
//tomar el siguiente simbolo de la expresion
if(simbolo = ‘(‘) /*Almacenarlo*/
Pila_Push(&S,simbolo);
if(simbolo = ‘)’){ /*Buscar match*/
if(Pila_EstaVacia(S)) { /*No hubo match!!*/
return(FALSE)
Pila_Pop(&s);
}
}
if(Pila_EstaVacia(s)) /*Algun simbolo se quedo dentro,
porque no hubo match*/
return TRUE;
Else
return FALSE;

Contenu connexe

Tendances

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
Elias Peña
 
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
 
Ejercicios pilas y_colas
Ejercicios pilas y_colasEjercicios pilas y_colas
Ejercicios pilas y_colas
kelvinst
 
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
chrisflores001
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
guestbd36f7
 
10. aplicaciones de las pilas
10. aplicaciones de las pilas10. aplicaciones de las pilas
10. aplicaciones de las pilas
Andreita Enriquez
 
Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datos
mariajuly
 

Tendances (19)

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
 
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
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 
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)
 
Pilas
PilasPilas
Pilas
 
Ejercicios pilas y_colas
Ejercicios pilas y_colasEjercicios pilas y_colas
Ejercicios pilas y_colas
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
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
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Codigo para implementar pilas en java
Codigo para implementar pilas en javaCodigo para implementar pilas en java
Codigo para implementar pilas en java
 
Estructura de Datos (LISTAS, COLAS, PILAS)
Estructura de Datos (LISTAS, COLAS, PILAS)Estructura de Datos (LISTAS, COLAS, PILAS)
Estructura de Datos (LISTAS, COLAS, PILAS)
 
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
 
10. aplicaciones de las pilas
10. aplicaciones de las pilas10. aplicaciones de las pilas
10. aplicaciones de las pilas
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Apuntadores y listas
Apuntadores y listasApuntadores y listas
Apuntadores y listas
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datos
 

Similaire à PILAS

Funcionamiento de un pila2
Funcionamiento de un pila2Funcionamiento de un pila2
Funcionamiento de un pila2
jefer
 
Funcionamiento de un pila2
Funcionamiento de un pila2Funcionamiento de un pila2
Funcionamiento de un pila2
jefer
 
Ejercicios evaluados i. shearly achji y ricardo ros. estructuras de datos i. ...
Ejercicios evaluados i. shearly achji y ricardo ros. estructuras de datos i. ...Ejercicios evaluados i. shearly achji y ricardo ros. estructuras de datos i. ...
Ejercicios evaluados i. shearly achji y ricardo ros. estructuras de datos i. ...
Ricardo Ros
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
Elbery
 

Similaire à PILAS (20)

08 pilas1 t2018
08 pilas1 t201808 pilas1 t2018
08 pilas1 t2018
 
PILAS
PILASPILAS
PILAS
 
7
77
7
 
Pilas Dylan Medina.pdf
Pilas Dylan Medina.pdfPilas Dylan Medina.pdf
Pilas Dylan Medina.pdf
 
DECLARACIÓN DE PILAS.pdf
DECLARACIÓN DE PILAS.pdfDECLARACIÓN DE PILAS.pdf
DECLARACIÓN DE PILAS.pdf
 
Pilas ALAN MENDEZ.pdf
Pilas ALAN MENDEZ.pdfPilas ALAN MENDEZ.pdf
Pilas ALAN MENDEZ.pdf
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
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
 
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
 
Funcionamiento de un pila2
Funcionamiento de un pila2Funcionamiento de un pila2
Funcionamiento de un pila2
 
Funcionamiento de un pila2
Funcionamiento de un pila2Funcionamiento de un pila2
Funcionamiento de un pila2
 
Ejercicios evaluados i. shearly achji y ricardo ros. estructuras de datos i. ...
Ejercicios evaluados i. shearly achji y ricardo ros. estructuras de datos i. ...Ejercicios evaluados i. shearly achji y ricardo ros. estructuras de datos i. ...
Ejercicios evaluados i. shearly achji y ricardo ros. estructuras de datos i. ...
 
Pilas Struct
 Pilas Struct Pilas Struct
Pilas Struct
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Pilas
PilasPilas
Pilas
 
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
 

Plus de Gustavo Salazar Loor (20)

Max Plus Compilar vhdl
Max Plus Compilar vhdlMax Plus Compilar vhdl
Max Plus Compilar vhdl
 
ECUADOR
ECUADORECUADOR
ECUADOR
 
Electronica I Clase07
Electronica I Clase07Electronica I Clase07
Electronica I Clase07
 
Electronica I Clase07
Electronica I Clase07Electronica I Clase07
Electronica I Clase07
 
Electronica I Clase06
Electronica I Clase06Electronica I Clase06
Electronica I Clase06
 
Electronica I Clase05
Electronica I Clase05Electronica I Clase05
Electronica I Clase05
 
Electronica I Clase04
Electronica I Clase04Electronica I Clase04
Electronica I Clase04
 
Electronica I Clase03
Electronica I Clase03Electronica I Clase03
Electronica I Clase03
 
Electronica I Clase02
Electronica I Clase02Electronica I Clase02
Electronica I Clase02
 
Electronica I Clase01
Electronica I Clase01Electronica I Clase01
Electronica I Clase01
 
TDA
TDATDA
TDA
 
ARBOLES MULTICAMINOS
ARBOLES MULTICAMINOSARBOLES MULTICAMINOS
ARBOLES MULTICAMINOS
 
LISTAS ESPECIALES
LISTAS ESPECIALESLISTAS ESPECIALES
LISTAS ESPECIALES
 
LISTAS
LISTASLISTAS
LISTAS
 
GRAFOS
GRAFOSGRAFOS
GRAFOS
 
HEAPS
HEAPSHEAPS
HEAPS
 
ARBOLES
ARBOLESARBOLES
ARBOLES
 
COLAS
COLASCOLAS
COLAS
 
CODIGO DE HUFFMAN
CODIGO DE HUFFMANCODIGO DE HUFFMAN
CODIGO DE HUFFMAN
 
RESPIRACION Y FERMENTACION
RESPIRACION Y FERMENTACIONRESPIRACION Y FERMENTACION
RESPIRACION Y FERMENTACION
 

Dernier

TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
jlorentemartos
 

Dernier (20)

Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 
Novena de Pentecostés con textos de san Juan Eudes
Novena de Pentecostés con textos de san Juan EudesNovena de Pentecostés con textos de san Juan Eudes
Novena de Pentecostés con textos de san Juan Eudes
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptxAEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
 
PP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomasPP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomas
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
 
UNIDAD DE APRENDIZAJE DE PRIMER GRADO DEL MES DE MAYO PARA TRABAJAR CON ESTUD...
UNIDAD DE APRENDIZAJE DE PRIMER GRADO DEL MES DE MAYO PARA TRABAJAR CON ESTUD...UNIDAD DE APRENDIZAJE DE PRIMER GRADO DEL MES DE MAYO PARA TRABAJAR CON ESTUD...
UNIDAD DE APRENDIZAJE DE PRIMER GRADO DEL MES DE MAYO PARA TRABAJAR CON ESTUD...
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
Código Civil de la República Bolivariana de Venezuela
Código Civil de la República Bolivariana de VenezuelaCódigo Civil de la República Bolivariana de Venezuela
Código Civil de la República Bolivariana de Venezuela
 
PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptxPLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptx
 
animalesdelaproincia de beunos aires.pdf
animalesdelaproincia de beunos aires.pdfanimalesdelaproincia de beunos aires.pdf
animalesdelaproincia de beunos aires.pdf
 
Los dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la VerdadLos dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la Verdad
 
Sesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdfSesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdf
 

PILAS

  • 2. LA PILA: UN TDA SIMPLE  Uno de los conceptos mas utiles en computacion 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 ultima en llegar, sera 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 ultima carga en llegar, sera la primera que revisara  Al terminar de revisarla, la nueva carta del tope de la pila habra cambiado  Del “pilo” de cartas, la mas nueva que queda, sera la siguiente en ser revisada
  • 3. TDA PILA: DEFINICION  Dada una Pila llamada S  ¿Qué datos serian importantes conocer sobre la Pila?  ¿Y que operaciones podriamos efectuar a la misma? Push(s,elemento1) Elemento 1 Tope o Cima Push(s,elemento2) Elemento 2 Push(S,elemento3) Elemento 3 Pop(S) EstaVacia?NoSi  Al revisar c/carta, se la “sacaba” de la pila  elemento = pop(s)  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: push(s,elemento)  La operación push aumenta un elemento a la pila, y esta aumenta en su tamaño
  • 4. PILA: OPERACIONES EliminarPila(Pila) Efecto: recibe una pila y la libera completamente EstaVacia(Pila) retorna -> Boolean Efecto: Devuelve true si esta vacia y false en caso contrario Push(pila, elemento) Efecto: Toma la pila y aumenta su tamaño, poniendo el elemento en la cima de la pila Pop(Pila) retorna -> elemento Efecto: Recibe la pila, remueve el elemento tope y lo retorna Excepcion: Si la pila esta vacia, produce error TopePila(Pila) retorna -> elemento Efecto: Devuelve el elemento cima de la pila Excepcion: Si la pila esta vacia produce error InicializarPila(Pila) Efecto: recibe una pila y la inicializa para su trabajo normal
  • 5. TDA PILA: DEFINICION FORMAL <pila> ::= <tope> + {<nodo>} <tope> ::= <enlace> <enlace> ::= (<<ReferenciaNodo>> | NULL) <nodo> ::= <contenido> + <enlace> <contenido> ::= <<dato>>{<<dato>>}  En conclusion:  La pila es un conjunto de elementos  De los cuales solo conozco y puedo ver el TOPE  Cada elemento en la pila  Puede contener informacion de cualquier tipo, es decir, es generico
  • 6. OTRAS OPERACIONES  Al remover el ultimo elemento de una pila esta queda vacia  Una vez vacia, no se pueden “sacar” mas elementos de la pila  Antes de sacar un elemento de la pila  Debemos saber si la pila Esta Vacia?: EstaVacia(s)  El tope de la pila siempre esta cambiando  Deberiamos poder “revisar” el elemento tope de la pila: TopePila(s)  Si la pila esta vacia, no debe existir un valor tope  El tratar de remover elementos o acceder a elementos de una pila vacia se llama  SUBDESBORDAMIENTO de la pila
  • 7. TDA PILA: IMPLEMENTACION  Hay varias formas, analicemos la mas 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 posicion, etc.  En la Pila los elementos solo se pueden insertar al final de la Pila  Y solo se pueden remover del Final de la Pila  Las impelmentaciones de la Lista Simplemente Enlazada  Estatica o Dinamica  Nos sirven perfectamente para la Pila
  • 8. IMPLEMENTACION ESTATICA  La Pila seria una Lista Contigua  typededef LCont Pila;  Y solo deberemos implementar las operaciones de  Push, llamando a InsertarNodoFinal  Pop, llamando a SacarNodoFinal  TopePila, llamando a ConsultarUltimo  … es decir, cada operación de la pila esconde dentro  Las operaciones de la Lista Contigua MAX_ELEM Tope = -1 Tope = MAX_ELEM-1 Tope = 0
  • 9. Y LAS OPERACIONES?  Pila_Crear  Recibe una pila y la devuelve vacia  Pila_EstaVacia  Una pila esta vacia, cuando su tope es menor que el fondo de la pila  ¿Cómo serian el resto de operaciones no basicas? bool Pila_EstaVacia(Pila s){ return(LCont_EstaVacia(s)); } void Pila_Inicializar(Pila *s, int max) { LCont_Crear(s,max); }
  • 10. OPERACIONES BASICAS DE LA PILA  Pop  Remueve el elemento tope de la pila, y lo devuelve.  Recuerde, el tope cambia  Si la pila esta vacia, no se puede sacar nada  Error, y devuelve valor invalido Generico Pila_Pop(Pila *s){ return(LCont_SacaNodoFinal(s)); } void Pila_Push(Pila *s, Generico G){ LCont_InsertarNodoFin(s,G); }  Push  Inserta un elemento en la pila, cuando se puede  Si la pila esta llena, no se puede insertar  Error  Este elemento es el nuevo tope  El tope aumenta
  • 11. IMPLEMENTACION DINAMICA  Una pila, o una cola, las dos son Listas realmente  Listas en las cuales las operaciones en Insertar y Remover estan limitadas  Una pila, se implemente exactamente igual que una Lista  Al hacer Pop, es SacarNodoFinal  Al hacer Push, es InsertarNodoFinal typedef LSE Pila;
  • 12. EJERCICIO EN CLASE  Las pilas se usan cuando para  Recuperar un conjunto de elementos en orden inverso a como se introdujeron  Un programa debe  Leer una secuencia de elementos enteros  Luego mostrarlos en orden inverso al ingresado  Ejemplo:  Si se ingresa: 1, 3, 5, 7  Se mostrara: 7, 5, 3, 1
  • 13. 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 vacia
  • 14. SOLUCION Begin{ Pila S; Generico dato; InicializarPila(S); while(TRUE){ write(“Ingrese elemento:”); read(dato) if(dato == centinela) break; Push(S,dato); } while(!EstaVacia(S)){ write(Pop(s)); } }
  • 15. UN APLICACIÓN MAS PRACTICA  El compilador siempre sabe cuando se ha escrito un parentesis, o una llave de mas  ¿Como lo hace?  Con el uso de pilas, expresiones escritas:  (a+b)) Mal  ((a+b) * c / 4*g-h) OK  Se puede reconocer los parentesis que no coinciden  ¿Como lograr esta aplicación de la pila?
  • 16. ANALISIS DEL PROBLEMA  Cuando los parentesis coincicen:  Al final de la expresion  Total parentesis izq = Total parentesis der y  En todo momento, en cualquier punto de la expresion  Cada parentesis der. esta precedido de uno izq  Acum. parentesis der. siempre es <= que Acum. Parentesis izq  Por ejemplo: 7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5)) (A+B)) + 3 Al final de la expresion: Total ( = 1 Total ) = 2 En este punto de la expresion, ya se sabe que es incorrecta Acum ( = 1 Acum ) = 2 No se cumple la regla
  • 17. PRIMER ENFOQUE  Podemos llevar un conteo de parentesis  Este deberia llevar totales de ) y de (  Acum. Parentesis Izq - Acum. Parentesis Der  Este valor siempre debera ser positivo  Si en algun momento, al revisar la expresion, el conteo de parentesis es negativo:  BINGO, hay un error valida = true; while(no hayamos revisado toda la expresion) { if (elemento_actual == ‘(‘) Total_der++; else if(elemento_actual == ‘)’) Total_izq++; if(Total_der > Total_izq){ valida = false; break; } } if (Total_der != Total_izq) valida = false;
  • 18. UN ENFOQUE MAS NATURAL  Otra forma, es la “forma natural”  Cuando revisamos una expresion de este tipo:  Revisamos los parentesis de la derecha, y buscamos sin tienen “match” en la izquierda  Para seguir este enfoque podriamos:  “Recordar” los parentesis de la izquierda ( a medida que aparecen:  El primero en aparecer, sera el ultimo en ser “recordado”  El ultimo en aparecer, sera el primero en ser “recordado” La Pila se utiliza justamente para “recordar” de la forma abajo indicada Pop el parentesis ) encontrado 7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5))  Asi, 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 expresion, ningun ( deberia ser “recordado”
  • 19. APLICANDO PILAS  Veamos, revisemos justo la expresion anterior Todos los ), encontraron su ( 7 - ( ( X *( ( X+Y) / ( J- 3) ) +Y) / ( 4- 2) ) ( ( ( (
  • 20. Y AHORA, EL ALGORITMO Pila S; /*Se declara una pila s, para almacenar los ( */ Pila_Inicializar(&S); while(no hayamos leido toda la cadena) { //tomar el siguiente simbolo de la expresion if(simbolo = ‘(‘) /*Almacenarlo*/ Pila_Push(&S,simbolo); if(simbolo = ‘)’){ /*Buscar match*/ if(Pila_EstaVacia(S)) { /*No hubo match!!*/ return(FALSE) Pila_Pop(&s); } } if(Pila_EstaVacia(s)) /*Algun simbolo se quedo dentro, porque no hubo match*/ return TRUE; Else return FALSE;