Estructuras de Datos. La pila es un objeto dinámico en constante cambio.



Documentos relacionados
Contenido. Estructura de Datos Tema 1: Pilas. 1. Definición y operaciones. 2. Implementación estática. 3. Implementación dinámica. 4.

UNIDAD 2. ESTRUCTURAS DE DATOS SECUENCIALES. 1. Pilas (Stacks)

Pilas Motivación

PILAS. Prof. Ing. M.Sc. Fulbia Torres

Las FILAS. ING PEDRO BELTRÁN CANESSA Estructuras de Datos 1

Uno de los conceptos más útiles en ciencias de la computación es la pila.

Tema 02: TAD Pila. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

Formatos para prácticas de laboratorio

Tema 02: TAD Pila. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

ESTRUCTURAS DINÁMICAS DE DATOS (PILAS)

Solución práctico 6 Tipos Abstractos de Datos Lista, Pila y Cola

Pilas y Colas. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

Francisco J. Hernández López

Profesor: José Miguel Rubio L.

Notación Polaca (Jan Lukasiewitz) (Notación prefija)

TAD: Pila. TALLER: TAD Pila

ESTRUCTURAS DINÁMICAS DE DATOS (PILAS) EN C

ELO320 Estructuras de Datos y Algoritmos. Stacks y Colas. Tomás Arredondo Vidal

Introducción a la Computación (Matemática)

Tipos de Datos Abstractos

Estructuras de datos en memoria principal

Estructuras de datos en memoria principal

Estructuras de Datos Clase 4 Pilas y colas

Seguridad. Felipe Andres Manzano FaMAF - Universidad Nacional de Córdoba - Argentina

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

Estructura de datos y algoritmos. Tema IV: TIPOS DE DATOS ABSTRACTOS DINÁMICOS LINEALES

Pilas y Colas. Capítulo 3

Estructuras de Datos Dinámicas: Tipo de Dato Abstracto parte I. Programación I Departamento de Informática Universidad Nacional de San Luis Argentina

Unidad VI Generación de Código Intermedio. M.C. Juan Carlos Olivares Rojas

Unidad III: Estructuras lineales

Tema 5. Estructura de datos Pila

Estructura de datos y algoritmos. Tema V TDA DINÁMICOS NO LINEALES: Árboles: árboles binarios

Estructura de Datos. Unidad de Aprendizaje: Unidad de Competencia II: Estructuras de Datos Lineales. M. en C. Edith Cristina Herrera Luna

Unidad II: Análisis semántico

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

Un. VI. Generador de código intermedio.

Programación TADs Lineales Lista Pila Cola

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

Biblioteca de templates. template <typename T> void eliminar(t arr[], int& len, int pos);

Partes de un Tipo Abstracto de Datos. Introducción a la Computación (Matemática) TAD Fecha

Java posee dos grandes categorías de tipos para las variables:

PRÁCTICA # 2. 0 Direcciones 1 Dirección 2 Direcciones 3 Direcciones

Guía práctica de estudio 05. Estructuras de datos lineales: Pila y cola.

Principios de Computadoras II

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año -

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.

1. El Tipo Abstracto de Datos.

Tema: Estructura Pila.

Listas, Pilas, Colas y Punteros. Semana 3

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año -

Estructuras de Datos Lineales y Arborescentes

3.3. PILAS 1. stack(const queue &original); /* Pre: cierto */ /* Post: Construye una pila que es una copia de "original". */

Tema 2 Tipos abstractos de datos. 2.2 Pila de números enteros

Estructura de datos Tema 3: El TAD Lista lineal. Universidad de Valladolid. Departamento de informática. Campus de Segovia

Algoritmos y Estructuras de Datos Pilas LIFO y Colas FIFO. Guillermo Román Díez

7.4. UTILIDADES DE LAS PILAS

Estructura de datos Página 1 de 12 ESTRUCTURA DE DATOS TEMA 1 ESTRUCTURA DE DATOS PILA

Estructura de Datos y de la Información. Pilas y expresiones aritméticas

Estructuras de Datos Clase 7 Listas e Iteradores (segunda parte)

Tema: Tipos Abstractos de Datos (TAD s) en C#.

Estructuras de Datos Clase 4 Pilas y colas

Figura 4-11 Mapas de Karnaugh y tablas de verdad para (a) dos, (b) tres y (c) cuatro variables.

Práctico Nº 7 Tema: Lenguaje de Diseño (Parte 3). Subalgoritmos

Alonso Ramírez Manzanares Computación y Algoritmos 10.03

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Tema 5.- Recursividad

Estructuras de Datos

Informática General Cátedra: Valeria Drelichman Pedro Paleo Leonardo Nadel Norma Morales

3.3. Pilas 3.3. PILAS 3

Listas, pilas, colas

Tipos de Datos Abstractos

Lenguajes de Programación I

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

RECORRIDO EN ARBOLES

Trabajo Práctico Nº 06

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Pilas. Uso (I) * 2 = * + Transformación de expresiones aritméticas de notación infija a postfija. Ejemplo:

Código Intermedio. Compiladores II 1

Tema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz

Estructuras dinámicas lineales (i)

Práctica de constantes, expresiones y operadores. Programación en C 1

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Tipo de dato Abstracto (Tad) PILAS COLAS

Estructuras de Datos Lineales y Arborescentes

INDICE 1.1. Información y Significado 1.2. Arreglos en C 1.3. Estructura en C 1.4. Clases en C++ 2. La Pila 2.1. Definición y Ejemplos

Estructuras de Datos Lineales y Arborescentes

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

Tipos y Estructuras de Control. Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR

7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico.

Funciones y Datos en Intel 8086

Tema 7. Colas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Badía. {badia, bmartine,

Estructuras de Control Selección o Decisión

Biblioteca de Funciones

El nivel ISA (II)! Conjunto de Instrucciones

Transcripción:

21 Capítulo 2. LA PILA (STACK). 2.1 Definición y ejemplos. Una pila es un conjunto ordenado de elementos en el cual se pueden agregar y eliminar elementos de un extremo, el cual es llamado el tope de la pila. La pila es un objeto dinámico en constante cambio. La definición de pila especifica que un solo extremo de la pila se designa como tope.

22 Pueden colocarse nuevos elementos en el tope de la pila o se pueden quitar elementos de él. La característica más importante de la pila es que el último elemento insertado en ella es el primero en suprimirse. Por esta razón, una pila se denomina como una estructura LIFO (Last In First Out) en la cual, el último elemento insertado, será el primero en ser eliminado.

23 Tabla 1. Crecimiento y decrecimiento de una Pila. G I F F F H H E E E E E E E D D D D D D D D C C C C C C C C B B B B B B B B A A A A A A A A

24 2.2 Funciones primitivas. Las funciones básicas definidas sobre una pila son push y pop. pila. La función push inserta un nuevo elemento en el tope de la pila. La función pop elimina el elemento indicado por el tope de la Existen otras funciones útiles al usar pilas, por ejemplo, antes de aplicar la operación pop a una pila, se debe verificar que la pila no esté vacía. Así, la función isempty determina si una pila está o no vacía.

25 Otra operación que puede ejecutarse sobre una pila es determinar cuál es el elemento que se encuentra en el tope de la pila pero sin eliminarlo. Esta función puede llamarse stacktop. 2.3 Representación de pilas en C. Hay varias formas de representar una pila en C y cada una de ellas es sólo una implementación del concepto introducido en la sección anterior. Aunque un arreglo no es una pila, bien puede ser usado para representar una. (Ejemplo del arreglo implementando una pila).

26 Una pila es fundamentalmente un objeto dinámico cuyo tamaño se modifica en forma continua conforme se agregan y remueven elementos. (Ejemplo de una pila dinámica). Un programador siempre debe preocuparse por la legibilidad del código que produce. 2.4 Ejemplos clásicos del uso de pilas. Esta sección revisa dos ejemplos clásicos del uso de pilas, no son las únicas aplicaciones que se tienen de este tipo de estructura de datos, pero sí son de los más representativos.

27 2.4.1 Análisis básico de expresiones. Considérese la siguiente expresión matemática: + + 2 5 4 3 7 y j y x x Cuya representación lineal es: 7 ((x * ((x + y) / (j - 3)) + y) / (4 5/2)). Cómo saber si la expresión está correctamente balanceada en cuanto a paréntesis se refiere?

28 Considérese ahora la siguiente expresión matemática: { x + ( y [ a + b] ) c [( d + e) ]} ( h ( j ( k [ l n] ))) Cuya representación lineal es: {x + (y [a + b]) * c [(d + e)]} / (h (j (k [l - n]))). Cómo saber si la expresión está correctamente balanceada en cuanto a símbolos de agrupación se refiere? Cómo saber que un símbolo de agrupación está cerrando a su correspondiente símbolo de apertura? Considere el siguiente algoritmo:

29 valid = true; s = the empty stack; while(not end of string){ read the next symbol of the string; if(symbol == ( symbol == [ symbol == { ) push(s, symbol); else if(symbol == ) symbol == ] symbol == } ){ if(isempty(s)) valid = false; else{ i = pop(s); if(i is not equivalent to symbol) valid = false; } }

30 } /* while s */ if(!isemtpy(s)) valid = false; if(valid) printf( The string is valid\n ); else printf( The string is invalid\n ); 2.4.2 Notación interfija, postfija y prefija. Considere la suma de dos números A y B. Aplicar el operador + a los operandos A y B, y escribir la suma como A + B tiene el nombre de representación interfija.

31 Hay otras dos notaciones alternas para expresar la suma de A y B usando los mismos símbolos A, B y +: + A B representación prefija. A B + representación postfija. Los prefijos pre, pos e inter hacen referencia a la posición relativa del operador en relación a los operandos. Una función en C para retornar la suma de dos argumentos invocada mediante add(s, b) utiliza notación prefija, ya que el operador add precede a los operandos. Considere la siguiente expresión:

32 A + B * C indica implícitamente A + (B * C). Suponga que se desea convertir la expresión anterior a su representación en postfija. Entonces, aplicando las reglas de precedencia, primero se convierte la parte de la expresión que se evalúa primero: A + (B * C) forma interfija. A + (BC *) se convierte la multiplicación. A (BC *) + convierte la suma. A B C * + representación postfija.

33 Las únicas reglas que deben recordarse durante el proceso de conversión son las siguientes: 1.Las operaciones con mayor precedencia se convierten primero. 2.Después de que una parte de la expresión se ha convertido a postfija, se considerará como un operando único. Ejemplo: 1.(A + B) * C forma interfija. 2.(A B +) * C se convierte la adición. 3.(A B +) C * convierte la multiplicación.

34 4.A B + C * representación postfija. Ejercicio: Convertir las siguientes expresiones en su representación postfija: 1. A+B 2. A+B-C 3. (A+B) * (C-D) 4. A$B*C D+E/F/(G+H) 5. ((A+B)*C (D-E))$(F+G) 6. A B/(C*D$E)

35 El signo de $ en las expresiones anteriores, representa el símbolo de exponenciación y es el de más alta precedencia. Las reglas para convertir una expresión de interfija a prefija son idénticas. El único cambio es que el operador se coloca antes de los operandos en lugar de después de ellos. Ejercicio: Convierta las expresiones anteriores a su representación prefija. En base a los ejercicios anteriores, debe observarse que la representación prefija no siempre es una imagen reflejo de la representación postfija.

36 El orden de los operadores en las expresiones postfijas determina el orden real de las operaciones al evaluar la expresión, haciendo innecesario el uso de paréntesis. Ejercicio: Crear un algoritmo, así como su implementación, para convertir una expresión interfija en: 1.Postfija. 2.Prefija. Con valores concretos en las expresiones postfijas. Cómo evaluar una expresión postfija? Considere el siguiente algoritmo:

37 Algoritmo para evaluar una expresión postfija: opndstack = the empty satck; while(not end of input){ symbol = next input character; if(symbol is an operand) push(opndstack, symbol); else{ opnd2 = pop(opndstack); opnd1 = pop(opndstack); value = opnd1 symbol opnd2; push(opndstack, value); } } return pop(opndstack);

38 Solución a los ejercicios de conversión: Prefija: Postfija: 1. +AB AB+ 2. -+ABC AB+C- 3. *+AB-CD AB+CD-* 4. +-*$ABCD//EF+GH AB$C*D-EF/GH+/+ 5. $-*+ABC-DE+FG AB+C*DE--FG+$ 6. -A/B*C$DE ABCDE$*/-