Programación y Estructuras de Datos

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)
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Programación y Estructuras de Datos
Programación I Teoría III
PROGRAMACION DE Pilas o Stacks y Colas
Estructuras de Datos Especificación formal de Listas.
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.
Programación II Colas Igor Santos Grueiro.
Colas y Listas Enlazadas
Estructuras dinámicas de datos, TAD Lista, parte 2
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.
Tema 6: Clases Antonio J. Sierra.
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.
MIPS Intermedio.
Semana 5 Subprogramas..
PILAS, COLAS, RECURSIVIDAD.
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.
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
Estructura de Datos En C++
PHP TODO SOBRE PHP.
Listas enlazadas.
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.
ELO3201 Contenedores Biblioteca Estándar de Templates Agustín J. González ELO320 Contenido Contenedores: Vector, List, Deque, Stack, Queue, Priority Queue,
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.
Capítulo 7 Gestión de memoria.
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.
Estructuras de Datos y Algoritmos TDA Cola. TDA Una Cola es una arreglo lineal de elementos con las siguientes operaciones: –Crear una cola vacía –determinar.
TIPOS ABSTRACTOS DE DATOS. 2  Un Tipo Abstracto de Dato (TAD) es un modelo constituido por un conjunto de objetos y una colección de operaciones realizables.
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
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
Estructuras de datos Fundamentos de análisis y diseño de algoritmos.
UNIDAD IV. PILAS, COLAS, RECURSION APLICADAS A LENGUAJE C.
Ayudantia 3: Pilas- Colas
Lic. En C.C. Ann Margareth Meza Rodríguez
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
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
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”
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
MEMORIA DINÁMICA.
Ficha de datos Créditos Institucionales: 8 créditos.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
Listas Dinámicas.
Tema 1. Estructuras de datos Objetivo: Objetivo: El alumno resolverá problemas de almacenamiento, recuperación y ordenamiento de datos y las técnicas de.
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.
LENGUAJE DE PROGRAMACION “PILAS”
Manuel Montes y Gómez Laboratorio de Tecnologías del Lenguaje
Transcripción de la presentación:

Programación y Estructuras de Datos Pilas y Colas Cursos Propedéuticos 2010 Programación y Estructuras de Datos Dr. René Cumplido, Dra. Claudia Feregrino, M. en C. Juan Manuel Campos y M. en C. Pedro Hernández

Contenido de la sección Pilas Estructura Operaciones Ejemplos de aplicación Implementación Colas Definición Operaciones Ejemplos de aplicación Implementación Colas con prioridad Colas circulares

La estructura de datos PILA Su nombre se deriva de la metáfora de una pila de platos en una cocina. La inserción y extracción de elementos de la pila siguen el principio LIFO (last-in-first-out). El último elemento en entrar es el único accesible en cada momento. Entra Sale Tope

Definición de Pila Una pila (stack) es una colecciona ordenada de elementos en la cual los datos se insertan o se retiran por el mismo extremo llamado “parte superior” de la pila. Si tenemos un par de elementos en la pila, uno de ellos debe estar en la parte superior de la pila, que se considera “el mas alto” en la pila que el otro. En la figura el elemento F es el m ́as alto de todos los elementos que est ́an en la pila. El elemento D es el m ́as alto de los elementos A,B,C, pero es menor que los elementos E y F.

Operaciones básicas en Pilas (Push) Existe solamente un lugar en donde cualquier elemento puede ser agregado a la pila. Después de haber insertado el nuevo elemento, G ahora es el elemento en la cima.

Operaciones básicas en Pilas (Pop) Basta indicar que sea retirado un elemento. No podemos decir “retirar C”, porque C no está en la cima de la pila.

Ejemplo 1 4 1 1 1 1 1 4 4 4 4 4 4 push(4) push(1) push(1) pop() push(4) pop() La dinámica de la pila, es decir, la manera en cómo entran y salen los datos a la estructura de datos se denomina lifo (last input, first output)

Utilidad de las Pilas El concepto de pila es muy importante en computación y en especial en teoría de lenguajes de programación. En lenguajes procedurales como Pascal o C, la pila es una estructura indispensable, debido a las llamadas a función. Por que? Cuando ocurre una llamada a alguna función, el estado global del sistema se almacena en un registro y éste en una pila. Cuando se termina de ejecutar algún procedimiento, se recupera el registro que está en la cima de la pila. Otras aplicaciones de las Pilas?

Aplicaciones de las pilas Navegador Web Se almacenan los sitios previamente visitados Cuando el usuario quiere regresar (presiona el botón de retroceso), simplemente se extrae la última dirección (pop) de la pila de sitios visitados. Editores de texto Los cambios efectuados se almacenan en una pila Usualmente implementada como arreglo Usuario puede deshacer los cambios mediante la operación “undo”, la cual extraer el estado del texto antes del último cambio realizado.

Implementación de las Pilas Una pila está conformada por dos elementos: Un espacio suficiente para almacenar los elementos insertados en la pila. Una elemento que indique cuál es el elemento en la cima de la pila. La estructura Pila: definir nuevo tipo estructura llamado "stack" con item : un arreglo de 0 a “máximos” elementos enteros top : un numero de -1 a (máximos – 1) fin de la nueva estructura

Implementación de las Pilas Es posible escribir un código en C/C++ que represente lo anteriormente propuesto.

Implementación con arreglos Una pila es una colección ordenada de objetos. En C, los arreglos permiten almacenar colecciones ordenadas. La desventaja de implementar una pila mediante un arreglo es que esta última es de tamaño fijo, mientras que usando punteros la pila puede ser de tamaño dinámico. #define STACKSIZE 100 typedef struct stack{ int top; int nodes[STACKSIZE]; }Stack; Stack *create_stack (Stack *S) { S= (Stack *) malloc(sizeof(Stack)); S->top=-1; return S; } main(){ Stack *S; S=create_stack(S); :

Operaciones en Pilas Las operaciones básicas de una pila son: 1. En la pila S, insertar un elemento e: push(S,e) 2. Retirar un elemento de la pila S: pop(S) 3. Verificar si la pila S está vacía: stackempty(S) 4. Saber cuál es el elemento en la cima de la pila S: stacktop(S).

La Operación Push Esta operación sirve para insertar un elemento e en la pila S, lo vamos a escribir como: push(S,e). Después de hacer esta operación sucede que: El elemento en la cima de la pila S ahora es e Pila S e r t

La Operación Push La operación push recibe : la dirección de una estructura pila y un elemento entero. (2) Incrementa el tope (cima) de la pila para agregar el elemento en una posición libre de la pila. (3) Asignando el valor e en la casilla S->top.

La Operación Push La operación push recibe : la dirección de una estructura pila y un elemento entero. (2) Incrementa el tope (cima) de la pila para agregar el elemento en una posición libre de la pila. (3) Asignando el valor e en la casilla S->top. void push(Stack *S, int e) { if(S->top == (STACKSIZE-1)) printf(“Full stack\n"); else { S->top++; S->nodes[S->top] = e; }

La Operación Pop Esta operación sirve para retirar el elemento en la cima de la pila S, lo vamos a escribir como: pop(S,e). Pila S e r t

La Operación Pop (1) La función devuelve un tipo entero al recibir la dirección de una variable de tipo estructura pila (struct stack *). Las líneas (4) y (5) son las mas importantes ya que se almacena el valor que ser devuelto y se decrementa el tope de la pila.

La Operación Pop (1) La función devuelve un tipo entero al recibir la dirección de una variable de tipo estructura pila (struct stack *). Las líneas (4) y (5) son las mas importantes ya que se almacena el valor que ser devuelto y se decrementa el tope de la pila. int pop(Stack *ps) { if(ps->top == -1) printf(“Empty stack\n"); else { int t; t = ps->nodes[ps-> top]; ps->top--; return t; }

La Operación Stacktop Esta función debe devolver un número entero y dejar la pila sin cambio. Para esto: pop(&A) Mostrar el elemento A push(&A,elemento). Pila S Pila S e e Mostrar e r r t t

La Operación Stacktop El siguiente segmento de código ilustra cómo se han usado las funciones antes creadas para implementar Stacktop, por supuesto que se pueden separar y crear una nueva función que haga lo mismo:

La Operación Stackempty La operación stackempty se describe en el siguiente segmento de código:

Ejercicio: Balance de Paréntesis Es útil poder detectar si es que los paréntesis en un archivo fuente están o no balanceados. Se puede usar un stack: a+(b+c)*[(d+e])/f Seudo-código: 1. Crear el stack. Mientras no se ha llegado al final del archivo de entrada: 2. Descartar símbolos que no necesiten ser balanceados. 3. Si es un paréntesis de apertura: poner en el stack. 4. Si es un paréntesis de cierre, efectuar un pop y comparar. 5. Si son de igual tipo continuar 6. Si son de diferente tipo: avisar el error. 7.Si se llega al fin de archivo, y el stack no esta vacío: avisar error.

Example: postfix expressions Postfix notation is another way of writing arithmetic expressions.   In postfix notation, the operator is written after the two operands. infix: 2+5 postfix: 2 5 + Expressions are evaluated from left to right. Precedence rules and parentheses are never needed!!

Example: postfix expressions (cont.)

Postfix expressions: Algorithm using stacks (cont.)

Postfix expressions: Algorithm using stacks WHILE more input items exist Get an item IF item is an operand stack.Push(item) ELSE stack.Pop(operand2) stack.Pop(operand1) Compute result stack.Push(result) stack.Pop(result)

What is a queue? It is an ordered group of homogeneous items of elements. Queues have two ends: Elements are added at one end. Elements are removed from the other end. The element added first is also removed first (FIFO: First In, First Out).

La estructura de datos cola En una cola hay dos extremos, uno es llamado la parte delantera y el otro extremo se llama la parte trasera de la cola. En una cola, los elementos se retiran por la parte delantera y se agregan por la parte trasera.

La estructura de datos cola Su nombre se deriva de la metáfora de una cola de personas en una taquilla. La inserción y extracción de elementos de la cola siguen el principio FIFO (first-in-first-out). El elemento con más tiempo en la cola es el que puede ser extraído. Entra cola frente Sale

Operaciones en una cola Las operaciones básicas de una cola son “enqueue” (meter) y “dequeue” (sacar) enqueue: añade un nuevo elemento al final de la cola dequeue: elimina (saca) el primer elemento de la cola Otras operaciones usualmente incluidas en el tipo abstracto COLA son: isEmpty (estáVacia): verifica si la cola está vacía isFull (estáLlena): verifica si la cola está llena

Ejemplo de operaciones en una cola Cola vacía enqueue(a) enqueue(b) enqueue(c) dequeue() a a b a b c b c

Aplicaciones de las colas En general, operaciones en redes de computadoras. Trabajos enviados a una impresora Solicitudes a un servidor. Clientes solicitando ser atendidos por una telefonista. Mas aplicaciones de las estructuras tipo cola?

Implementación de la estructura cola De manera similar a las pilas, las colas definen una estructura no estándar, de manera que se debe crear un nuevo tipo de dado, el tipo cola, que debe tener los siguientes elementos: Un arreglo de n elementos de algún tipo específico, puede incluso ser un tipo estándar o no. Un número que indica el elemento que está en la posición del frente de la cola. Un número que indica el elemento que está en la posición trasera de la cola.

Implementación de la estructura cola Suponiendo que los elementos son un números enteros, una idea para representar una cola en C/C++ es usar un arreglo para contener los elementos y emplear otras dos variables para representar la parte frontal y trasera de la cola.

Implementación de la estructura cola #define QUEUESIZE 100 typedef struct queue{ int front; int rear; int nodes[QUEUESIZE]; }Queue; Queue *create_queuek (Queue *ps) { ps = (Queue *) malloc(sizeof(Queue)); ps->front = 0; ps->rear = -1; return ps; } main(){ Queue *ps; ps=create_queue(ps); Una cola es una colección ordenada de objetos. En C, los arreglos permiten almacenar colecciones ordenadas. Los arreglos tienen tamaño fijo.

Operaciones en colas Suponiendo que no existiera la posibilidad de caer en un desbordamiento del arreglo, las operaciones enqueue (insert) y dequeue (remove) quedan**: ** Asumiendo un comportamiento tipo Buffer.

Operaciones en colas ** Asumiendo un comportamiento tipo Buffer. ENQUEUE DEQUEUE void enqueue(Queue* ps,int i) { if (ps->rear == (QUEUESIZE -1)) printf(“Full queue\n"); else { ps->rear++; ps->nodes[ps->rear] = i; } int dequeue (Queue *ps) { if(ps->front == ps->rear + 1) printf(“Empty stack\n"); else{ int t= ps->nodes[ps-> front]; ps->front++;** return t; } ** Asumiendo un comportamiento tipo Buffer.

Operaciones en colas La operación empty:

Colas con prioridad Una cola con prioridad es una estructura de datos en la que se ordenan los datos almacenados de acuerdo a un criterio de prioridad. Hay dos tipos de colas de prioridad: Las colas de prioridad con ordenamiento descendente. Las colas de prioridad con ordenamiento ascendente.

Colas con prioridad Si CPA es una cola de prioridad ascendente, la operación insert(CPA,x) inserta el elemento x en la cola CPA; y la operación x=minRemove(CPA) asigna a x el valor del elemento menor (de su prioridad) y lo remueve de la cola. En las colas de prioridad descendente las operaciones aplicables a la cola de prioridad descendente son insert(CPD,x) y x=maxRemove(CPD), cuando CPD es una cola de prioridad descendente y x es un elemento. La operación empty(C) se aplica a cualquier tipo de cola y determina si una cola de prioridad está vacía. Las operaciones de insertar y borrar se aplican solamente si la pila no está vacía.

Colas con prioridad Cuando se requiere eliminar un dato de una cola de prioridad se necesitan verificar todos los elementos almacenados para saber cuál es el menor (o el mayor). Esto conlleva algunos problemas, el principal es que el tiempo necesario para eliminar un elemento puede crecer tanto como elementos tenga la cola. Para resolver este problema hay varias soluciones: 1.Se coloca una marca de “vacío” en la casilla de un elemento suprimido. 2. Cada supresión puede compactar el arreglo,

Colas Circulares El objetivo de una cola circular es aprovechar al máximo el espacio del arreglo. La idea es insertar elementos en las localidades previamente desocupadas. La implementación tradicional considera dejar un espacio entre el frente y la cola.

Colas Circulares Si se consumen o desencolan componentes quedan espacios disponibles en las primeras posiciones del arreglo. Cuando se encolan elementos disminuye el espacio para agregar nuevos elementos en la zona alta del arreglo. Mejor utilización del espacio se logra con un buffer circular, en el cual la posición siguiente a la última del arreglo es la primera del arreglo. Este buffer se puede implementar aplicando aritmética modular, si el anillo tiene N posiciones, la operación: cola = (cola+1) % N, mantiene el valor de la variable cola entre 0 y N-1.

Colas Circulares Operación similar puede efectuarse para la variable cabeza cuando deba ser incrementada en uno. La variable cola puede variar entre 0 y N-1. Si cola tiene valor N-1, al ser incrementada en uno (módulo N), tomará valor cero. También se agrega una variable N con el numero de elementos encolados para poder distinguir entre la cola vacía y llena.

Example: recognizing palindromes A palindrome is a string that reads the same forward and backward. Able was I ere I saw Elba  We will read the line of text into both a stack and a queue. Compare the contents of the stack and the queue character-by-character to see if they would produce the same string of characters.

Example: recognizing palindromes