Tema 3. Estructuras Lineales De Datos: Listas, Pilas, Colas

3y ago
75 Views
4 Downloads
816.72 KB
110 Pages
Last View : 9d ago
Last Download : 3m ago
Upload by : Camryn Boren
Transcription

Fundamentos de Programación IITema 3. Estructuras lineales dedatos: listas, pilas, colasLuís Rodríguez Baena (luis.rodriguez@upsam.net)Universidad Pontificia de Salamanca (campus Madrid)Escuela Superior de Ingeniería y Arquitectura

Tipos abstractos de datos Procedimientos y funciones generalizan el concepto de operador. El programador puede definir sus propios operadores y aplicarlos sobreoperandos de tipos no definidos en el lenguaje. En un algoritmo en lugar de utilizar sólo los operadores que utiliza el lenguaje,mediante procedimientos y funciones se pueden aplicar sus propios operandos atipos de datos no definidos por el lenguaje.o Por ejemplo, se puede ampliar el operador de multiplicación para multiplicarmatrices. Procedimientos y funciones encapsulan las operaciones, las aíslan delcuerpo del algoritmo. Tipo Abstracto de Datos (TAD). Amplía el concepto de procedimiento a la definición de datos. Modelo matemático del dato junto con las operaciones que se puedendefinir sobre él. Utilizan también generalización y encapsulamiento. Son generalizaciones de los tipos de datos primitivos. Facilitan la localización de la definición del tipo y de las operaciones para sumanejo.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 20122

Tipos abstractos de datos (II) Por ejemplo, se puede definir el tipo de datos Cuadrado y lasoperaciones Área(c) y Perímetro(c)que devolverían elvalor del área y del perímetro del cuadrado c. El cuadrado se puede implementar de distintas formas: Con la posición de los cuatro vértices en las coordenadas de unplano.registro puntoreal : x,yfin registroregistro cuadradopunto: infIzq, infDer, supIzq, supDerfin registro Con la posición de un punto y el tamaño del lado.registro cuadradopunto:origenreal: ladofin registroUniversidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 20123

Tipos abstractos de datos (III) El procedimiento área podría implementarse de distintas formasdependiendo de cómo se haya definido el cuadrado.real función Área(valor cuadrado: c)iniciodevolver(c.lado * c.lado)fin funciónreal función Área(valor cuadrado: c)varreal : ladoinicio//lado es la distancia entre dos puntoslado raiz2((c.infIzq.x – infDer.x)**2 (c.infIzq.y – infDer.y)**2)devolver(lado * lado)fin función Si en un programa utilizamos el tipo de datos Cuadrado y tenemos definidasen ese tipo de dato la función Área, la llamada a la función será Area(c),independientemente de la implementación que hayamos hecho.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 20124

Tipos abstractos de datos (IV) Estructuras de datos “físicas” y “lógicas”. Podemos considerar que una estructura de datos física es la queimplementa el lenguaje de programación que se está utilizando. Una estructura de datos lógica sería una estructura de datos que noimplementa el lenguaje y que creamos a partir de los tipos de datosy las estructuras de datos físicas que proporciona el lenguaje. Este concepto puede variar de un lenguaje a otro: Conjunto: presente en Pascal y no presente en C. Cadena: presente en Java, pero no presente en Pascal estándar. Archivos indexados: presente en Cobol y no presente en C. Las estructuras de datos que se han utilizado hasta ahora yaestaban definidas por el lenguaje de especificación dealgoritmos utilizado (son estructuras de datos “físicas”). El lenguaje define el tipo array e incluye las herramientasnecesarias para declarar un array, acceder a un elemento, etc.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 20125

Tipos abstractos de datos (V) Los lenguajes no soportan todas las estructuras de datosposibles. En muchas ocasiones es necesario realizar la definición de laestructura de datos y declarar las operaciones primitivas que lamanejan. Haremos la definición del Tipo Abstracto de Datos.o Definir el tipo de dato que contendrán.o Establecer la organización de los datos utilizando los datos primitivos.o Establecer las operaciones primitivas para manejar el tipo de dato. Las estructuras de datos utilizadas en este tema (pilas, colas,listas enlazadas) no están implementadas en el lenguaje deprogramación. Será necesario definirlas con las estructuras de datos disponibles. Será necesario implementar las operaciones primitivas paramanejarlas.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 20126

Datos estáticos y dinámicos Dato estático. Dato que no puede variar su ubicación a lolargo de la ejecución del programa. Se reserva espacio en tiempo decompilación. Cuando el programa empieza su ejecuciónes necesario saber de antemano sutamaño y ubicación en la memoria. Se almacena en una zona de memoriaestática: pila. El dato se identifica por una variable que noes más que una dirección de memoriadónde está almacenada la información. Cuando se asigna un valor a ese dato, sealmacena directamente en esa dirección dememoria. Cuando se accede a ese dato, por ejemploal ejecutar la instrucción escribir(a), seaccede de forma directa al contenido de esadirección de memoria.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012Memoria estática(Pila)aMemoria estática(Pila)aentero: a5a57

Datos estáticos y dinámicos (II) Dato dinámico. Realiza una asignación dinámica de memoria. Reserva espacio para almacenar la información en tiempo de ejecución. Cuando el programa comienza su ejecución, sólo se reserva espaciopara almacenar una referencia a la posición donde se almacenará eldato, no para almacenar el dato en sí. La variable que guarda la dirección de memoria (la referencia) es elpuntero. El puntero se almacena en la pila. Durante la ejecución del programa es posible reservar memoriapara el dato al que apunta el puntero. El dato en sí se almacena en una zona de memoria dinámica: elmontículo. En cualquier momento se puede reservar o liberar ese espacio.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 20128

Datos estáticos y dinámicos (III) Definición de un puntero.puntero a tipoDato : varPuntero tipoDato, cualquier tipo de datoestándar o definido por el usuario. Al arrancar el programa la variable detipo puntero no está inicializada (notiene ningún valor). Sólo es posible darle valor asignándolaa otro puntero, reservando espacio enmemoria o asignándola a punteronulo.Memoria estática(Pila)a5ptr1ptr2 Puntero nulo. Se corresponde a la constante nulo. Se considera un puntero inicializado(cómo dar a una variable numérica unvalor 0). Apunta a una dirección de memorianula.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012puntero a entero : ptr1puntero a entero : ptr29

Datos estáticos y dinámicos (IV) Reservar espacio en el montículo.reservar(varPuntero) Busca espacio en memoria para almacenar una variable del tipo devarPuntero. varPuntero se carga con la dirección de memoria que se ha encontrado. Referencia al dato apuntado por el puntero. Se utiliza el operador .varPuntero Si varPuntero hace referencia a la zona de memoria a la que apunta,varPuntero hace referencia al contenido de dicha zona de memoria. Hay que tener en cuenta que: varPuntero es una variable de tipo puntero, por lo que sólo es posible asignarlaotro puntero (otra variable de tipo puntero, puntero nulo o reservar espacio).o Los operadores de asignación o las instrucciones de lectura o escritura no funcionan dela misma forma para variables de tipo puntero que para otro tipo de variables. varPuntero hace referencia al contenido de la memoria a la que apunta alpuntero, por lo que es un dato del tipo base del puntero.o Sobre ella se podrán hacer todas las operaciones que se puedan hacer con el tipo basedel puntero.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201210

Datos estáticos y dinámicos (V)Memoria estática(Pila)aMemoria dinámica(montículo)5ptr1ptr2reservar(ptr1)ptr15 //Errorescribir(ptr1) //Errorleer(ptr1) //ErrorUniversidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201211

Datos estáticos y dinámicos (VI) Asignación de variables de tipopuntero. Lo que asigna no es elcontenido, sino la dirección dememoria, la referencia. Comparación de variables detipo puntero. Compara si dos punterosapuntan a la misma direcciónde memoria.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201212

Datos estáticos y dinámicos (VII) Liberar espacio dealmacenamiento.liberar(varPuntero) Deja libre la posición dememoria, volviéndola amarcar como zona libre. El puntero que apuntaba laposición queda indeterminado. No es posible recuperar lainformación a la que apuntabael puntero. A no ser que exista otra referenciaque también apuntaba al mismodato (como ptr2).Memoria estática(Pila)a5ptr1Memoria ersidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201213

Estructuras de datos dinámicas Sus componentes están dispersos por la memoria. Al no ocupar posiciones contiguas es necesario establecer unmecanismo para acceder al siguiente elemento de la estructura. Es necesario saber cuál es el primer elemento de la estructura Cada elemento de la estructura es un nodo. Cada nodo contiene la información y, por lo menos, un punteroindicando cual es el siguiente elemento de la estructura. Existe una variable de tipo puntero que apunta al primer nodo de laestructura.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201214

Estructuras de datos lineales y nolineales Estructuras de datos lineales. Cada componente tiene un único sucesor y un único predecesor conexcepción del último y el primero. Estructura de datos no lineal. Cada componente puede tener varios sucesores y varios predecesores.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201215

Estructuras de datos lineales: listas Estructura lineal compuesta por una secuencia de 0 omás elementos de algún tipo determinado y ordenadosde alguna forma. Puede crecer o disminuir en el número de elementos ypodrán insertarse o eliminarse elementos en cualquierposición sin alterar su orden lógico.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201216

Estructuras de datos lineales: listas (II) Listas contiguas. Los elementos ocupan posiciones contiguas de memoria. Se pueden implementar con arrays. Los elementos ocuparían posiciones correlativas del array. Presentan dos problemas:o La inserción o el borrado de elementos implica mover las posicionespara mantener el orden original.o El número de elementos de la lista se puede modificar, pero no puedesobrepasar el tamaño máximo del array.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201217

Estructuras de datos lineales: listas (III)array[1.8] de cadena : EL4JUANAn 7RAUL8RAUL8RAULn 8Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012insertar(v,’CARMEN’,n)Error, no se puedeinsertar porque el arrayestá llenon 8n 718

Estructuras de datos lineales: listas (IV) Listas enlazadas. Los elementos no ocupan posiciones contiguas de memoria. Aparecen dispersos por el almacenamiento. Cada elemento contiene una referencia al siguiente elemento de laestructura. El orden lógico lo darán los enlaces que hay entre elementos. El primer elemento en el orden lógico no tiene por quécorresponderse con el primer elemento almacenado. El necesario indicar cuál es el primer elemento en el orden lógico. También es necesario indicar cual será el último elemento en elorden lógico de la estructura. La inserción o eliminación de elementos no implica mover loselementos de sitio. Sólo se modifican las referencias al siguiente elemento. Si se utilizan estructuras de datos dinámicas el número deelementos será virtualmente ilimitado.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201219

Estructuras de datos lineales: listas (V) Implementación mediante arrays de registros Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201220

Estructuras de datos lineales: listas (VI) Implementación mediante punteros Puntero nuloUniversidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201221

Pilas Es un tipo especial de lista. Estructura lineal de datos compuesta por una secuencia deelementos en la que las operaciones sólo se pueden realizar por unode sus extremos llamado cima (tope o top). Estructuras de tipo LIFO (Last In-First Out). Se utiliza para poder recuperar elementos en orden inverso a comoentran. Ejemplos reales: montones de platos. Aplicaciones en informática. Evaluación de algunos tipos de expresiones Cuadros de diálogos, pantallas y menús desplegables.o Cada cuadro se abre encima de otro; al cerrarse uno, el cuadro activo es el últimoque se ha abierto. Simulación de la recursividad. En general, cualquier aplicación en la que se necesite recuperar información enorden inverso a como ha entrado.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201222

Pilas (II)Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201223

Pilas (III) La estructura de tipo Pila no se considera implementada ennuestro lenguaje de programación. En otros lenguajes, como .NET, existe la clase Stack (pila en inglés)que implementa pilas e incluye todas las operaciones que sepueden hacer sobre las pilas. Será necesario crear el tipo de dato Pila. Determinar las operaciones básicas que se pueden realizar sobre eltipo de dato Pila: las operaciones primitivas. Definir el tipo de elementos que contendrá la pila. Definir la organización de los datos utilizando los datos yestructuras de datos que ofrezca el lenguaje de programación. Implementar las operaciones primitivas para la organización de losdatos definida. Dependiendo de la organización definida, la implementación de lasoperaciones primitivas variará.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201224

Pilas (IV) Operaciones primitivas. Procedimiento PilaNueva(ref pila: p) Crea un pila sin elementos. Función lógica EsPilaVacía(valor pila: p). Devuelve verdad si la pila está vacía. Procedimiento PInsertar (ref pila:p; valor TipoElemento:e)o Push(ref pila : p; valor TipoElemento: e). Inserta un elemento e en la pila y devuelve la pila resultante. TipoElemento es un tipo de dato genérico que se corresponde al tipo de datode los elementos que contendrá la pila. Procedimiento Cima(valor pila: p; ref TipoElemento : e). Devuelve en el argumento e el elemento situado en la cima de la pila. Procedimiento PBorrar(ref pila : p). Elimina el elemento cima de la pila y devuelve la pila resultante. Procedimiento Pop(ref pila : p; ref TipoElemento : e) oSacar(ref pila : p; ref TipoElemento : e). Elimina un elemento de la cima de la pila, devolviendo la pila resultante y elelemento extraído.Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201225

Realizaciones mediante arrays Las pilas se pueden implementar utilizando estructuras de datos dinámicas(listas enlazadas) o estáticas (arrays). La pila está definida por la posición dónde está el último elemento (la cima). Este dato es lo único que necesitamos para trabajar con pilas. Si se implementa con un array, también es necesario determinar dónde se almacenará lainformación (el array el). Como se trata de estructuras de datos estáticas, debemos definir también el tamaño máximo delarray (MaxPila). Además el tipo de dato TipoElemento definirá el tipo de elementos que almacenará lapila. Definición de las estructuras de datos.constMaxPila tipos TipoElementoregistro Pilaentero : cimaarray[1.MaxPila] de TipoElemento : elfin registroMaxPilacimaelPilaUniversidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201226

Realizaciones mediante arrays (II) Procedimiento PilaNueva. Se limita a inicializar la cima de la pila a 0. Función EsPilaVacía, Devuelve verdad si la pila está vacía.procedimiento PilaNueva(ref pila : p)iniciop.cima 0fin procedimientológico: función EsPilaVacía(valor pila :p)iniciodevolver(p.cima 0)fin funcióncima 0pPilaNueva(p)EsPilaVacía(p)Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012//Devuelve verdad27

Realizaciones mediante arrays (III) Procedimiento PInsertar Inserta en la posición cima un elemento de TipoElemento. En la implementación con arrays, es necesario comprobar si la pila estállena (si cima MaxPila).procedimiento PInsertar(ref pila:p;valor TipoElemento:e)iniciosi p.cima MaxPila entonces// Error, la pila está llenasi nop.cima p.cima 1p.el[p.cima] efin sifin procedimientoUniversidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, )Pinsertar(p,’ANA’)Pinsertar(p,’LUIS’)28

Realizaciones mediante arrays (IV) Procedimiento Cima Devuelve el dato de TipoElemento situado en la posición cima. Es necesario comprobar si la pila contiene elementos (si cima 0).procedimiento Cima(valor pila : p ;ref TipoElemento : e)iniciosi p.cima 0 entonces// Error la pila está vacíasi noe p.el[p.cima]fin sifin ibir(nombre)//Escribe ‘LUIS’Universidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 201229

Realizaciones mediante arrays (V) Procedimiento PBorrar Elimina el elemento cima de la pila Es necesario comprobar si la pila contiene elementos (si cima 0).procedimiento PBorrar(ref pila : p)iniciosi EsPilaVacía(p) entonces// Error la pila está vacíasi nop.cima p.cima - 1fin sifin procedimientoUniversidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012LUISANAcima21MANOLOpPBorrar(p)PBorrar(p)30

Realizaciones mediante arrays (VI) Procedimiento Pop (Sacar) Elimina y devuelve el elemento de TipoElemento situado en la cimade la pila. Es necesario comprobar si la pila contiene elementos (si cima 0).procedimiento Pop(ref pila:p; ref TipoElemento:e)iniciosi EsPilaVacía(p) entonces// Error la pila está vacíasi noe p.el[p.cima]p.cima p.cima - 1fin sifin procedimientoUniversidad Pontificia de Salamanca (Campus Madrid)Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012LUISANAcima0MAN

Procedimientos y funciones encapsulan las operaciones, las aíslan del . Escuela Superior de Ingeniería y Arquitectura, 2012 12 tipo puntero. Compara si dos punteros apuntan a la misma dirección de memoria. . Estructuras de datos lineales y no lineales

Related Documents:

capítulos 2 y 3 presentan las estructuras lineales de datos, tales como listas, pilas y colas. Los capítulos 4 y 5 estudian las estructuras recursivas de datos como los árboles binarios y los árboles n-arios. El capítulo 6 hace un estudio de estructuras de datos no lineales, como grafos dirigidos. Por último, el capítulo 7 trata el tema de

Contenido del curso Tema 1. Sistemas de Producción Lechera en México Tema 2. Características de la raza Holstein Tema 3. Crianza de reemplazos Tema 4. Manejo reproductivo del ganado lechero Tema 5. Alimentación del ganado lechero Tema 6. Manejo sanitario del ganado lechero Tema 7. Producción de leche Tema 8. Construcciones y equipo

que los datos son agregados y eliminados únicamente por un extremo de la estructura. Son estructuras tipo LIFO: Last In, First Out. - “Ultimo en entrar, primero en salir” Consta de un tope y no permite el uso de índices como un arreglo, aunque las pilas pueden ser implementadas a partir de ellos y de estructuras tipo lista.

sismologÍa e ingenierÍa sÍsmica tema 6: modelos sobre el comportamiento de fallas activas. tema 7: paleosismicidad. tema 8: movimiento sÍsmicos del suelo: dominio temporal y frecuencial. tema 9: peligrosidad sÍsmica y efectos locales. tema 10: vulnerabilidad y riesgo sÍsmico. tema 11: sismometrÍa

circuitos integrados lineales, robert couglin introduccion a los a.o.con circuitos lineales, lucas m. faulkenberry sistemas electronicos, sahuquillo amplificadores operacionales y circuitos integrados lineales, j.m.fiore. diseÑo con amplificadores operacionales y circuitos integrados analogicos, sergio franco

300 d. de C.) casi no le prestaron atención a las ecuaciones lineales, quizás por considerarlas demasiado elementales, y trabajaron más los sistemas de ecuaciones lineales y las ecuaciones de segundo grado. Los matemáticos griegos no tuvieron problemas con las ecuaciones lineales y, exceptuando a Diophante (250 d.

10.1 Sistemas de ecuaciones lineales con dos incógnitas 630 10.2 Sistemas de ecuaciones lineales con varias incógnitas 640 10.3 Matrices y sistemas de ecuaciones lineales 649 10.4 El álgebra de matrices 661 10.5 Inversas de matrices y ecuaciones matriciales 672 10.6 Determinantes y Regla de Cramer 682 10.7 Fracciones parciales 693

Thomas Talarico, Nicole Inan . Pennsylvania Policy Forum, from Solicitor, Richard Perhacs, in which he stated "Empower Erie" and the "Western Pennsylvania Policy Forum" are private entities separate and distinct from the County of Erie." Mr. Davis's question to Council regarding this is that, if Empower Erie is separate from the County, why did Tim McNair current Chair of Empower Erie send a .