Tipo de dato Abstracto (Tad) PILAS COLAS

Documentos relacionados
CLASE 10 - ESTRUCTURAS DE DATOS DINÁMICAS

4. Pilas ESTRUCTURAS DE DATOS 1

LISTAS DOBLES y multiples

Unidades en PASCAL (Units)

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Concepto de Recursión. Características de algoritmos recursivos. Ejemplos

Departamento de Informática Universidad de Valladolid Campus de Segovia. TEMA 4: TIPOS ABSTRACTOS DE DATOS (TADs)

Teoría. Introducción a la Programación Orientada a Objetos (POO)

EJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente:

Estructuras de Datos

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 3: ESTRUCTURAS DINÁMICAS LINEALES. LISTAS ENLAZADAS, PILAS Y COLAS

Listas, Pilas y Colas

Array con tope y Registros variantes

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

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

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Estructuras de Datos Clase 4 Pilas y colas

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

Introducción a los tipos de datos abstractos (TAD)

(1) Recordemos qué es una pila...

Implementaciones de pilas, colas y afines. Memoria dinámica.

1.2.4 Listas enlazadas

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

Trabajo Práctico Nº 10 Estructuras Dinámicas: Pila y Cola.

TIPO DE DATO ABSTRACTO (TAD)

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN

Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa

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

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

program entrega1; const esp = ' '; {QUE FUNCION CUMPLE??} type longtext = string; texto = string[20]; {lista circular de jugadores}

324 MR Versión 1 1 Prueba Integral 1/6 Lapso UNIVERSIDAD NACIONAL ABIERTA Semana 12 VICERRECTORADO ACADÉMICO ÁREA INGENIERÍA

Recursión. Recursión continuación

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

Estructuras de datos en memoria principal

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs)

Estructuras de datos en memoria principal

Manual de turbo pascal

TAD. TAD Conjunto Análisis del TAD Conjunto Posibles implemantaciones A.E.D.

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

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

Descubrir los árboles como paradigma de los tipos Recursivos de Datos

1. El Tipo Abstracto de Datos.

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Estructura de Datos y de la Información

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

Tema 7: Árboles ESTRUCTURAS DE DATOS 1

TEMA 2 Estructuras de datos lineales

ESTRUCTURA SECUENCIAL ESTRUCTURA SELECTIVA

1. Una pila funciona según el método LIFO (Last In First Out ). Se define la clase Pila de la siguiente forma:

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

Estructuras de Datos. 14 de junio de Apellidos

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

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

Unidad 2: Estructuras de Datos Tema III. Estructuras de datos Compuestas. Pilas, Colas y Listas implementadas con punteros

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

PUNTEROS. Un puntero es una variable cuyo valor o contenido es una dirección de memoria.

EXAMENES RESUELTOS DE PROGRAMACION I

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

Estructuras de datos Solemne 2

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Estructuras Dinámicas de datos.

Profesor: José Miguel Rubio L.

Registros. Programación 1. InCo - FING. Programación 1 Registros InCo - FING 1 / 20

ESTRUCTURAS DE DATOS Y ALGORITMOS

Tema 5. Estructura de datos Pila

Tema 2.- Ordenación (Parte I)

B) Contestar Verdadero o Falso a las siguientes preguntas, justificando la respuesta:

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

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 -

Resolución de Problemas y Algoritmos

1. Lenguaje Pascal. 2. Módulos de un Programa. 3. Tipos de Datos más utilizados. 4. Declaración de Variables

Algorítmica y Lenguajes de Programación. Ficheros

SEGUNDO EXAMEN PARCIAL ESTRUCTURA DE DATOS Y ALGORITMOS 27 MARZO 2014 (Grupo 81M Leganés Mañana)

Tema 2 Tipos abstractos de datos. 2.3 Cola de números enteros.

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

Práctica 4. TAD lista posicional

FUNDAMENTOS DE PROGRAMACIÓN LABORATORIO SESIÓN 2

Colas. 5.1 Implementación

Trabajo Práctico Nº 4 Iteración

Calidad del Software. Ejercicios Tema 4 Conceptos de pruebas

Diseño de Pilas y Colas

PEC1. Formato y fecha de entrega. Presentación. Competencias

Introducción a los tipos abstractos de datos

Estructura de Datos Tema 2. Colas. Contenido

Estructura de datos Colas

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

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 -

UNIDAD 9. DATOS COMPLEJOS PILAS

Tipos de Datos Abstractos

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

Donde Condicion es una expresión booleana, es decir, que puede tomar el valor verdadero (true) o falso (false).

Programación I. Ingeniería Técnica Informática. Ejercicios de los Temas 4, 5, 6 y 7

1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura:

Introducción al Lenguaje de Programación Ada

324 MR Versión 1 Primera Integral 1/5 Lapso 2009/2. ASIGNATURA: Computación II CÓDIGO: 324 MOMENTO: Primera Integral FECHA DE APLICACIÓN: 24/10/09;

FUNDAMENTOS DE OBJECT PASCAL

Práctica 2. TAD pila

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

Transcripción:

Tipo de dato Abstracto (Tad) PILAS COLAS

Tipos Abstractos de Datos - PILA Tope Poner Sacar

Tipos Abstractos de Datos - PILA El tipo de Dato PILA (stack) es una estructura de datos que organiza los datos de la siguiente manera: A partir de una dirección de memoria, los datos se almacenan como si fueran una colección ordenada de elementos (cartas, platos, libros, camisas, etc). El orden está asociado al orden de llegada a la estructura. Ejemplo

Tipos Abstractos de Datos - PILA CARACTERÍSTICAS Homogénea: ya que almacena elementos del mismo tipo. Dinámica: ya que permite agregar y sacar elementos durante la ejecución del programa. Acceso LIFO: (Last In First Out): los elementos se recuperan en orden inverso al que fueron almacenados. En cualquier momento se puede recuperar el objeto que se encuentra al tope de la pila (es decir, el último que fue guardado). Son muy pocos los lenguajes de programación que cuentan con una estructura de este tipo como tipo estándar. En particular, Pascal no dispone del tipo de datos pila.

Tipos Abstractos de Datos - PILA OPERACIONES Crear una pila. Agregar un elemento. Sacar un elemento. Poder saber cual es el elemento que está al tope de la pila. Cantidad de elementos de la pila. Saber si una pila está vacía.

Tipos Abstractos de Datos - PILA Trabajaremos con el TAD PILA de Enteros Por qué conviene definir el TAD Pila de enteros? Cómo funciona el poner (Agregar) un elemento de la estructura? Cómo funciona el Sacar un elemento de la estructura? 7 12 Dónde se Agrega un dato? Pila de Enteros 40 23 De dónde se saca un dato?

Tipos Abstractos de Datos - PILA Recordemos las operaciones: Crear una pila: st_create Agregar un elemento de la pila: st_push Sacar un elemento de la pila: st_pop Conocer el elemento que está al tope de la pila: st_top Cantidad de elementos de la pila: st_length Saber si una pila está vacía: st_empty Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - PILA TAD TipoPILA; Interface type exportado Pila; Procedure st_create (var p:pila); //crea una pila vacía. Procedure st_push (var p:pila; elem:integer); //agrega el elemento elem a la pila p. Procedure st_pop (var p:pila; var elem:integer); //saca el elemento elem a la pila p. La pila debe tener elementos. Procedure st_top (p:pila; var elem:integer); //devuelve el elemento ubicado al tope de la pila sin sacarlo. La pila debe tener elementos. Function st_length (p:pila):integer;//devuelve la cantidad de elementos de la pila p. Fucntion st_empty (p:pila):boolean; Algoritmos, //devuelve Datos true y Programas si la pila p está vacía, false en caso contrario. 2010

Tipos Abstractos de Datos - PILA Implementacion piladatos= ^nodo; nodo =record elemento:integer; sig: piladatos; end; pila= record; datos:piladatos; cant:integer; end; depende de los elementos de la pila, en este caso es de enteros Mantiene la cantidad de elementos de la pila, es para realizar más fácil la implementación de algunos módulos Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - PILA Procedure st_create (var p:pila); //crea una pila vacía. Begin p.cant:= 0; p.datos:= nil; End; Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - PILA Procedure st_push (var p: pila; elem: integer); //agrega el elemento elem a la pila p. Var aux:piladatos; Begin new (aux); aux^.elemento:= elem; if (p.datos= nil) then aux^.sig:=nil; else begin aux^.sig:= p.datos; p.datos:= aux; p.cant:= p.cant+1; End; Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - PILA Procedure st_pop (var p:pila; var elem:integer); //saca y devuelve el elemento del tope de la pila p. Var aux:piladatos; Begin elem:= p.datos^.elemento; aux:= p.datos; p.datos:= p.datos^.sig; dispose (aux); p.cant:= p.cant-1; End; Notar que en este procedimiento no se verifica que la pila tenga elementos Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - PILA Procedure st_top (p:pila; var elem:integer); //devuelve el elemento del tope de la pila p, sin eliminar el elemento de la pila. Begin elem:= p.datos^.elemento; End; Notar que en este procedimiento no se verifica que la pila tenga elementos Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - PILA Function st_length (p: pila): integer; //devuelve la cantidad de elementos de la pila. Begin st_length:= p.cant; End; Function st_empty (p: pila): boolean; //devuelve true si la pila está vacia, false en cc. Begin st_empty:= (p.cant=0); End;

Tipos Abstractos de Datos - PILA Realice un programa que lea números enteros hasta que viene el número 999. Una vez que la lectura ha finalizado se debe imprimir los números leídos en orden inverso. Si se lee 25 6 89 23 999 Se debería imprimir 23 89 6 25

Tipos Abstractos de Datos - EJEMPLO Program uno; Uses TipoPila; Indica que se utiliza el TAD Var p:pila; Variable del tipo exportado ele:integer; Begin read(ele); st_create(p); while (ele <> 999) do begin st_push(p,ele); read (ele); end; while (not st_empty (p) ) do begin st_pop(p,ele); write(elem); end; end.

Tipos Abstractos de Datos - COLA El tipo de Dato COLA (queue) es una estructura de datos que organiza los datos de la siguiente manera: A partir de una dirección de memoria, los datos se almacenan sucesivamente como si fueran una colección ordenada de elementos (cartas, clientes frente a una ventanilla, libros en un estante, mensajes a una casilla de correo, etc), y En cualquier momento se puede recuperar el objeto que se encuentra primero en la estructura (es decir, el primero que fue guardado).

Tipos Abstractos de Datos - COLA CARÁCTERÍSTICAS Homogénea: ya que almacena elementos del mismo tipo. Dinámica: ya que permite agregar y sacar elementos durante la ejecución del programa. Acceso FIFO: (First In First Out): los elementos se recuperan en orden inverso al que fueron almacenados. En cualquier momento se puede recuperar el elemento que se encuentra en el frente de la cola (es decir, el primero que fue guardado). Son muy pocos los lenguajes de programación que cuentan con una estructura de este tipo como tipo estándar. En particular, Pascal no dispone del tipo de datos cola.

Tipos Abstractos de Datos - COLA OPERACIONES Crear una cola. Agregar un elemento a la estructura. Sacar un elemento de la estructura. Poder saber cual es el elemento que está en el frente de la cola. Poder saber cual es el elemento que está en el fondo de la cola. Cantidad de elementos de la cola. Saber si una cola está vacía.

Tipos Abstractos de Datos - COLA Trabajaremos con el TAD COLA de Enteros Por qué conviene definir el TAD Cola de enteros? Cómo funciona el poner (Agregar) un elemento de la estructura? Cómo funciona el Sacar un elemento de la estructura? 23 7-4 100 48 Cola de Enteros Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - COLA OPERACIONES Crear una cola: q_create Agregar un elemento a la estructura: q_push Sacar un elemento de la estructura: q_pop Poder saber cual es el elemento que está en el frente de la cola q_top Poder saber cual es el elemento que está en el fondo de la cola: q_bottom. Cantidad de elementos de la cola: q_length Saber si una cola está vacía: q_empty Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - COLA TAD TipoCOLA; //maneja una cola de enteros Interface type exportado cola; Procedure q_create (var c:cola); //crea una cola vacía. Procedure q_push (var c:cola; elem:integer); //agrega el elemento elem a la cola c. Procedure q_pop (var c:cola; var elem:integer); //saca el primer elemento de la cola p. Procedure q_top (c:cola; var elem:integer); //devuelve el elemento ubicado en el frente de la cola sin sacarlo. Procedure q_botton (c:cola; var elem:integer); //devuelve el elemento ubicado en el fondo de la cola sin sacarlo. Function q_length (c:cola):integer; //devuelve la cantidad de elementos de la cola c. Function q_empty (c:cola):boolean; //devuelve true si la cola p está vacía, false en caso contrario. Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - COLA Discutamos una posible implementación... Implementacion coladatos= ^nodo; Podemos utilizar la misma representación que en el Tad pila? Cómo conviene representarla? Por qué? nodo =record elemento:integer; sig: coladatos; end; cola= record; pri:coladatos; ult:coladatos; cant:integer; end; Algoritmos, Datos y Programas 2010 depende de los elementos de la cola Mantiene la cantidad de elementos de la cola.

Tipos Abstractos de Datos - COLA Procedure q_create (var c:cola); //crea una cola vacía. Begin c.cant:= 0; c.pri:= nil; c.ult:= nil; End;

Tipos Abstractos de Datos - COLA Procedure q_push (var c:cola; elem:integer); //agrega el elemento elem a la cola c. Var aux:coladatos; Begin new (aux); aux^.elemento:= elem; aux^.sig:= nil; if (c.pri= nil) then begin c.pri:= aux; c.ult:=aux; end else begin c.ult^.sig:= aux; c.ult:= aux; end; c.cant:= c.cant+1; End; Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - COLA Procedure q_pop (var c:cola; var elem:integer); //saca y devuelve el elemento del tope de la cola c. Var aux:coladatos; Begin elem:= c.pri^.elemento; aux:= c.pri; c.pri:= c.pri^.sig; dispose (aux); c.cant:= c.cant-1; End; Notar que en este procedimiento no se verifica que la cola tenga elementos

Tipos Abstractos de Datos - COLA Procedure q_top (c:cola; var elem:integer); //devuelve el elemento del tope de la cola c, sin eliminar el elemento de la cola. Begin elem:= c.pri^.elemento; End; Notar que en este procedimiento no se verifica que la cola tenga elementos Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - COLA Procedure q_botton (c:cola; var elem:integer); //devuelve el elemento del final de la cola c, sin eliminar el elemento de la cola. Begin elem:= c.ult^.elemento; End; Notar que en este procedimiento no se verifica que la cola tenga elementos Algoritmos, Datos y Programas 2010

Tipos Abstractos de Datos - COLA Function q_length (c: cola): integer; //devuelve la cantidad de elementos de la cola. Begin q_length:= c.cant; End; Function q_empty (c: cola): boolean; //devuelve true si la cola está vacia, false en cc. Begin q_empty:= (c.cant=0); End;

Tipos Abstractos de Datos Ejemplo Realice un programa que lea dos secuencias de números y las almacene. Cada secuencia termina con el número 0. Al finalizar toda la lectura informar si las secuencias son simétricas. Si se lee 25 6 89 23 29 0 29 23 89 6 25 Se debería imprimir las secuencias son simétricas Analicemos cual es la ventaja de utilizar las estructuras vistas...

Tipos Abstractos de Datos - Ejemplo Program uno; Uses TipoPila, TipoCola; Var p:pila; c:cola; Begin st_create(p); q_create(c); cargarpila (p); cargarcola (c); if (simetricas (p, c)) then write ( Son Simétricas ) else write ( No son Simétricas ); End.

Tipos Abstractos de Datos - Ejemplo Procedure cargarpila (var p:pila); var elem:integer; begin read (elem); while (elem <> 0) do begin st_push(p, elem); read (elem); end; End;

Tipos Abstractos de Datos - Ejemplo Procedure cargarcola (var c:cola); var elem:integer; begin read (elem); while (elem <> 0) do begin q_push(c, elem); read (elem); end; End;

Tipos Abstractos de Datos - Ejemplo Function simetrica (p: pila; c: cola): boolean; var elemp, elemc: integer; ok: boolean; begin ok:=true; if (st_length(p) <> q_length(c)) then ok:=false else begin while ((ok) and (not st_empty(p))) do begin q_pop(c,elemc); st_pop(p,elemp); if (elemc <> elemp) then ok:= false; end; simetrica:= ok; end;