TDA PILA ESTRUCTURAS DE DATOS.

Slides:



Advertisements
Presentaciones similares
Autómatas de pila (Pushdown automata)
Advertisements

PILA.
ESTRUCTURA DE DATOS Unidad 03 PILAS.
Pilas y Colas Fundamentos Estructuras de Datos (Programación 2)
Programación Avanzada (semana 6) Verano 2004
TDA LISTA ESTRUCTURAS DE DATOS.
Programación II Listas
Estructuras de datos y algoritmos
Programación y Estructuras de Datos
2.2 Pila de números enteros
PROGRAMACION DE Pilas o Stacks y Colas
Estructuras de Datos Especificación formal de Listas.
Programación II Colas Igor Santos Grueiro.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Colas y Listas Enlazadas
ÁRBOLES DE EXPRESION.
ARBOLES PARCIALMENTE ORDENADOS ESTRUCTURAS DE DATOS.
Teoría de lenguajes y compiladores
Estructuras dinámicas de datos, TAD Lista, parte 2
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
APLICACIONES DE PILAS Estructuras de Datos.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 6: Clases Antonio J. Sierra.
Arboles Binarios de expresiones
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
La Pila o Stack Programación. La pila (stack) es una estructura ordenada de elementos en la que se pueden insertar o remover elementos por un extremo.
Estructura de Datos y Algoritmos
Estructura de Datos En C++
ARBOLES ESTRUCTURAS DE DATOS.
1 Estructuras de Datos Elementales:stacks (pilas), queues (colas), linked lists (listas enlazadas), y rooted trees (árboles con raíz) Agustín J. González.
Pila1UVM Pilas. Pila2UVM Pila3UVM 2.1 Objetivos El estudiante manejará el tad Pila contigua.
AED3: Algoritmos y Estructuras de Datos 3.  Uno de los conceptos mas utiles en computacion es la pila o stack  Es un conjunto de elementos, en la que:
Material de apoyo Unidad 4 Estructura de datos
Pilas y Colas Estructuras de Datos.
Árboles Binarios Estructuras de Datos.
Computación I Primer Semestre 2006 Capítulo IV Ciclos y Colecciones (con un sabor a algoritmos)
EL TDA COLA Estructuras de Datos.
República Bolivariana de Venezuela. Ministerio del PP para la Defensa. Universidad Nacional Experimental de la Fuerza Armada. Cátedra: Instrucción Militar.
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
Punteros Recomendado: 1. Nivelación Funciones
Son estructuras de datos que almacenan y recuperan sus elementos atendiendo a un estricto orden (LIFO Last – in, first –out Ultimo en entrar – primero.
 Ignacio Soto Valdez R  Paola Karina Suarez Salazar R  Mario Alberto Castillo Aviles R
Estructuras de datos Fundamentos de análisis y diseño de algoritmos.
INSTITUTO TECNOLOGICO DE APIZACO
UNIDAD IV. PILAS, COLAS, RECURSION APLICADAS A LENGUAJE C.
Fundamentos de Programación
Ayudantia 3: Pilas- Colas
Lic. En C.C. Ann Margareth Meza Rodríguez
IMPLEMENTACION DE COLAS MEDIANTE LISTAS
Estructura de Datos..
Pilas y Colas Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes Claudia Feregrino
PROGRAMACION DE Pilas o Stacks
Estructura de Datos PILAS. es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In.
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
Laboratorio de programación
ESTRUCTURAS LINEALES “LA PILA”
OPERACIONES CON PILAS DECLARACIÓN O INICIALIZACIÓN DE LA PILA. Stack NombrePila=newStack (max);
Pilas Grupo 4. 1 Stack o Pila Definición: Una pila es una estructura de datos, a la cual se le puede ingresar o sacar elementos por un sólo lado. También.
PROGRAMACION DE Pilas o Stacks y Colas
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
Ficha de datos Créditos Institucionales: 8 créditos.
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
Listas Dinámicas.
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: COLAS.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
PILAS Y COLAS INTEGRANTES: JAVIER GONZALEZ JORGE LUIS SOLIS ISAC FERNANDEZ.
PILAS Y COLAS INTEGRANTES: JAVIER GONZALEZ JORGE LUIS SOLIS ISAC FERNANDEZ.
Transcripción de la presentación:

TDA PILA ESTRUCTURAS DE DATOS

La ultima en llegar, sera la primera en salir: 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 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 La ultima en llegar, sera la primera en salir: LAST IN, FIRST OUT LIFO

TDA PILA: DEFINICION Dada una Pila llamada S ¿Qué datos serian importantes conocer sobre la Pila? ¿Y que operaciones podríamos efectuar a la misma? 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 Push(s,elemento1) Push(S,elemento3) Push(s,elemento2) Pop(S) Tope o Cima Elemento 3 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 Elemento 2 Elemento 1 No Si EstaVacia?

PILA: OPERACIONES InicializarPila(Pila) Efecto: recibe una pila y la inicializa para su trabajo normal 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 Pop(Pila) retorna -> elemento Efecto: Recibe la pila, remueve el elemento tope y lo retorna Excepcion: Si la pila esta vacia, produce error Push(pila, elemento) Efecto: Toma la pila y aumenta su tamaño, poniendo el elemento en la cima de la pila TopePila(Pila) retorna -> elemento Efecto: Devuelve el elemento cima de la pila Excepcion: Si la pila esta vacia 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> ::= (<<ReferenciaNodo>> | NULL) <nodo> ::= <contenido> + <enlace> <contenido> ::= <<dato>>{<<dato>>}

OTRAS OPERACIONES Al remover el ultimo elemento de una pila esta queda vacía Una vez vacía, no se pueden “sacar” mas elementos de la pila Antes de sacar un elemento de la pila Debemos saber si la pila Esta Vacía?: EstaVacia(s) El tope de la pila siempre esta cambiando Deberíamos poder “revisar” el elemento tope de la pila: TopePila(s) 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: 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 posición, 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 implementaciones de la Lista Simplemente Enlazada Estática o Dinámica 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 Tope = MAX_ELEM-1 MAX_ELEM Tope = 0 Tope = -1

Y LAS OPERACIONES? ¿Cómo serian el resto de operaciones no básicas? Pila_Crear Recibe una pila y la devuelve vacía Pila_EstaVacia Una pila esta vacía, cuando su tope es menor que el fondo de la pila void Pila_Inicializar(Pila *s, int max){ LCont_Crear(s,max); } bool Pila_EstaVacia(Pila s){ return(LCont_EstaVacia(s)); } ¿Cómo serian el resto de operaciones no básicas?

OPERACIONES BASICAS DE LA PILA 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 Pop Remueve el elemento tope de la pila, y lo devuelve. Recuerde, el tope cambia Si la pila esta vacía, 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); }

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 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 Un programa debe 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: Una vez llenada la pila, Solo hay que “sacar”, elemento tras elemento Hasta que la pila quede vacía 1 3 1 1 3 5 7 5 3 1 7 5 3 1

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 paréntesis, 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 paréntesis que no coinciden ¿Como lograr esta aplicación de la pila?

ANALISIS DEL PROBLEMA 7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5)) Cuando los paréntesis coinciden: Al final de la expresión Total paréntesis izq = Total paréntesis der y En todo momento, en cualquier punto de la expresión Cada paréntesis der. esta precedido de uno izq Acum. paréntesis der. siempre es <= que Acum. paréntesis izq Por ejemplo: (A+B)) + 3 Al final de la expresión: Total ( = 1 Total ) = 2 En este punto de la expresión, ya se sabe que es incorrecta Acum ( = 1 Acum ) = 2 No se cumple la regla

PRIMER ENFOQUE Podemos llevar un conteo de paréntesis 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) Podemos llevar un conteo de paréntesis Este debería llevar totales de ) y de ( Acum. paréntesis Izq - Acum. paréntesis Der Este valor siempre deberá ser positivo Si en algún momento, al revisar la expresión, el conteo de paréntesis es negativo: BINGO, hay un error

Pop el paréntesis ) encontrado UN ENFOQUE MAS NATURAL Otra forma, es la “forma natural” Cuando revisamos una expresión de este tipo: Revisamos los paréntesis de la derecha, y buscamos sin tienen “match” en la izquierda 7 - ((X* ((X+Y)/(J-3)) + Y) / (4-2.5)) La Pila se utiliza justamente para “recordar” de la forma abajo indicada Para seguir este enfoque podríamos: “Recordar” los parentesis de la izquierda ( a medida que aparecen: El primero en aparecer, será el ultimo en ser “recordado” El ultimo en aparecer, será el primero en ser “recordado” Pop el paréntesis ) encontrado 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”

Todos los ), encontraron su ( APLICANDO PILAS Veamos, revisemos justo la expresión anterior 7 - ( X * + Y ) / J 3 4 2 Todos los ), encontraron su ( ( ( ( (

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;