Estructuras de Datos Especificación formal de Listas.

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.
ESTRUCTURA DE DATOS Unidad 03 COLAS.
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.
Tema 3: La estructura de datos Lista
Estructuras de datos y algoritmos
ESTRUCTURAS LINEALES UNIDAD 3.
Especialista en Business Intelligence Integration Services SSIS (Sesión 5) Microsoft SQL Server 2008 R2 (Nov.2013) Suscribase a o.
SQL Server Integration Services SSIS
Realizado por: Ing. Mauricio Rivera1 Colas. Realizado por: Ing. Mauricio Rivera2 ¿Qué es una Cola? Una cola es un grupo ordenado de elementos homogéneos.
PROGRAMACION DE Pilas o Stacks y Colas
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Implementación de Listas
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.
Tecnología de la Programación Javier Nieves Acedo Standar Template Library (STL)
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Colas y Listas Enlazadas
Tema Nº4.
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.
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.
Listas circulares.
Unidad 1 Definiciones Básicas
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.
Estructura de Datos En C++
Arboles M.C. José Andrés Vázquez FCC/BUAP
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.
Pilas y Colas Estructuras de Datos.
Árboles.
República Bolivariana de Venezuela. Ministerio del PP para la Defensa. Universidad Nacional Experimental de la Fuerza Armada. Cátedra: Instrucción Militar.
Universitarios: Ricardo Gonzales Jimenez Wilfredo Coca Reinaldo Yohan Docente: Lic. Israel Torrez Valverde Tema: Listas doblemente Enlazadas.
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.
INSTITUTO TECNOLOGICO DE APIZACO
UNIDAD IV. PILAS, COLAS, RECURSION APLICADAS A LENGUAJE C.
Ayudantia 3: Pilas- Colas
Lic. En C.C. Ann Margareth Meza Rodríguez
3. Estructuras lineales 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
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”
OPERACIONES CON PILAS DECLARACIÓN O INICIALIZACIÓN DE LA PILA. Stack NombrePila=newStack (max);
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
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.
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:

Estructuras de Datos Especificación formal de Listas

Una lista es un conjunto de componentes estándar (stdelement) con estructura lineal no cíclica Lista Stdel 2Stdel 1Stdel 3

Especificación del Tipo de Datos Lista Caracterización: Agregado iterado con componentes stdelement Dominio: Agregado iterado con n (n>= 0, n  entero) componentes de tipo stdelement Estructura de Composición: –Aridad: Lineal –No cíclica Componentes: Conjunto de elementos estándar stdelement (objetos con campo clave o con clave derivada a partir de otros campos).

Características de la Estructura: Hay una relación no reflexiva dirigida entre los elementos, denominada “sucesor” Si n>0, hay un elemento que no es sucesor de ningún otro y se denomina “primero”. Si n>0 hay un elemento que no tiene sucesor y se denomina “último”. Todos los demás tienen un sucesor diferente a ellos y son el sucesor de otro diferente a ellos.

Definiciones 1/2 Primero: Elemento de la lista que no es sucesor de ningún otro. Último: Elemento de la lista que no tiene sucesor. eeSiguiente de e: Elemento sucesor de e. eeAnterior a e: Elemento del que e es el sucesor. eeCamino a e: Lista de los antecesores a e bajo la relación “sucesor”. Actual: El elemento señalado en la lista por el cursor Cursor: Posición del elemento señalado en la lista. Lista vacía: Lista con n = 0: {NULL}. Lista no vacía: {e 1,e 2,...,e n }

Definiciones 2/2 Adelante: Relación dirigida entre e  E y e’  E y e’  e. e’ está delante de e si se cumple cualquiera de las siguientes 2 condiciones: –1: e’ = siguiente(e)  e’ = adelante(e) –2: (  e”  E / (e” = adelante(e)  e’ = siguiente(e”))  e’ = adelante(e) Atrás: Relación dirigida entre e  E y e’  E y e’  e: e está atrás de e’ si se cumple: –1: e’ = adelante(e)  e = atras(e’) Posición de e: |{e’: e’  E / e’ = atrás(e)}| + 1

Operaciones Definición de variables: L: una lista. Cursor: entero, posición del elemento señalado. POF: una lista. PRF: una lista. e: un elemento del tipo del componente (stdelement). a: un elemento del tipo del componente (stdelement). n: un entero (el tamaño de la lista) n = tamaño(L). k: una clave del tipo de la clave del componente. t,i,p: Enteros. b: booleano

L = L.nueva_lista(): Crea la lista L vacía. PRE:  L POST:  L  L = {NULL}  Cursor = 0 L.destruir_lista(*L): Destruye la lista L. PRE: L = {NULL} POST:  L I) I) Operaciones de Creación y Destrucción

II) II) Operaciones Consultoras n= L.tamaño(): Tamaño de la lista. PRE:  L  L = {e,POF} POST: n = 1 + tamaño(POF) PRE:  L  L = {NULL} POST: n = 0 e = L.actual(): Recupera el elemento actual. PRE:  L  L = {PRF,a,POF}  tamaño(PRF) = Cursor – 1 POST: e = a

b= L.existe(k): ¿Existe el elemento de clave k en L?. PRE:  L  L = {e,POF} POST: if(clave(e) = k) b = true else existe(POF,k) PRE:  L  L = {NULL} POST: b = false t = L.posicion(e): Devuelve la posición de e. PRE:  L  L = {PRF,e,POF} POST: t = tamaño(PRF)+1

p= L.pos_clave(k): Retorna la posición del elemento con clave k. PRE:  L  L = {PRF, e} POST: if(clave(e) = k) p = tamaño(PRF) + 1 else pos_clave(PRF, k) PRE:  L  L = {NULL} POST: p = 0

III) III) Operaciones de Navegación L.a_primero(): Coloca el cursor en el primer elemento de L. PRE:  L  L  {NULL} POST: Cursor = 1 L.a_ultimo(): Coloca el cursor en el último elemento de L. PRE:  L  L  {NULL} POST: Cursor = n

L.a_anterior(): Se sitúa en el elemento anterior al actual. PRE:  L  L  {NULL}  i = Cursor POST: if( i = 1){Cursor = i} else {Cursor = i – 1} L.a_siguiente(): Se sitúa en el elemento siguiente al actual. PRE:  L  L  {NULL}  i = Cursor POST: if(i = n){Cursor = i} else{Cursor = i + 1}

L.a_iesimo(t): Se sitúa en el t-ésimo elemento. PRE:  L  L  {NULL}  i = Cursor POST: if(t n){Cursor = i} else {Cursor = t} L.a_clave(k): Se sitúa en el elemento de clave k. PRE:  L  L  {NULL}  i = Cursor POST: if(existe(L, k)){Cursor = pos_clave(L, k)} else {Cursor = i}

IV) IV) Operaciones de Inserción y Borrado L= L.inserte_antes(e): Inserta e antes del actual. PRE:  L  L = {PRF,a,POF}  actual(L) = a  tamaño(PRF) = Cursor-1  i = Cursor  ¬existe(L, clave(e)) POST: L = {PRF, e,a, POF}  Cursor = i PRE:  L  L = {NULL} POST: L = {e}  Cursor = 1

L= L.inserte_despues(e): inserta e después del actual. PRE:  L  L = {PRF,a,POF}  actual(L) = a  tamaño(PRF) = Cursor – 1  i = Cursor ¬existe(L, clave(e)) POST: L = {PRF,a,e,POF}  Cursor = i + 1 PRE:  L  L = {NULL} POST: L = {e}  Cursor = 1

L= L.borre(): borra el actual. PRE:  L  L = {PRF,a,POF}  a = actual(L)  tamaño(PRF) = Cursor – 1  i = Cursor POST: L = {PRF,POF}  if(PRF  {NULL}) Cursor = i – 1 else if(POF  {NULL}) Cursor = i else Cursor = 0

V) V) Operaciones de Actualización L.actualize(e): Cambia el elemento actual por otro (siempre y cuando tenga la misma clave) PRE:  L  L = {PRF,a,POF}  a = actual(L)  tamaño(PRF) = Cursor – 1  clave(a) = clave(e) POST: L = {PRF,e,POF}

Pilas Los stacks (pilas) son listas cuyo comportamiento obedece a la disciplina LIFO (last in, first out) esto significa que el último elemento en entrar es el primero en salir. Ej: Pila de bandejas en una cafetería. Su especificación se diferencia de las listas en las funciones de inserción y borrado de componentes

Especificación pila Operaciones de inserción y borrado. L.push(e:stelement): Inserta e después del último elemento insertado. PRE:  L  L  {NULL}  L = {PRF}  tamaño(L) = n  ¬existe(L, clave(e)) POST: L = {PRF,e}  tamaño(L) = n + 1 PRE:  L  L = {NULL} POST: L = {e}  n = 1 L.pop(): borra el elemento recientemente insertado. PRE:  L  L = {PRF, e}  tamaño(L) = n POST: L = {PRF}  tamaño(L) = n – 1

Colas Las colas son listas que exhiben un comportamiento FIFO (first in, first out). Los elementos pueden ser adicionados a la cola uno tras otro, sin embargo el único elemento que puede ser retirado es el que ha permanecido más tiempo almacenado en la cola. Ej: Una fila en un supermercado Al igual que las pilas su especificación se diferencia de las listas en las funciones de inserción y borrado de componentes

Especificación Cola Operaciones de inserción y borrado. L.enqueue(e:stelement): Inserta e después del último elemento insertado. PRE:  L  L  {NULL}  L = {PRF}  tamaño(L) = n  ¬existe(L, clave(e)) POST: L = {PRF,e}  tamaño(L) = n + 1 PRE:  L  L = {NULL} POST: L = {e}  n = 1 L.serve(): borra el elemento menos recientemente insertado. PRE:  L  L = {e, POF}  tamaño(L) = n POST: L = {POF}  tamaño(L) = n – 1