Ficha de datos Créditos Institucionales: 8 créditos.

Slides:



Advertisements
Presentaciones similares
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.
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
Listas enlazadas c++ Prof. Franklin Cedeño.
Tema 3: La estructura de datos Lista
ESTRUCTURAS LINEALES UNIDAD 3.
Programación y Estructuras de Datos
PROGRAMACION DE Pilas o Stacks y Colas
PROGRAMACION DE ESTRUCTURAS DE DATOS
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Estructuras de Datos Especificación formal de Listas.
M.I.A Daniel Alejandro García López
Estructuras de datos M.I.A Daniel Alejandro García López.
M.I.A Daniel Alejandro García López.  Un TDA es un tipo de dato definido por el programador que se puede manipular de un modo similar a los tipos de.
Estructuras de datos M.I.A Daniel Alejandro García López.
Colas y Listas Enlazadas
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Pila1UVM Colas. Pila2UVM Pila3UVM 3.1 Objetivos El estudiante manejará el tad Cola, sobre memoria estática.
APLICACIONES DE PILAS Estructuras de Datos.
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.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Práctica 7 AOC. Gestión de la pila Una pila es una estructura de datos caracterizada por que el último dato que se almacena es el primero que se obtiene.
Tema 10: Gestión de Memoria
Árboles, montículos y grafos Cola de prioridades, montículos
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
POR: Meza Guevara Sandra Fabiola Contreras Meléndez Damariz Figueroa Cisneros Ricardo UNIVERSIDAD TECNOLÓGICA DE DURANGO TECNOLÓGIAS DE LA INFORMACIÓN.
PILAS, COLAS, RECURSIVIDAD.
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
Licenciatura en Informatica
Estructura de Datos En C++
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.
FORMA INTERNA DE REPRESENTAR
Aplicación de estructuras de datos
Pilas y Colas Estructuras de Datos.
Capítulo 7 Gestión de memoria.
Clasificación de los TDA
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.
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
Términos algoritmo diseñar algoritmo implementar algoritmo
Estructuras de datos Fundamentos de análisis y diseño de algoritmos.
UNIDAD IV. PILAS, COLAS, RECURSION APLICADAS A LENGUAJE C.
Teoría de lenguajes y compiladores
Ayudantia 3: Pilas- Colas
Lic. En C.C. Ann Margareth Meza Rodríguez
Presente un cuestionario con los aspectos mas importantes sobre los
IMPLEMENTACION DE COLAS MEDIANTE LISTAS
Lic. En C.C. Ann Margareth Meza Rodríguez
Estructura de Datos..
Pilas y Colas Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes Claudia Feregrino
Estructura: COLA Profesor: Ing. Erick López Ch. M.R.I.
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.
M.C. Meliza Contreras González
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.
ESTRUCTURAS LINEALES “LA PILA”
PROGRAMACION DE Pilas o Stacks y Colas
PUNTEROS. Los punteros son de amplia utilización en programación y muchos lenguajes permiten la manipulación directa o indirecta de los mismos. Su razón.
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.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO FACULTAD DE INGENIERÍA COORDINACIÓN DE MATERIAS PROPEDÉUTICAS INGENIERÍA EN SISTEMAS ENERGÉTICOS SUSTENTABLES.
Pilas y Colas.
Transcripción de la presentación:

Ficha de datos Créditos Institucionales: 8 créditos. Titulo de la guía para la Unidad de Aprendizaje: “Introducción a Pilas y Colas”. Nombre del programa educativo: Licenciatura en Ingeniería en Computación. Unidad de Aprendizaje: Estructura de Datos Espacio Académico : Centro Universitario UAEM Valle de Teotihuacán. Nombre del Responsable: M. en S.C. Jaqueline Sánchez Espinoza

Índice TDA Pila TDA Cola Definición y operaciones básicas Operaciones e implementación Aplicaciones TDA Cola

TDA PILA Definición Def: una pila es una lista ordenada de elementos en la que todas las inserciones y supresiones se realizan por un mismo extremo denominado tope o cima de la pila. Estructura LIFO (Last In First Out): “último en entrar primero en salir”

Operaciones básicas PUSH: apilar, meter POP: desapilar, sacar TDA PILA Operaciones básicas PUSH: apilar, meter POP: desapilar, sacar TOP: cima, tope

Operaciones TDA PILA Crear_pila(P: pila, ok: lógico) Borrar_pila(P: pila, ok: lógico) Vacía?(P: pila, resp: lógico) Llena?(P: pila, resp: lógico) Push(P: pila, X: elemento, resp: lógico) Pop(P: pila, X: elemento, resp: lógico) Top(P: pila, X: elemento, resp: lógico)

Implementación Listas enlazadas Vectores TDA PILA Variables dinámicas No riesgo de overflow Limitadas por memoria disponible Cada elemento necesita más memoria (guardar dirección siguiente) Uso eficiente de memoria Vectores Variables estáticas Tamaño máximo fijo Peligro de desbordamiento (overflow) Uso ineficiente de memoria Problema común: underflow o subdesbordamiento

Implementación con vectores TDA PILA Implementación con vectores Definición de tipos ELEMENTO = T; PILA = registro de tope: numérico; arreglo: vector[1..MAX] de ELEMENTO; finregistro; Operación Push Algoritmo PUSH (P: Pila, X: ELEMENTO, ok: lógico) es resp: lógico; INICIO Llena?(P,resp); si resp entonces ok:= falso; sino P.tope:= P.tope + 1; P.arreglo[P.tope]:= X; ok:= cierto; finsi; FIN

Implementación con vectores TDA PILA Implementación con vectores Operación Top Algoritmo TOP (P: PILA, X: ELEMENTO, ok:lógico) es resp: lógico; INICIO Vacia?(P, resp); si resp entonces ok:= falso; {pila vacía} sino ok:= cierto; X:= P.arreglo[P.tope]; finsi; FIN Operación Pop Algoritmo POP (P: PILA, X: ELEMENTO, ok: lógico) es INICIO Vacia(P, resp); si resp entonces ok:= falso; {no hay elementos q sacar} sino X:= P.arreglo[P.tope]; P.tope:= P.tope -1; ok:= cierto; finsi; FIN

Implementación con listas enlazadas TDA PILA Implementación con listas enlazadas Definición de tipos ELEMENTO = T; NODO = registro de info: ELEMENTO; sgte: puntero a NODO; finregistro; POSICION = puntero a NODO; PILA = registro de longitud: numerico; prim: POSICIÓN; finregistro;

Implementación con listas enlazadas TDA PILA Implementación con listas enlazadas Operación Push Algoritmo PUSH (P: PILA, X: ELEMENTO, ok: logico) es resp: logico; temp: POSICION; INICIO Llena?(P,resp); {resp=falso si no se puede reservar más memoria} si resp entonces ok := falso; Escribir “Pila llena”; sino Obtener(temp); temp.info := X; temp.sgte := P.prim; {será nil si la pila estaba vacía} P.prim := temp; P.longitud := P.longitud +1; ok := cierto; finsi FIN

Implementación con listas enlazadas TDA PILA Implementación con listas enlazadas Operación Pop Algoritmo POP (P: PILA, X: ELEMENTO, ok: logico) es resp: lógico; temp: POSICION; INICIO Vacia?(P, resp); si resp entonces ok := falso; {la pila está vacía} sino {procedemos a sacar el último elemento insertado} temp := P.prim; P.prim := temp.sgte; {que será nil si sólo hay un elemento en la pila} X := temp.info; Liberar(temp); ok := cierto; finsi; FIN

Implementación con listas enlazadas TDA PILA Implementación con listas enlazadas Operación Top Algoritmo TOP(P: PILA, X: ELEMENTO, ok: lógico) es resp: lógico; INICIO Vacia?( P, resp); si resp entonces ok:= falso; {Pila vacia} sino X := P.prim.info; ok:= cierto; finsi; FIN

Aplicaciones de las pilas TDA PILA Aplicaciones de las pilas Gran uso en compiladores y SO’s. Entornos donde haya que recuperar el último valor que se almacenó (backtracking) Algunas aplicaciones: Equilibrado de símbolos Llamadas a subprogramas Eliminación de recursividad Tratamiento de expresiones aritméticas Evaluación de expresiones postfijas Conversión infija a postfija Borrado de caracteres en un editor de textos

Equilibrado de símbolos Aplicaciones de las pilas TDA PILA Equilibrado de símbolos Se van leyendo los caracteres. Cuando se encuentra un elemento clave (paréntesis, corchete…) se trata según su tipo: Si es de apertura: se mete en la pila. Si es de cierre: Si la pila está vacía error. Si la pila no está vacía: Si la cima es el correspondiente símbolo de apertura se extrae. Si no lo es error. Si al final la pila no está vacía error

Llamadas a subprogramas Aplicaciones de las pilas TDA PILA Llamadas a subprogramas Al llamar a un subprograma se necesita guardar: Estado de las variables locales del programa que llama Dirección del programa en la que se hizo la llamada Al hacer la llamada esta información se mete en la cima de una pila. Al terminar el subprograma, se saca la cima y se recupera el estado del momento de la llamada vuelve al punto de ejecución donde se hizo la llamada. El subprograma puede llamar a otros subprogramas y así sucesivamente. Permite implementar la recursión. Registro de activación Peligro: rebasamiento de la pila

Eliminación de recursividad Aplicaciones de las pilas TDA PILA Eliminación de recursividad La recursión consume muchos recursos (memoria). Recursión de cola: la llamada recursiva está en la última línea. Para eliminarla: Se necesita: argumentos del algoritmo pasados por valor o referencia si son los mismos argumentos los que se pasan a la llamada recursiva. Se asignan a los argumentos los valores que se van a pasar en la llamada recursiva. Salto (goto) al principio de la rutina. Para transformar algoritmo recursivo en iterativo: Se guarda en pilas el estado del problema en el momento de la llamada recursiva. Se vuelve al principio de la rutina mediante una estructura iterativa. La vuelta atrás de la recursión se consigue sacando los valores de las pilas

Tratamiento de expresiones aritméticas Aplicaciones de las pilas TDA PILA Tratamiento de expresiones aritméticas Notación infija: a + b Notación prefija: + a b Notación postfija: a b + Problema: distinción de prioridades en notación infija. Ej: evaluar a + b * c Soluciones: Empleo de paréntesis. Conversión a notación prefija o postfija. Ventajas de la notación postfija: No hace falta conocer reglas de prioridad. No hace falta emplear paréntesis.

Aplicaciones de las pilas TDA PILA Tratamiento de expresiones aritméticas: Evaluación de expresiones postfijas Se lee la expresión elemento a elemento. Si es un operando se mete en una pila Si es un operador, se extraen los dos últimos elementos introducidos en la pila, se aplica el operador sobre ellos y el resultado se guarda en la pila. Ejemplo: 6 4 + 2 5 * +

Tratamiento de expresiones aritméticas: Conversión infija a postfija Aplicaciones de las pilas TDA PILA Tratamiento de expresiones aritméticas: Conversión infija a postfija Operandos: se colocan directamente en la salida. Operadores: si la pila está vacía, lo metemos en la pila. Si no: Si en la cima se encuentra un operador de menor prioridad: push() Si no: pop() hasta que en la cima haya uno de menor prioridad, un paréntesis de apertura o la pila esté vacía. Entonces se hace un push(). Paréntesis: de apertura ‘(‘ : se mete en la pila. de clausura ’)’ : se van llevando los operadores de la pila a la salida hasta que se encuentra uno de apertura, que se saca de la pila. Para finalizar, si en la pila aún queda algún operador, se lleva a la salida.

Borrado de caracteres en un editor de texto Aplicaciones de las pilas TDA PILA Borrado de caracteres en un editor de texto Se van leyendo los caracteres de uno en uno. Si el carácter no es de borrado ni de eliminación de línea, se mete en la pila. Si el carácter es de borrado, se hace un pop(), para sacar el elemento cima de la pila. Si el carácter es de eliminación de línea se vacía toda la pila. Ejemplo: si # es el carácter de borrado, i n p # f o r o n # # m á t i z # c a informática

TDA COLA Definición Def: una cola es una lista ordenada de elementos en la que todas las inserciones se realizan por un extremo (frente o principio) y las supresiones se realizan por el otro (final). Estructura FIFO (First In First Out): “primero en entrar primero en salir”

Operaciones básicas QUEUE: encolar, meter DEQUEUE: desencolar, sacar TDA COLA Operaciones básicas QUEUE: encolar, meter DEQUEUE: desencolar, sacar

Operaciones TDA COLA Crear_cola(C: cola, ok: lógico) Borrar_cola(C: cola, ok: lógico) Vacía?(C: cola, resp: lógico) Llena?(C: cola, resp: lógico) Queue(C: cola, X: elemento, resp: lógico) Dequeue(C: cola, X: elemento, resp: lógico) Tamaño(C: cola, N: numérico)

Implementación con listas enlazadas TDA COLA Implementación con listas enlazadas Definición de tipos ELEMENTO = T; NODO = registro de info: ELEMENTO; sgte: puntero a NODO; fin registro; POSICION = puntero a NODO; COLA = registro de tam: numerico; prim, ult: POSICIÓN; fin registro;

Implementación con listas enlazadas TDA COLA Implementación con listas enlazadas Operación QUEUE Algoritmo QUEUE(C: cola, X: ELEMENTO, resp: lógico) es temp: POSICION; INICIO Llena?(C,resp); si resp = cierto entonces Escribir “Cola llena”; resp := falso; sino {la cola no está llena, por lo que procedemos a añadir el elemento} Obtener(temp); temp .info := X; temp.sgte := nil; {porque va a ser el último} Vacía?(C,resp); si resp = cierto entonces {será el primero} C.prim := temp; sino C.ult.sgte := temp; {será el siguiente al último} finsi; C.ult := temp; {porque es el nuevo último elemento} C.longitud := C.longitud + 1; {pues ahora hay un elemento más en la cola} FIN

Implementación con listas enlazadas TDA COLA Implementación con listas enlazadas Operación DEQUEUE Algoritmo DEQUEUE(C: cola, X: ELEMENTO, resp: lógico) es temp: POSICION; tam: numérico; INICIO Vacía?(C,resp); si resp = cierto entonces Escribir “Cola vacía”; resp := falso; sino temp := C.prim; E := temp.info; Tamaño(C,tam); si tam = 1 entonces C.ult := nil; finsi; C.prim := temp.sgte; {si sólo había un elemento, será nil} Liberar(temp); C.longitud := C.longitud -1; FIN

Implementación con vectores TDA COLA Implementación con vectores Si el principio de la cola es fijo en la primera posición del vector y el final es variante para eliminar un elemento de la cola hay que desplazar todos los demás una posición (Dequeue() es ineficiente). Si principio y final de la cola son variantes, no hacen falta desplazamientos. Problema: la cola puede desbordarse teniendo celdas libres.

Implementación con vectores TDA COLA Implementación con vectores Solución: VECTOR CIRCULAR cuando algún índice llega al final, vuelve al comienzo del vector Definición de tipos ELEMENTO = T; COLA = registro de prim, ult, tam: numérico; arreglo: vector[1..MAX] de ELEMENTO; finregistro; Para saber si la cola está llena o vacía, su tamaño se controla con el campo tam del registro

Implementación con vectores TDA COLA Implementación con vectores Operación QUEUE Algoritmo QUEUE(C: COLA, X: ELEMENTO, resp: lógico) es INICIO Llena?(C,resp); si resp = cierto entonces {la cola está llena} Escribir “Cola llena”; resp := falso; sino {la cola no está llena, por lo que procedemos a añadir el elemento} C.ult := (C.ult + 1) mod MAX; {hacemos que ult avance de forma circular} C.arreglo[C.ult] := X; C.tam := C.tam +1; {pues ahora hay un elemento más en la cola} finsi; FIN

Implementación con vectores TDA COLA Implementación con vectores Operación Dequeue Algoritmo DEQUEUE(C: COLA, X: ELEMENTO, resp: lógico) es INICIO Vacía?(C,resp); si resp = cierto entonces {la cola está vacía} Escribir “Cola vacía”; resp := falso; sino {hay al menos un elemento} X := C.arreglo[C.prim]; C.prim := (C.prim + 1) mod MAX; C.longitud := C.longitud -1; finsi; FIN

Aplicaciones de las colas TDA COLA Aplicaciones de las colas Principalmente: gestión de recursos Sistemas de tiempo compartido: los recursos (CPU, memoria, …) se asignan a los procesos que están en cola de espera en el orden en el que fueron introducidos. Colas de impresión: al intentar imprimir varios documentos a la vez o la impresora está ocupada, los trabajos se almacenan en una cola según el orden de llegada. Simulación por computadora de situaciones reales: una cola de clientes en un supermercado o el tiempo de espera para ser atendidos por un operador de una línea telefónica.

Bibliografía Michael T. Goodrich, Roberto Tamassia, Data structures and algorithms in Java. John Wiley & Sons, 2006. Aho A.V., Hopcroft J.E., Ullman J.D., Estructuras de datos y algoritmos. Addison-Wesley, 1988. Weiss, Mark Allen, Data Structures and Algorithm Analysis in Java. Pearson Education, 2007. Weiss, Mark Allen, Estructuras de datos y algoritmos. Addison-Wesley Iberoamericana, 1995. Sahni, Sartaj, Data structures, algorithms, and applications in Java. McGraw Hill, 2000 The Java Tutorials: Collections http://docs.oracle.com/javase/tutorial/collections/index.html