Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.

Slides:



Advertisements
Presentaciones similares
2. Manejo de memoria Manejo de memoria estática
Advertisements

5. Estructuras no lineales estáticas y dinámicas
Definición Las colas ofrecen dos operaciones fundamentales, que son encolar (al final de la cola) y desencolar (del comienzo de la cola). Al igual que.
PILA.
ESTRUCTURA DE DATOS Unidad 03 PILAS.
Programación II Recursividad
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Listas enlazadas c++ Prof. Franklin Cedeño.
Programación II Listas
Estructuras de datos y algoritmos
Utilización de un TAD Arbol.
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Igor Santos Grueiro. Muchos objetos tienen CLAVE.
Tema 5 Grafos. Implementación (I)..
Árboles binarios. Algoritmos básicos
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
2.3 Cola de números enteros.
2.2 Pila de números enteros
Tema 4 Árboles. Árbol sobre matriz.
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Marzo 2007 Lenguajes Visuales Clase III.
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
Manipulación de caracteres e hileras de texto
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Estructuras dinámicas de datos, TAD Lista, parte 2
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Pilas Una pila es una estructura lineal de elementos en donde se pueden agregar o eliminar datos únicamente por uno de los dos extremos. En consecuencia.
Tema 6: Clases Antonio J. Sierra.
6. Herencia. Clases abstractas. Genericidad
Técnicas avanzadas de programación Interfaces
Colecciones.
Igor Santos Grueiro. Ahora tenemos datos y datos …
USA agenda e itemAgenda
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
Arboles M.C. José Andrés Vázquez FCC/BUAP
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:
Pilas y Colas Estructuras de Datos.
TDA PILA ESTRUCTURAS DE DATOS.
Árboles Binarios Estructuras de Datos.
Dinamismo y Contenedores Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires (C++ Avanzado) Depto. de Computación Algoritmos y Estructuras.
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.
UNIDAD IV. PILAS, COLAS, RECURSION APLICADAS A LENGUAJE C.
Lic. En C.C. Ann Margareth Meza Rodríguez
Estructura de Datos..
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.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
M.C. Meliza Contreras González
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.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
ESTRUCTURAS LINEALES “LA PILA”
OPERACIONES CON PILAS DECLARACIÓN O INICIALIZACIÓN DE LA PILA. Stack NombrePila=newStack (max);
Ficha de datos Créditos Institucionales: 8 créditos.
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.
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
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.
Transcripción de la presentación:

Igor Santos Grueiro

De este tipo de pilas NO vamos a hablar

¿ Qué es una pila?

Tengo una pila de fichas

Tengo una pila de galletas

Objeto Una pila es una estructura formada por una secuencia de 0 a N elementos, en la que se extraen los elementos en orden inverso al de inserción Objeto Pila Apilar/Push Desapilar/Pop Cima de la pila

En un pila sólo se hacen operaciones con la cima de la pila Es un tipo de estructura LIFO (Last Input First Output)

Podemos hacer varias operaciones :

Crear una pila

Objeto Vaciar una pila Objeto

Comprobar sí una pila está vacía Objeto NOSÍ

Obtener una copia del elemento en la cima Objeto

Insertar un elemento en la cima Objeto Se conoce como apilar o “push”

Recoger y eliminar de la pila el elemento cima Objeto Se conoce como desapilar o “pop”

Vamos a construir la clase o tipo pila

Una pila se puede construir: De forma estática De forma dinámica

De forma estática: la pila tiene un tamaño fijo public class PilaEstatica { private Object [] elementos; private int cont; public PilaEstatica(int tamaño){ elementos = new Object[tamaño]; cont = 0; for (int i=0; i< elementos.length; i++){ elementos [i] = null; } //… }

//… public void vaciar(){ for (int i = 0; i < this.contador; i++){ this.elementos[i] = null; } //… Para vaciar ponemos a null los elementos insertados

//… public boolean estaVacia(){ return (cont == 0); } //… Para comprar si está vacía miramos al contador

//… public void push(Object x){ if (cont != this.elementos.length){ this.elementos[cont] = x; cont++; } else{ System.out.println(“Error, Pila llena”); } //… Para insertar un elemento se añade al array en la posición del contador

//… public Object cima(){ if (cont > 0){ return this.elementos[cont - 1]; }else{ return null;} //… Para devolver el elemento en la cima se mira la posición del contador public Object cima(){ return v[cont-1]; }

//… public Object borrar(){ if (cont != 0){ this.cont--; this.elementos[cont] = null; }else{ System.out.println (“Error, la pila esta vacia”); } //… Para borrar el elemento en la cima se pone a null la posición del contador (-1) public Object cima(){ return v[cont-1]; }

//… public Object pop(){ if (cont == 0){ return null; } else { cont--; Object temp = this.elementos[cont] ; this.elementos[cont] = null; return temp; } //… Para desapilar el elemento en la cima se recupera y se borra el elemento de la cima public Object cima(){ return v[cont-1]; }

//… public int tamanyo(){ return cont; } //… También, podemos recuperar el número de elementos insertados en la pila public Object cima(){ return v[cont-1]; }

Pero, ¿y cuándo no sabemos cuántos elementos vamos a insertar?

Nos hace falta una estructura que enlace un elemento al siguiente Object elemento Nodo siguiente Nodo

public class NodoPilaDinamica{ private Object elemento; private NodoPilaDinamica siguiente; public NodoPilaDinamica(Object elemento, NodoPilaDinamica siguiente){ this.elemento = elemento; this.siguiente = siguiente; } public NodoPilaDinamica(Object elemento){ this.elemento = elemento; this.siguiente = null; } public Object getElemento(){ return elemento; } public NodoPilaDinamica getSiguiente(){ return siguiente; } }

Ahora la clase PilaDinamica

public class PilaDinamica{ private NodoPilaDinamica cima; private int cont; public PilaDinamica(){ this.cima = null; this.cont = 0; } //… } }

//… public void vaciar(){ this.cima = null; this.cont = 0; } //… Para vaciar ponemos a null la cima

//… public boolean estaVacia(){ return (this.cima == null); } //… Para comprobar si está vacía miramos si la cima es null

//… public void push(Object x){ this.cima = new NodoPilaDinamica(x, this.cima); this.cont++; } //… Para insertar un elemento se añade un elemento como siguiente de la cima y se actualiza la cima

Cima

//… public Object cima(){ if (this.cima != null){ return this.cima.getElemento(); } else { return null; } //… Para devolver el elemento en la cima se devuelve el elemento de la cima public Object cima(){ return v[cont-1]; }

//… public void borrar(){ if (this.cima != null){ this.cima = this.cima.getSiguiente(); this.cont--; } //… Para borrar el elemento en la cima se pone la cima al valor siguiente de la cima previa public Object cima(){ return v[cont-1]; }

Cima

//… public Object pop(){ if (this.cima == null){ return null; } else { this.cont--; NodoPilaDinamica nodoTmp = this.cima; this.cima = this.cima.getSiguiente(); return nodoTmp.getElemento(); } //… Para desapilar el elemento en la cima se recupera y se borra el elemento de la cima public Object cima(){ return v[cont-1]; }

Cima Se devuelve el objeto contenido en el nodo Objeto

//… public int tamanyo(){ return cont; } //… También, podemos recuperar el número de elementos insertados en la pila public Object cima(){ return v[cont-1]; }

Y, ¿ para qué sirven las pilas?

Podemos implementar recursividad

Ejercicio 1 (I) Una aplicación muy típica es verificar que una expresión matemática contiene paréntesis emparejados.

Ejercicio 1 (II) Por ejemplo, los paréntesis de la siguiente expresión: 2 – (3 * (8 - (7 - 5)) –4 * (5 + 1)) están emparejados, porque cada paréntesis abierto tiene un paréntesis de cierre correspondiente y posterior a él, y además no existen paréntesis abiertos o cerrados sin pareja correspondiente.

Ejercicio 1 (III) El modo de comprobar cuándo una expresión contiene los paréntesis correctos es recorrerla de izquierda a derecha: según se encuentran paréntesis de cierre ‘)’, se encajan con el ultimo paréntesis abierto ‘(‘ encontrado en la expresión y aún no emparejado.

Ejercicio 1 (IV) Los paréntesis están bien emparejados si: a)Cada vez que se encuentra un ‘)’, hay aún un ‘(‘ no emparejado previo. b)Cuando alcanza el final de la expresión, se han emparejado todos los ‘(‘.

Ejercicio 1 (V) La solución requiere memorizar los paréntesis de apertura y descartar uno cada vez que se encuentra uno de cierre. De este modo es muy fácil hacerlo utilizando una pila.

Ejercicio 1 (VI) Diseñar el programa teniendo en cuenta que la expresión matemática que hay que comprobar si es o no correcta con respecto a sus paréntesis es introducida por teclado como un dato de tipo String.

Ejercicio 1 (VII) Hay que utilizar: char charAt( int posicion) public String substring(int inicio, int fin)

Las pilas son una estructura fundamental de la computación