SlideShare ist ein Scribd-Unternehmen logo
1 von 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;

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Kürzlich hochgeladen

PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
lupitavic
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Francisco158360
 

Kürzlich hochgeladen (20)

BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
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
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
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
 

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;