Tema 3: Listas Enlazadas
|
|
- Gregorio Acosta Soto
- hace 6 años
- Vistas:
Transcripción
1 Apuntes elaborados por: Eduardo Quevedo/ Raquel López García Revisado por: Javier Miranda el???? Tema 3: Listas Enlazadas En este tema se va a trabajar con memoria de tipo dinámico, organizada por nodos y por punteros. Igual que hicimos en el tema del array, comenzaremos considerando que el contenido de la lista no es necesario mantenerlo ordenado (Lista no ordenada).antes de comenzar con algunos procedimientos que podemos realizar con listas, veremos las declaraciones necerias para la interfaz y el cuerpo de nuestra lista Interfaz de la lista enlazada package Lista_Dinamica is Llena : exception; No_Encontrado : exception; type T_Lista is limited private; procedure Insertar ( Lista : in out T_Lista, Valor : in Integer); -- Excepciones : Llena -- Resto de procedimientos y funciones.... private... end Lista_Dinamica; Como puede verse, ahora ya no se especifica ningún tamaño, pues la lista puede llegar a ocupar toda la memoria RAM del ordenador. La especificación limited private se utiliza para impedir que una variable de tipo T_Lista se pueda copiar en otra variable de tipo T_Lista. Es decir, sirve para que cada variable de tipo T_Lista se corresponda con un único contenido. Si no se prohibe la copia el programador puede hacer disparates como el siguiente: Lista_1 :T_Lista; Lista_2 :T_Lista; Begin Lista_2 = Lista_1 1
2 Veamos ahora en detalle cómo se declaran los nodos en la parte privada de la interfaz: private type T_Nodo; -- La declaracion de este tipo se utiliza para romper la referencia mutua que se -- genera despues entre T_Nodo y T_Nodo_Ptr, indica que en el programa va - -- a aparecer un T_Nodo type T_Nodo_Ptr is access T_Nodo; type T_Nodo is record Valor : Integer; Siguiente : T_Nodo_Ptr := null; end record; -- El null dice que ese puntero esta inicializado para no apuntar a nada type T_Lista is record Primero : T_Nodo.Ptr := null; end record; Cuerpo de la lista enlazada with Unchecked_Deallocation; package body Lista_Dinamica is procedure Free is new Unchecked_Deallocation (T_Nodo, T_Nodo_Ptr); -- Cuerpo de todos los subprogramas end Lista; El procedimiento Free es un genérico, en el cual no se observan los parámetros y en donde T_Nodo y T_Nodo_Ptr se utilizan para construir el genérico. La finalidad del procedimento Free (como su propio nombre indica) es liberar un nodo. Inserción en lista enlazada Si la lista no está ordenada la forma más rápida de insertar un elemento es insertarlo siempre por el principio de la lista. Para realizar la inserción hay que crear un nuevo nodo y arreglar 2 punteros (el puntero a este nuevo primer elemento, y en este nuevo nodo hay que guardar copia de la dirección del nodo que estaba antes como primer nodo, y que ahora pasa a ser el segundo). Si los datos deben estar ordenados (Lista Ordenada) entonces la rutina de inserción 2
3 deberá buscar (mediante un bucle) la posición de la inserción.pasaremos a ver algunas formas de implementar este procedimiento, empezaremos con un programa mas largo q iremos optimizando: procedure Insertar (Lista : in out T_Lista Valor : in Integer) is Nuevo : T_Nodo_Ptr; Nuevo : new T_Nodo; -- Se crea un nuevo nodo Nuevo.Valor := Valor; -- Se llena el nodo que se acaba de crear Nuevo.Siguiente := Lista.Primero; -- El primero de la lista se copia en el siguiente del nuevo -- Con ello se apunta a donde apunta nuevo Lista.Primero := Nuevo exception when Storage_Error => -- Nos avisa de quen estamos llenando la memoria del ordenador, con -- la finalidad de que borremos algo raise Llena; end Insertar; Se llega a una simplificación del procedimiento de Insertar si los valores de Nuevo se inicializan al declarar la variable: procedure Insertar (Lista : in out T_Lista Valor : in Integer) is Nuevo : T_Nodo_Ptr := new T_Nodo (Valor => Valor, Siguiente => Lista.Primero); Lista.Primero := Nuevo exception when Storage_Error => raise Llena; end Insertar; Ahora veremos un procedimiento que insertará los elementos de uan lista de forma ordenada para ello supondremos que Clave es un string y que Long_Clave es la longitud de dicho string: procedure Insertar_Ordenadamente (Lista : in out T_Lista; Objeto : in T_Informacion) is -- Creación de un nuevo nodo Nuevo : T_Nodo_Ptr := new T_Nodo'(Libro => Libro, Siguiente => null); -- Creación de las variabes puntero, seguro, estas serán punteros que nos -- ayudaran a realizar un avance seguro al recorrer la lista Puntero : T_Nodo_Ptr := Lista.Primero; 3
4 Seguro : T_Nodo_Ptr := null; -- Caso de lista vacía if Lista.Primero = null then Lista.Primero := Nuevo; -- Caso de lista no vacía -- Avance seguro teniendo en cuenta que el siguiente sea /= null while Puntero.Siguiente /= null and Puntero.Objeto.Clave (1.. Puntero.Objeto.Long_Clave) < Objeto.Clave (1.. Objeto.Long_Clave) loop Seguro := Puntero; Puntero := Puntero.Siguiente; -- Observamos 3 casos: Va en el primer lugar, va al final, o va en medio -- 1) Está al principio if Puntero = Lista.Primero then Nuevo.Siguiente := Lista.Primero; Lista.Primero := Nuevo; -- 2) Está al final de la lista elsif Puntero = null then Puntero.Siguiente := Nuevo; 3) Está en el medio Nuevo.Siguiente := Puntero; Seguro.Siguiente := Nuevo; end Insertar_Ordenadamente; Búsqueda en lista enlazada Para buscar un elemento en una lista no ordenada hay que recorrer los nodos. Es importante recordar que los nodos están repartidos por toda la memoria del ordenador (a nosotros nos da igual donde estén), y hay que hay que tener en cuenta que los nodos no estan en posiciones de memoria consecutivas por lo que los atributos de Ada Pred y Succ no pueden ser utilizados en memoria dinámica. Como siempre, la función que realiza la búsqueda retornará un True en caso de que encuentre el elemento buscado. Borrado en lista enlazada Para borrar un nodo hay primero que buscarlo (mediante un bucle), pero hay que tener en cuenta que al borrarlo el puntero del nodo anterior hay que modificarlo para que apunte al que esté después del nodo que borramos. Para recordar la posición del nodo anterior sin tener que recorrer de nuevo todos los elementos de la lista se utiliza la técnica de avance seguro. En general cada 4
5 vez que se borra hay que arreglar dos punteros, excepto cuando borramos el primero o el último elemento, donde sólo hay que arreglar un puntero. procedure Borrar (Lista : in out T_Lista; Clave : in String; Long_Clave : in Natural) is -- Creación de dos punteros: el segundo es para el avance seguro Puntero : T_Nodo_Ptr := Lista.Primero; Seguro : T_Nodo_Ptr := null; -- Caso de lista vacía if Lista.Primero = null then raise No_Encontrado; -- Caso de lista no vacía -- Avance seguro teniendo en cuenta que el puntero sea /= null while Puntero /= null and then Puntero.Objeto.Clave (1.. Puntero.Objeto.Long_Clave) /= Clave (1.. Long_Clave) loop Seguro := Puntero; Puntero := Puntero.Siguiente; -- 3 casos: Está en el primer lugar, está al final, o está en medio -- 1) Está al principio if Puntero = Lista.Primero then Lista.Primero := Puntero.Siguiente; Free (Puntero); -- 2) Está al final elsif Puntero = null then raise No_Encontrado; -- 3) Está en medio Seguro.Siguiente := Puntero.Siguiente; Free (Puntero); end Borrar; Algunos ejercicios más de listas simplemente enlazadas: Ahora se veran algunos otros procedimientos útiles para trabajar con listas, al igual que en temas anteriores se empezará con una version algo mas larga para ir optimizandola poco a poco lo q ayudará a la comprensión de los algoritmos. 5
6 Función que calcule el número de elementos de una lista: La idea de este algoritmo es bastante sencilla, lo que tendremos q hacer para ver la longitud de una lista es simplemente recorrer la lista hasta el final e ir contando el número de saltos. El principal motivo por el que deberíamos implementar es que nos permite aprender y comprender el manejo de los nodos. Versión 1.0: function Longitud (Lista : in T_Lista) return Natural is Contador : Natural := 0; -- Inicializamos actual a null Actual : T_Nodo_Ptr := null; -- Comprobamos que la lista no está vacia if Lista.Primero = null then -- Retornamos cero ya que no hay elementos en la lista return 0; -- Avanzaremos en la lista utilizando el puntero actual Actual := Lista.Primero; -- Iremos recorriendo la lista hasta que nos encontremos while Actual /= null loop -- Aumentaremos el contador que nos proporcianará la longitud Contador := Contador + 1; Actual := Actual.Siguiente; -- retornamos la variable contador que será la longitud de la lista return Contador; end Longitud; Versión final: Vemos en la versión anterior que estamos comprobando dos veces si la lista está vacía, así que esta será la optimización que realicemos en esta versión final de nuestro algoritmo. function Longitud (Lista : in T_Lista) return Natural is Contador : Natural := 0; -- Inicializaremos ahora Actual a Lista.Primero para evitar comprobar dos -- veces que la lista esté vacía. Actual : T_Nodo_Ptr := Lista.Primero; while Actual /= null loop Contador := Contador + 1; 6
7 Actual := Actual.Siguiente; return Contador; end Longitud; Procedimiento de Copiar: Debido a que mediante el limited private se ha limitado la copia directa en listas sería bueno tener un procedimiento que realizase dicha copia, como normalmente cuando asignamos variables el destino lo ponemos a la izquierda y el origen a la derecha aquí también se tendrá en cuenta dicho orden, es decir el primer parámetro del procedimiento será el destino y el segundo el origen: procedure Copiar (Destino : in out T_Lista Origen : in T_Lista Is -- Irá recorriendo la lista Origen Actual : T_Nodo_Ptr := Origen.Primero; -- Irá recorriendo la lista Destino Nuevo : T_Nodo_Ptr := new T_Nodo'(Valor => Actual.Valor, Siguiente => null); -- Se mira si se dan las condiciones propicias para que se haga la copia. -- Primero comprobaremos que la lista Destino esté vacía. if Destino.Primero /= null then raise Parametro_Erroneo; -- Seguidamente comprobaremos que la Origen contenga algo elsif Origen.Primero = null then -- Saldríamos del procedimiento return; -- Comenzamos el duplicado de la lista Actual := Origen.Primero; Destino.Primero := Nuevo; -- Debemos tener cuidado con esta condición ya que so pusiéramos -- Actual.Siguente /= null no copiaríamos el ultimo elemento de la lista while Actual /= null loop -- Avanzamos en la lista Origen Actual := Actual.Siguiente; Nuevo.Siguiente :0= new T_Nodo; -- Avanzamos en la lista Destino Nuevo := Nuevo.Siguiente; -- Copiamos la lista Nuevo.Valor := Actual.Valor; end Copiar; 7
8 Procedimiento de intercambiar consecutivamente: El procedimiento de intercambiar consecutivamente serviría para intercambiar en el procedimiento de ordenación por burbuja, pues intercambia nodos consecutivos, para selección o inserción habría que hacer un procedimiento que intercambiase dos nodos cualesquiera. Con este procedimiento aprenderemos la importancia del orden de las asignaciones para no perder ningún nodo en el camino: procedure Intercambiar_Consecutivo (Lista : in out T_Lista; Puntero_1 : in T_Nodo_Ptr; Puntero_2 : in T_Nodo_Ptr) is Anterior : T_Nodo_Ptr := Lista.Primero; -- Se hacen las comprobaciones previas -- Ninguno de los punteros puede estar apuntando a null if Puntero_1 = null or Puntero_2 = null then raise Parametro_Nulo; -- Los nodos deben ser consecutivos elsif Puntero_1.Siguiente /= Puntero_2 then raise Parametro_Erroneo; -- Si el Puntero_1 es el primero elemento de la lista es un caso sencillo. -- realizamos las asiganciones elsif Lista.Primero = Puntero_1 then Lista.Primero := Puntero_2; Puntero_1.Siguiente := Puntero_2.Siguiente; Puntero_2.Siguiente := Puntero_1; -- Si no, nos encontramos ante un caso general -- Debemos comprobar que el puntero este en la lista while Anterior /= null and then Anterior.Siguiente /= Puntero_1 loop Anterior := Anterior.Siguiente; -- Debemos evitar salirnos de la lista if Anterior = null then raise No_Encontrado; -- Realizamos las asiganciones Anterior.Siguiente := Puntero_2; Puntero_1.Siguiente := Puntero_2.Siguiente; Puntero_2.Siguiente := Puntero_1; end Intercambiar_Consecutivo; Se observa que las líneas: Puntero_1.Siguiente := Puntero_2.Siguiente; Puntero_2.Siguiente := Puntero_1; Se pueden sacar factor común. 8
9 Lista doblemente enlazada: La lista doblemente enlazada tiene la capacidad de recorrer la lista tanto hacia delante como hacia atrás, por ello es una lista mucho más flexible, en la interfaz bastará con definir un nodo anterior inicializado como siempre a null; (no apunta a nada) y en el record de T_Lista aparte del primero, es recomendable tener un puntero al último nodo (para poder recorrerla hacia atrás y para insertar rápidamente un nodo al final de la lista). La parte privada de la interfaz de la lista doblemente enlazada es: private type T_Nodo; type T_Nodo_Ptr is access T_Nodo; type T_Nodo is record Valor : Integer; Siguiente : T_Nodo_Ptr := null; Anterior : T_Nodo_Ptr := null; end record; type T_Lista is record Primero : T_Nodo_Ptr := null; Ultimo : T_Nodo_Ptr := null; end record; end Lista_Dinamica; Algunos ejercicios de listas doblemente enlazadas: Procedimiento de Insertar en lista no ordenada procedure Insertar (Lista : in out T_Lista Valor : in Integer) is Nuevo : T_Nodo_Ptr := new T_Nodo (Valor if Lista.Primero = null then Lista.Primero := Nuevo; Lista.Ultimo := Nuevo; Nuevo.Siguiente Lista.Primero.Anterior := Nuevo; Lista.Primero := Nuevo; exception when Storage_Error => raise Llena; end Insertar; := Lista.Primero; => Valor, Siguiente => null, Anterior => null); 9
10 Procedimiento de intercambiar consecutivamente: Es el análogo para listas doblemente enlazadas del ya hecho para las simplemente enlazadas, teniendo que arreglar dos punteros. Los comentarios serás los mismos que para el de listas simplemente enlazadas: procedure Intercambiar_Consecutivo (Lista : in out T_Lista; Puntero_1 : in T_Nodo_Ptr; Puntero_2 : in T_Nodo_Ptr) is Anterior : T_Nodo_Ptr := Lista.Primero; -- Se hacen las comprobaciones previas if Puntero_1 = null or Puntero_2 = null then raise Parametro_Nulo; elsif Puntero_1.Siguiente /= Puntero_2 then raise Parametro_Erroneo; -- Se intercambia if Puntero_1.Anterior /= null then Puntero_1.Anterior.Siguiente := Puntero_2; Lista.Primero := Puntero_2; if Puntero_2.Siguiente /= null then Puntero_2.Siguiente.Anterior := Puntero_1; Lista.Ultimo := Puntero_1; P2.Anterior := P1.Anterior; P1.Siguiente := P2.Siguiente; P1.Anterior := P2; P2.Siguiente := P1; end Intercambiar_Consecutivo; 10
Tema 7: Árbol Binario
Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el???? Tema 7: Árbol Binario En el árbol binario se combina lo mejor del array (acceso rápido a elementos,
Más detallesProgramación. Tema 8: Tablas Hash. Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el????
Programación. Tema : Tablas Hash /Mayo/ Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el???? Tema : Tabla Hash Las tabla hash aparece para conseguir
Más detallesTema 5.- Recursividad
Apuntes elaborados por: Raquel López, Eduardo Quevedo y Aaron Asencio Revado por: Javier Miranda el???? Tema 5.- Recursividad NOTA Todos los ejemplos que se exponen en este tema se pueden realizar utilizando
Más detallesTema 4.- Pilas y Colas
Apuntes elaborados por: Eduardo Quevedo, Raquel López y Aaron Asencio Revisado por: Javier Miranda el???? Tema 4.- Pilas y Colas Las pilas y colas son estructuras de datos que se utilizan generalmente
Más detallesEJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente:
ASIGNATURA TITULACIÓN APELLIDOS ESTRUCTURA DE DATOS Y DE LA INFORMACIÓN EJERCICIO 1 (3 PUNTOS) GRUPO CURSO CONVOCATORIA NOMBRE 23 / 24 EXTRAORDINARIA- SEPTIEMBRE CALIFICACIÓN Dado el tipo abstracto de
Más detallesEduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa
Estructura de Datos y de la Información Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa Laboratorio de Investigación y Desarrollo en Inteligencia Artificial Departamento de Computación
Más detallesApuntes elaborados por: Eduardo Quevedo,Raquel López Revisado por: Javier Miranda el 25 de Mayo de 2004
Apuntes elaborados por: Eduardo Quevedo,Raquel López Revisado por: Javier Miranda el 25 de Mayo de 2004 Tema 1: Arrays En este primer tema nos familiarizaremos con la programación mediante objetos con
Más detallesEstructura de Datos y de la Información
Universidad Rey Juan Carlos Curso 2009/10 Ingeniería Técnica en Informática de Gestión Estructura de Datos y de la Información Examen Final Junio 2010 Fecha: 24-6-2010 Soluciones Ejercicio 1. (Puntuación
Más detallesARBOLES B. Lo que si es cierto es que la letra B no significa "binario", ya que:
ARBOLES B El problema original comienza con la necesidad de mantener índices en almacenamiento externo para acceso a bases de datos, es decir, con el grave problema de la lentitud de estos dispositivos
Más detallesApuntes elaborados por: Aaron Asencio, Eduardo Quevedo, Raquel López Revisado por: Javier Miranda el???
Apuntes elaborados por: Aaron Asencio, duardo Quevedo, Raquel López Revisado por: Javier Miranda el??? Tema 9: rafos Los grafos no son más que la versión general de un árbol, es decir, cualquier nodo de
Más detallesLISTAS ENLAZADAS FUNDAMENTOS TEORICOS
LISTAS ENLAZADAS FUNDAMENTOS TEORICOS Una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un «enlace»
Más detallesAnálisis amortizado El plan:
Análisis amortizado El plan: Conceptos básicos: Método agregado Método contable Método potencial Primer ejemplo: análisis de tablas hash dinámicas Montículos agregables (binomiales y de Fibonacci) Estructuras
Más detallesParte I: Elementos del lenguaje Ada
Parte I: Elementos del lenguaje Ada 1. Introducción a los computadores y su programación 2. Elementos básicos del lenguaje 3. Modularidad y programación orientada a objetos 4. Estructuras de datos dinámicas
Más detallesAlgorítmica y Complejidad. Tema 3 Ordenación.
Algorítmica y Complejidad Tema . Introducción.. Algoritmo de inserción.. Algoritmo de selección.. Algoritmo de la burbuja.. Algoritmo heapsort.. Algoritmo quicksort. 7. Algoritmo countingsort.. Algoritmo
Más detallesParte I: Programación en Ada
Parte I: Programación en Ada 1. Introducción a los computadores y su programación 2. Elementos básicos del lenguaje 3. Modularidad y programación orientada a objetos 4. Estructuras de datos dinámicas 5.
Más detallesUnidad Nº V Listas Enlazadas
Instituto Universitario Politécnico Santiago Mariño Unidad Nº V Listas Enlazadas Lista Enlazadas Es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta
Más detallesTema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz
Tema 8. Listas http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz}@icc.uji.es Estructuras de datos y de la información Universitat
Más detallesAPUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.
APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido
Más detallesB) Contestar Verdadero o Falso a las siguientes preguntas, justificando la respuesta:
ASIGNATURA CURSO CALIFICACIÓN ESTRUCTURA DE DATOS Y DE LA INFORMACIÓN 2005 / 2006 TITULACIÓN GRUPO CONVOCATORIA EXTRAORDINARIA - DIC B) Contestar Verdadero o Falso a las siguientes preguntas, justificando
Más detallesExamen de Lenguajes de Alto Nivel
Cuestiones (4 cuestiones, 4 puntos en total) Examen de Lenguajes de Alto Nivel Febrero 2005 1) Escribir el cuerpo del paquete cuya especificación se muestra debajo, de modo que el procedimiento Abre abra
Más detallesMemoria en C++ Punteros - Referencias Clases Y ahora, a trabajar! Memoria Dinámica en C++
Qué es una variable? Variables Memoria Matemática: una etiqueta que representa a un valor en una expresión: f (y) = y 2 + 2y Programación: Nombre simbólico dado a un valor residente en la memoria. Propiedades
Más detallesIntroducción al Lenguaje de Programación Ada
Instrumentación de Tiempo Real Introducción al Lenguaje de Programación Ada Mario Aldea Rivas Departamento de Electrónica y Computadores Universidad de Cantabria GRUPO DE COMPUTADORES Y TIEMPO REAL Mario
Más detallesImplementación de diccionarios sobre Trie en C++
Implementación de diccionarios sobre Trie en C++ Algoritmos y Estructuras de Datos II 2. do cuatrimestre de 2016 Introducción Vamos a implementar una interfaz de diccionario en C++ La representación interna
Más detallesLISTAS DOBLES y multiples
LISTAS DOBLES y multiples Temas Listas doblemente enlazadas Características y Operaciones Ejemplos Lista múltiples enlaces LISTAS DOBLEMENTE ENLAZADAS y MÚLTIPLE ENLACES Suponga el siguiente problema:
Más detallesEstructura de Datos. Listas Enlazadas
Estructura de Datos Listas Enlazadas Conceptos de Lista enlazada Una lista enlazada es una secuencia de nodos que se interconectan mediante sus campos de enlace. Nodo: un objeto creado desde una clase
Más detalles1.2.4 Listas enlazadas
1.2.4 Listas enlazadas Las listas enlazadas son tipos de datos dinámicos que se construyen con nodos. Un nodo es un registro con al menos, dos campos, uno de ellos contiene las componentes y se le denomina
Más detallesTipos Recursivos de Datos
1/1 Tipos Recursivos de Datos Josefina Sierra Santibáñez 27 de noviembre de 2016 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones),
Más detallesImplementación de las Clases Pila, Cola, Lista y Arbol
1/1 Implementación de las Clases Pila, Cola, Lista y Arbol Josefina Sierra Santibáñez 28 de noviembre de 2017 2/1 Implementación de Estructuras de Datos Implementaremos cada estructura de datos en dos
Más detallesFUNDAMENTOS DE OBJECT PASCAL
FUNDAMENTOS DE OBJECT PASCAL 1. ASPECTOS GENERALES DE LA SINTAXIS Los bloques de código quedan delimitados por y end. Se usa punto y coma como separador de sentencias de código. Comentarios: - ias líneas:
Más detallesUNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.
Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos.
Más detallesVHDL. Lenguaje de descripción hardware Estructura Básica de diseño
VHDL. Lenguaje de descripción hardware Estructura Básica de diseño 2007 A.G.O. All Rights Reserved Estructura de un diseño en VHDL LIBRARY declaraciones VHDL estructura básica ENTITY caja negra ARCHITECTURE
Más detallesEste material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y
Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y distribución. Listas Enlazadas Estructuras de datos dinámicas
Más detallesIntroducción: una simple colección
Introducción: una simple colección Implemente una clase denominada Lista. La clase deberá mantener una colección de números y proveer los siguientes i métodos: Listas dinámicas simplemente enlazadas Franco
Más detallesTEMA 0 Gestión de Memoria Dinámica
TEMA 0 Gestión de Memoria Dinámica ESTRUCTURAS DE DATOS 1 Objetivos Tema preliminar para entender el uso de la herramienta básica en la gestión de memoria dinámica: punteros Objetivos: Conocer el concepto
Más detallesParte II: Estructuras de datos y algoritmos
Parte II: Estructuras de datos y algoritmos Tema 11. Tipos abstractos de datos. Conceptos básicos. Listas. Pilas. Colas. Vectores. Conjuntos. Mapas. Árboles. Árboles binarios. GRUPO DE COMPUTADORES Y TIEMPO
Más detallesInstituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:
Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades: La prueba es individual y sin material. La duración es 3 horas.
Más detallesESTRUCTURAS DINÁMICAS DE DATOS (COLAS) EN C
2013 ESTRUCTURAS DINÁMICAS DE DATOS (COLAS) EN C Departamento de Computación UNAN-León TEMA 5: ESTRUCTURAS DINÁMICAS DE DATOS (COLAS) 5.1 INTRODUCCIÓN: Las colas son secuencias de elementos caracterizadas
Más detallesHistoria. Introducción al lenguaje Ada95. Historia (2) Características. Elementos del lenguaje. Características (2)
Introducción al lenguaje Ada95 Historia Concurso de ideas del Departamento de Defensa norteamericano (1979) Primer estándar: Ada 83 Utilizado en la industria militar, aeroespacial, sistemas empotrados,
Más detallesProgramación. Orienta a Objetos con C++
Programación Orienta a Objetos con C++ Objetivo El alumno comprenderá los conceptos sobre cuales se rige la programación orientada a objetos mediante una base teórica y un conjunto de prácticas, enfocando
Más detallesTema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés
Tema - Modelo y Aplicación de Pila, Cola y Lista con Punto de Interés Tema - Modelo y Aplicación de Pila, Cola y Lista con Punto de Interés Índice general:. Modelo y Aplicación de Lista con Punto de Interés
Más detallesHoja de ejercicios del Tema 9
Facultad de Informática Universidad Complutense Fundamentos de la programación Curso 2013 2014 Hoja de ejercicios del Tema 9 1. Sin ejecutarlo, qué mostraría el siguiente código? int x = 5, y = 12, z;
Más detallesUNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS
UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS Curso 2008-09 Examen parcial APELLIDOS: NOMBRE: 1. (0.5 puntos) Enumera las características de un algoritmo
Más detallesClase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño
Clase adicional 9 Temas Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño Listas enlazadas Previamente en este curso, ya habrá trabajado con dos de las estructuras de datos
Más detallesPráctica 2. TAD pila
Objetivos. Práctica. TAD pila Se trata de construir el TAD PILA con dos implementaciones (una acotada y otra no acotada sin cabecera) que compartirán el mismo módulo de definición. Haciendo importación
Más detallesUNADM. Estructura de datos. Guillermo Duran Garcia AL Actividad 2. Identificación de errores en métodos de ordenación
UNADM Estructura de datos Actividad 2. Identificación de errores en métodos de ordenación Guillermo Duran Garcia AL12524075 Actividad 2. Identificación de errores en métodos de ordenación. La siguiente
Más detallesUniversidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero
Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 4: Ordenación Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Elección de un método Métodos directos
Más detallesListas, Pilas y Colas
Ejercicios de Abstracción 1) Realizar un procedimiento que cuente la cantidad de elementos de una cola. Lo mismo para una pila y una lista. Las estructuras deben quedar en el estado original. 2) Realizar
Más detalles4. Pilas ESTRUCTURAS DE DATOS 1
4. Pilas Una Pila es una colección de elementos homogéneos dispuestos en orden tal que se recuperan en orden inverso a como se introdujeron. La extracción e inserción de elementos en la Pila se realiza
Más detallesUNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.
Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos.
Más detalles6. El TDA Lista Implementación con listas enlazadas. es de tipo genérico T. Pueden existir elementos repetidos (a diferencia de los conjuntos).
6. El TDA Lista 6.1. Definición 6.2. Operaciones del TDA 6.3. Implementación con vectores 6.4. Implementación con listas enlazadas 6.5. Comparativa Bibliografía: -Weiss - Aho, Hopcroft y Ullman 6.1. Definición
Más detallesEstructuras Enlazadas AyED UTN-BA
Funciones para estructuras enlazadas Sin Plantilla El Nodo Con plantilla para un dato genérico en info El Nodo struct Nodo1 int info; Nodo* sig; ; Nodo1* p1 = new Nodo1(); struct Nodo2 string info; Nodo*
Más detallesAlgoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez
Algoritmos y Estructuras de Datos Iteradores Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2015-2016 Guillermo Román, UPM AED: Introducción 1/26 Iteradores Es muy común
Más detallesFundamentos de Programación
Fundamentos de Programación COMENTARIOS Microsoft Visual Basic interpreta que todo lo que está a la derecha del carácter ( ) en una línea cualquiera de programa es un comentario y no ejecuta acción alguna.
Más detallesTAD. TAD Conjunto Análisis del TAD Conjunto Posibles implemantaciones A.E.D.
TAD TAD Conjunto Análisis del TAD Conjunto Posibles implemantaciones A.E.D. 1 TAD Conjunto Definición Conjunto: Colección no ordenada de elementos (o miembros) distintos. Elemento: Cualquier cosa, puede
Más detalles324 MR Versión 1 1 Prueba Integral 1/6 Lapso UNIVERSIDAD NACIONAL ABIERTA Semana 12 VICERRECTORADO ACADÉMICO ÁREA INGENIERÍA
324 MR Versión 1 1 Prueba Integral 1/6 UNIVERSIDAD NACIONAL ABIERTA Semana 12 VICERRECTORADO ACADÉMICO ÁREA INGENIERÍA MODELO DE RESPUESTA ASIGNATURA: Computación II CÓDIGO: 324 MOMENTO: Primera Integral
Más detalles1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura:
1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura: PROGRAM Nombre_del_programa; ZONA de DECLARACIONES ZONA de INSTRUCCIONES
Más detallesDepartamento de Informática Universidad de Valladolid Campus de Segovia TEMA 3: ESTRUCTURAS DINÁMICAS LINEALES. LISTAS ENLAZADAS, PILAS Y COLAS
Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 3: ESTRUCTURAS DINÁMICAS LINEALES. LISTAS ENLAZADAS, PILAS Y COLAS ÍNDICE Listas enlazadas Pilas Colas DEFINICIÓN DEL TIPO LISTA
Más detallesEstructuras de Datos Dinámicas Contenido del Tema
T E M A 2 Estructuras de Datos Dinámicas Contenido del Tema 2.1. Introducción a las estructuras de datos dinámicas. 2.2. Tipo Puntero 2.3. Aplicación: Listas enlazadas. Introducción a las Estructuras de
Más detalles6. Listas Generalizadas
6. Listas Generalizadas Una lista enlazada es una estructura de datos en la cual los objetos están organizados linealmente. Listas enlazadas proveen una forma simple de estructuar conjuntos dinámicos de
Más detallesPUNTEROS O APUNTADORES C++
PUNTEROS O APUNTADORES C++ TRANSVERSAL DE PROGRAMACIÓN BÁSICA INGENIERÍA DE SISTEMAS En el presente documente se hace una breve explicación a la gestión dinámica de memoria en el lenguaje C++. Se incluyen
Más detallesFUNDAMENTOS DE INFORMÁTICA
FUNDAMENTOS DE INFORMÁTICA Tema 1 Introducción a la Programación en Visual Basic Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo undamentos de Informática. Departamento de Ingeniería
Más detallesIntroducción a PL/SQL
Introducción a PL/SQL Grupo de Ingeniería del Software y Bases de Datos Departamento de Lenguajes y Sistemas Informáticos Universidad de Sevilla noviembre 2011 Objetivos de este tema Conocer PL/SQL. PL/SQL
Más detallesTablas de Dispersión (Hashing Tables)
Tablas de Dispersión (Hashing Tables) Las tablas de dispersión o hashing tables (en inglés) es una técnica que se utiliza para implementar inserciones, eliminaciones y búsquedas en un tiempo medio constante.
Más detallesTEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica
TEMA 3. Árboles Objetivos En este tema se estudia una de las estructuras de datos no lineal más importante en computación, el árbol. Comenzaremos introduciendo la terminología asociada a los árboles y
Más detallesClases y Objetos en C++
Informática II Clases y Objetos en C++ Introducción Las variables de los tipos fundamentales de datos no son suficientes para modelar adecuadamente objetos del mundo real. alto, ancho y longitud para representar
Más detallesTema 6. Gestión dinámica de memoria
Tema 6. Gestión dinámica de memoria http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz@icc.uji.es Estructuras de datos y de la
Más detallesMemoria Dinámica en C++
Memoria Dinámica en C++ Algoritmos y Estructuras de Datos II DC-FCEyN-UBA 26 de Agosto de 2015 AED2 (DC-FCEyN-UBA) Memoria Dinámica en C++ 26 de Agosto de 2015 1 / 46 Repaso: Qué es una variable? Matemática:
Más detalles//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui
PL/SQL - Oracle PL/SQL (Procedural Language/SQL) es una extensión de SQL, que agrega ciertas construcciones propias de lenguajes procedimentales, obteniendose como resultado un lenguaje estructural mas
Más detallesListas. Programación en C LISTAS. Prof. Álvaro Sánchez Miralles. Programación en C. Listas. Objetivos
LISTAS UPCO ICAI Departamento de Electrónica y Automática 1 Objetivos Aprender a manejar una lista Manejar a través de listas, vectores de datos cuyo tamaño cambia a lo largo del programa y no se conoce
Más detallesClases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.
Algoritmos Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEN - UBA Programación imperativa - clase 10 Memoria dinámica listas enlazadas Clases e instancias El paquete
Más detallesIMPLEMENTACIÓN DE PILAS CON LISTAS EN C++
IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++ Fichero nodo.h #ifndef NODO_H #define NODO_H const int cantidad_nodos = 10; class Nodo private: string dato; Nodo* siguiente; public: Nodo(); void setdato(string
Más detallesProgramación de sistemas Listas enlazadas
Programación de sistemas Listas enlazadas Departamento de Ingeniería Telemática 1 Contenidos *** Introducción a los genéricos Estructuras de datos Listas enlazadas La clase Node La clase LinkedList Ventajas
Más detallesUnidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.
Implementación Orientada a Objetos. Unidad V 5.1 Estructura de una clase. Una clase consiste en: algunas_palabras class nombre_de_la_clase [algo_más] { [lista_de_atributos] [lista_de_métodos] Lo que está
Más detallesEstructura de datos y algoritmos. Tema IV: TIPOS DE DATOS ABSTRACTOS DINÁMICOS LINEALES
Estructura de datos y algoritmos Tema IV: TIPOS DE DATOS ABSTRACTOS DINÁMICOS LINEALES TIPOS DE DATOS ABSTRACTOS DINÁMICOS LINEALES 4.1 Introducción 4.2 Ejemplos de TDA dinámicos lineales 4.3 Pilas 4.3.1
Más detallesComunicación y sincronización
Comunicación y sincronización Son conceptos relacionados con la interacción entre los procesos La comunicación se refiere al paso de información de un proceso a otro La sincronización corresponde al cumplimiento
Más detallesRealizar el ejercicio anterior utilizando Punteros
PUNTEROS Y ARRAYS En C existe una relación entre punteros y arrays tal que cualquier operación que se pueda realizar mediante la indexación de un arrays, se puede realizar también con punteros. Para clarificar
Más detallesIntroducción al lenguaje de programación Ada
Introducción al lenguaje de programación Ada Programación de Sistemas de Telecomunicación Informática II Departamento de Teoría de la Señal y Comunicación y Sistemas Telemáticos y Computación (GSyC) Universidad
Más detallesBibliografía (Java) Java: Introducción a Java
1 2 De a Contenido Introducción a Variables, tipos de datos y operadores Sentencias de control Subprogramas Tablas y matrices Excepciones Paquetes 3 4 Bibliografía () : Introducción a L. Lemay, C. Perkins.
Más detallesCapítulo 5. LISTAS. 5.1 Listas y listas vinculadas. Una lista es una colección lineal de elementos.
53 Capítulo 5. LISTAS. 5.1 Listas y listas vinculadas. Una lista es una colección lineal de elementos. Las listas pueden ser almacenadas en arreglos ( de qué manera?), pero las listas enlazadas proporcionan
Más detallesTema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas
Tema 9 Algoritmos sobre listas Programación 2015-2016 Programación - Tema 9: Algoritmos sobre listas 1 Tema 9. Algoritmos sobre listas Algoritmos sobre Arrays. Búsqueda. Inserción. Ordenación. Programación
Más detallesCarlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas
2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos
Más detallesArboles. Definiciones formales: 1) un árbol es un grafo acíclico finito T (P, E) tal que. P = E + 1 => todo arco es desconectante.
Arboles Definición: Es una estructura acíclica que, en algún sentido puede ser considerado el siguiente paso en la jerarquía de complejidad estructural. Los árboles tienen son de amplia aplicación en el
Más detallesExamen Teórico Convocatoria de Junio de 2012
Examen Teórico Convocatoria de Junio de 2012 Nombre: DNI: Titulación: 1. Sobre el control de errores en Java: a) El siguiente método contiene un error de compilación debido al uso de excepciones. Explica
Más detallesUniversidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero
Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 1: Recursividad Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Ejemplos recursivos Recursividad
Más detallesINTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11
Índice INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11 1.1 PROGRAMA Y LENGUAJESDE PROGRAMACIÓN...12 1.1.1 EL LENGUAJE JAVA...13 1.1.2 EL JDK...15 1.1.3 LOS PROGRAMAS EN JAVA...16
Más detallesUNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM
UNIDAD IV Programación Funcional Porqué? 2 Introducción Porque aprender programación funcional? - Recursión - Abstracción funcional - Funciones de primer orden Estos conceptos se han incorporado en la
Más detallesGrado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de
Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 84M, 2014/2015 12 de Marzo de 2015 Nombre y Apellidos:... PROBLEMA 1 (1 punto) Programación Orientada a Objetos. Una empresa de alquiler
Más detallesPRÁCTICA: LENGUAJE VHDL
PRÁCTICA: LENGUAJE Introducción Los lenguajes permiten manejar mejor grandes tamaños Los lenguajes son más flexibles que las tablas Los lenguajes son légibles por las máquinas más fácilmente que los gráficos
Más detallesPUBLICACIÓN DEL ENUNCIADO: Semana del 10 de noviembre de ENTREGA: Clase de laboratorio de la semana del 8 de diciembre de 2003.
TELECOMUNICACIÓN Página 12 PRÁCTICAS 6ª, 7ª y 8ª: Operaciones con polinomios. OBJETIVOS: Repaso de listas dinámicas. Objetos como datos miembro de otros objetos (introducción a la herencia). Objetos con
Más detallesLA PALABRA CLAVE THIS EN JAVA. CONTENIDO NULL POR DEFECTO DE UN OBJETO. SOBRECARGA DE NOMBRES. EJEMPLOS (CU00654B)
APRENDERAPROGRAMAR.COM LA PALABRA CLAVE THIS EN JAVA. CONTENIDO NULL POR DEFECTO DE UN OBJETO. SOBRECARGA DE NOMBRES. EJEMPLOS (CU00654B) Sección: Cursos Categoría: Curso Aprender programación Java desde
Más detallesBiblioteca de templates. template <typename T> void eliminar(t arr[], int& len, int pos);
ALGORITMOS Y ESTRUCTURA DE DATOS Machete Oficial 2014 Operaciones sobre arrays Biblioteca de templates Función: agregar Agrega el valor v al final del array arr e incrementa su longitud len. void agregar(t
Más detallesESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:
Nombre y apellidos: Nota: 1. Ejercicio (3 puntos) a) Qué estructura de datos utilizarías para transformar la siguiente expresión a su equivalente expresión postfija? Argumenta tu decisión. Ej. entrada:
Más detallesEstructuras Dinámicas de datos.
Estructuras Dinámicas de datos. Las estructuras dinámicas de datos son estructuras que crecen a medida que ejecuta un programa. Una estructura dinámica de datos es una colección de elementos llamadas nodos
Más detallesÁrboles n-arios de búsqueda. Lección 16
Árboles n-arios de búsqueda Lección 16 Definiciones Los árboles n-arios de búsqueda (árboles de búsqueda múltiples o multicamino) son árboles de grado n definidos de la forma: si el árbol A es vacío, entonces
Más detallesOracle PL/SQL. Programa de Estudio.
Oracle PL/SQL Programa de Estudio Oracle PL/SQL El alumno egresara del mismo con los conocimientos y destrezas necesarias para desempeñarse como desarrollador Oracle PL/SQL además de contar con los conocimientos
Más detallesTema 6: Estructuras de datos recursivas
Tema 6: Estructuras de datos recursivas Índice 1 Listas jerárquicas...2 2 Árboles binarios... 4 3 Árboles genéricos...7 4 Referencias...10 1. Listas jerárquicas Las listas tienen la propiedad de la clausura
Más detallesEJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)
APRENDERAPROGRAMAR.COM EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C) Sección: Cursos Categoría: Lenguaje de programación Java nivel
Más detallesESTRATEGIAS PARA LA RESOLUCIÓN DE PROBLEMAS CON MATRICES N-DIMENSIONALES
ENUNCIADO ESTRATEGIAS PARA LA RESOLUCIÓN DE PROBLEMAS CON MATRICES N-DIMENSIONALES El Instituto del Servicio Meteorológico Nacional le ha proporcionado la siguiente matriz tridimensional que posee registros
Más detallesAgradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1
Prologo Agradecimientos Nota de los autores Índice general I III V VII 1 Problemas, algoritmos y programas 1 1.1 Programas y la actividad de la programación.................... 4 1.2 Lenguajes y modelos
Más detallesEDA. Tema 8 Colas de Prioridad: Heaps
EDA. Tema 8 Colas de Prioridad: Heaps Natividad Prieto Sáez. DSIC EDA, T-8. Curso 02/03. N.Prieto p.1/55 Objetivos Estudio de las definiciones asociadas a las Colas de Prioridad: Especificación: operaciones
Más detalles