TEMA 3. Listas. CONSIDERACIONES GENERALES.

Tamaño: px
Comenzar la demostración a partir de la página:

Download "TEMA 3. Listas. CONSIDERACIONES GENERALES."

Transcripción

1 TEMA 3. Listas. CONSIDERACIONES GENERALES. A la hora de abordar la resolución de un ejercicio sobre listas se recomienda tener en cuenta las siguientes consideraciones generales: Identificar si se trata de un caso de solo consulta, es decir, el algoritmo a desarrollar no implica modificar la información inicialmente contenida en la lista o modificación (inserción, borrado). Tener en cuenta si el tratamiento permite finalización anticipada. Es decir, si es necesario recorrer toda la estructura (la finalización se produce cuando lista == null) o acaba anticipadamente con el cumplimiento de una condición (por ejemplo encontrar el valor de una clave), en este caso no se deberán realizar nuevas llamadas recursivas o, en el caso de tratamiento iterativo, deberá salirse del bucle. En particular en el caso de listas ordenadas no se considerará correcto el acceder a una clave mediante exploración exhaustiva la lista, sin parar al llegar a la posición donde debería encontrarse el elemento. Plantearse la técnica (iterativa o recursiva) más adecuada a utilizar (salvo indicación expresa en el enunciado). La técnica recursiva se considera recomendable para los ejercicios de listas enlazadas básicas, pero no siempre es así en otro tipo de implementaciones, por lo que se tendrá que analizar cada situación concreta.

2 ListasMaximaDistancia. Enunciado. Dada la siguiente declaración de lista enlazada: public class NodoLista { int dato; NodoLista sig; public NodoLista (int x, NodoLista n) { clave=x; sig=n; public class Lista { NodoLista inicio; Lista () { inicio = null; SE PIDE: Desarrollar un algoritmo recursivo en Java tal que dada una lista perteneciente al tipo anterior y una clave entera, x, determine la máxima distancia existente entre dos elementos de la lista que contengan la clave x. OBSERVACIONES: No se permitirá la utilización de ninguna estructura de datos auxiliar. Solo se permitirá la realización de un único recorrido en la lista. Se supone que la clave x siempre va a existir en la lista. En caso de que solo se encontrase un único elemento que contiene la clave x, se deberá devolver como distancia máxima el valor cero. EJEMPLO: Dada la lista de la figura 1 y una clave x = 4, la máxima distancia entre dos elementos que contienen la clave 4, es D=3 D=2 D=1 Orientación. Se trata de desarrollar un método recursivo que devuelva un valor entero correspondiente a la máxima distancia, lo que será el resultado del método. El proceso tiene lugar durante la fase de ida y no existe posibilidad de terminación anticipada. Consiste en actualizar maximadistancia como consecuencia de cada par de apariciones sucesivas de n. Para ello se utiliza un argumento entero (distancia), con valor inicial 0. Dicho argumento toma el valor 1 cuando aparece el primer n y se incementa con cada clave sucesiva distinta de n. Cuando vuelva a aparecer otro valor n (siendo distancia!= 0) se procede a actualizar, en su caso, maximadistancia y se vuelve a inicializar n (a 0). No es necesario verificar la condición excepcional de recibir la lista vacía, dado que el enunciado dice explícitamente que Se supone que la clave x siempre va a existir en la lista.

3 Código. static int buscarmaximadistancia (NodoLista nodolista, int n, int distancia, int maximadistancia) { int resul; if (nodolista!= null) { if (distancia == 0) { if (nodolista.clave == n) distancia=1; else if (nodolista.clave!= n) distancia++; else { if (distancia > maximadistancia) maximadistancia=distancia; distancia=1; resul = buscarmaximadistancia(nodolista.sig,n,distancia,maximadistancia); else resul = maximadistancia; return resul; static int buscardistancia (Lista lista, int n) { return buscarmaximadistancia (lista.inicio, n, 0, 0);

4 ListasComprobarDatoUltimoNodo. Enunciado. Dada la siguiente declaración de lista enlazada: public class NodoLista { int dato; NodoLista sig; public NodoLista (int x, NodoLista n) { clave=x; sig=n; public class Lista { NodoLista inicio; Lista () { inicio = null; SE PIDE: Codificar un método en Java que, recibiendo como argumento una lista del tipo anterior, devuelva como resultado un valor de entre el siguiente subconjunto de números enteros: o 0, si el valor del último nodo coincide con el número de nodos de la lista. o -1, si el valor del último nodo es menor que el número de nodos de la lista. o +1, si el valor del último nodo es mayor que el número de nodos de la lista. OBSERVACIONES: Si la lista se recibe vacía el método devolverá el valor 0. No se permite utilizar ninguna estructura de datos auxiliar. Sólo se permite la realización de un único recorrido en la lista. Al final de la ejecución del método, la lista deberá permanecer con la estructura y el contenido iniciales. EJEMPLOS: El valor del último nodo de lista1 (5) coincide con número de nodos de la lista. El método devuelve 0. El valor del último nodo de lista2 (1) es menor que el número de nodos de la lista. El método devuelve -1. El valor del último nodo de lista3 (5) es mayor que el número de nodos de la lista. El método devuelve +1. lista null lista null lista null

5 Orientación. El ejercicio puede resolverse utilizando indistintamente las técnicas iterativa o recursiva dado que no es necesario hacer nada a la vuelta. La terminación esperada es casi pesimista habida cuenta de que el proceso termina cuando se recibe el último nodo (diferente de null). La condición de parada pesimista, en este caso, solo contempla la situación excepcional de recibir la lista inicialmente vacía, en cuyo caso el valor devuelto por el método será 0. El tratamiento (fase de ida) consiste, simplemente, en contar los nodos, para lo que hará falta un argumento entero (num). En la fase de transición (terminación anticipada) se obtiene el resultado que devolverá en la fase de vuelta. Código. static int comprobar (NodoLista nodolista, int num) { int resul; if (nodolista!= null) { num++; if (nodolista.sig!= null) resul = comprobar (nodolista.sig, num); else if (num == nodolista.clave) resul = 0; else if (nodolista.clave < num) resul = -1; else resul = 1; else resul = 0; return resul; static int comprobarultimonodo (Lista lista) { return comprobar (lista.inicio, 0);

6 ListasInsertarCeroDespuesDeSuma. Enunciado. Dada la siguiente declaración de lista enlazada: public class NodoLista { int dato; NodoLista sig; public NodoLista (int x, NodoLista n) { clave=x; sig=n; public class Lista { NodoLista inicio; Lista () { inicio = null; SE PIDE: Codificar un método en Java que, recibiendo como parámetro una lista perteneciente al tipo anterior, inserte en dicha lista un nuevo elemento con clave igual a cero, después de todo aquel elemento de la lista cuya clave coincida con la suma de todas las claves contenidas en la lista. Observaciones: No se permitirá la utilización de ninguna estructura de datos auxiliar. Sólo se permitirá la realización de un único recorrido en la lista. Se supone que la suma de todas las claves contenidas en la lista nunca va a ser cero. EJEMPLO: En la lista mostrada en la parte superior de la figura, como puede apreciarse, la suma de todas sus claves es (-6) = 2. Por tanto el método deberá devolver la mencionada lista en la situación mostrada en la parte inferior de la figura Orientación. El método, recursivo, realiza el resultado pedido en dos fases. A lo largo de la fase de ida, con condición de terminación nodolista!= null y sin posibilidad de terminación anticipada, se suman las claves de la lista y se recoge el resultado en un argumento entero (suma), que devolveremos como resultado del método al llegar al final de la lista. El tratamiento de vuelta consiste, simplemente, en verificar si el resultado del método tiene un valor igual al de la clave actual, en cuyo caso se inserta un 0.

7 Código. static int insertarcero (NodoLista lista, int suma) { int resul; if (lista!= null) { resul = insertarcero (lista.sig, suma+lista.clave); if (lista.clave == resul) lista.sig = new NodoLista (0, lista.sig); else resul = suma; return resul; static void insertarcerodespuesdesuma (Lista lista) { insertarcero (lista.inicio, 0);

8 ListasBorrarPosicionesParesOImpares. Enunciado. Dada la siguiente declaración de lista enlazada: public class NodoLista { int dato; NodoLista sig; public NodoLista (int x, NodoLista n) { clave=x; sig=n; public class Lista { NodoLista inicio; Lista () { inicio = null; Codificar un método en Java, que recibiendo una lista perteneciente al tipo anterior, borre de la misma todos aquellos elementos que ocupen posiciones pares (caso de que la lista tenga un número par de elementos), o que borre todos aquellos elementos que ocupen posiciones impares (caso de que la lista tenga un número impar de elementos). Observaciones: - No se permite la utilización de ninguna estructura de datos auxiliar. - Sólo se podrá realizar un único recorrido en la lista. Orientación. El algoritmo (recursivo) requiere llegar hasta el final de lista sin hacer nada y en la vuelta proceder alternativamente a eliminar o no el nodo actual. No es necesario realizar ninguna disquisición sobre la paridad del número de elementos de la lista. El último nodo siempre se elimina. Ejemplos: Número par de elementos (4): 10, 20, 30, 40. El resultado será: 10, 30 Número impar de elementos (5): 10, 20 30, 40, 50 El resultado será 20, 40 Lo que sí es necesario es disponer de una información booleana que actúe en la fase de vuelta como conmutador para conocer si hay que eliminar o no. Dado que en Java no es posible pasar argumentos por referencia se ha optado por diseñar el propio método de forma que, además de realizar la tarea solicitada (eliminar unos nodos sí y otros no), devuelva dicha información boolena. Se inicializa (a true) en la transición (lista.inicio = null). Se utilizan dos métodos: borrarposicionesparesoimpares recibe la lista, y llama al método recursivo (borrarparesoimpares) pasando como argumento lista.inicio (de tipo NodoLista). Dado que las referencias se pasan por valor, cuando sea necesario borrar un nodo lo borraremos desde el anterior (cuando el resultado de la anterior llamada recursiva haya sido false). En caso de que sea necesario borrar el primer nodo (cuando la lista tenga un número impar de elementos), lo haremos desde el método de llamada (haciendo lista.inicio = lista.inicio.sig).

9 Código. static boolean borrarparesoimpares (NodoLista nodo) { boolean resul; NodoLista aux; if (nodo!= null) { aux = nodo; nodo = nodo.sig; resul = borrarparesoimpares (nodo); if (!resul && (nodo!= null)) aux.sig = nodo.sig; resul =!resul; else resul = true; return resul; static void borrarposicionesparesoimpares (Lista lista){ boolean resul = borrarparesoimpares (lista.inicio); if (!resul) lista.inicio = lista.inicio.sig;

10 ListasBorrarPosicionesParesOImparesSuma. Enunciado. Dada la siguiente declaración de lista enlazada: public class NodoLista { int dato; NodoLista sig; public class Lista { NodoLista inicio; SE PIDE: Codificar un algoritmo recursivo en Java que, recibiendo como parámetro una lista perteneciente al tipo anterior, determine si la suma de las claves que se encuentran contenidas en los elementos que ocupan posiciones impares, es igual a la suma de las claves que se encuentran contenidas en los elementos que ocupan posiciones pares. En caso de que la suma de las claves que se encuentran contenidas en los elementos que ocupan posiciones impares, sea igual a la suma de las claves que se encuentran contenidas en los elementos que ocupan posiciones pares, el algoritmo deberá borrar de la lista todos los elementos que ocupan posiciones pares. En caso contrario, el algoritmo deberá borrar de la lista todos los elementos que ocupen posiciones impares. OBSERVACIONES: No se permitirá la utilización de ninguna estructura de datos auxiliar. Sólo se permitirá la realización de un único recorrido en la lista. Si la lista se encuentra vacía, se considerará que la suma de las claves contenidas en elementos que ocupan posiciones pares, es igual a la suma de las claves contenidas en elementos que ocupan posiciones impares. En este caso, al coincidir ambas sumas, teóricamente se debería proceder al borrado de aquellos elementos que ocupasen posiciones pares. Pero, como la lista se encuentra vacía, obviamente no se borrará ningún elemento. Si la lista contiene un único elemento, se considerará que la suma de las claves contenidas en elementos que ocupan posiciones pares es cero. Por su parte, la suma de las claves contenidas en elementos que ocupan posiciones impares, coincidirá con el valor de la única clave existente. No se dará por buena ninguna solución que no sea recursiva. EJEMPLOS: o En la figura a) la suma de las claves que se encuentran contenidas en los elementos que ocupan posiciones impares es 10 ( ), y la suma de las claves que se encuentran contenidas en los elementos que ocupan posiciones pares es también 10 (4+6). Por tanto, al coincidir ambas sumas, se deberán borrar los elementos que ocupan posiciones pares, es decir, el 4 y el Figura a) 6 2 o Análogamente, en la figura b), la suma de las claves que se encuentran contenidas en los elementos que ocupan posiciones impares es 10 (4 + 6), y la suma de las claves que se encuentran contenidas en los elementos que ocupan posiciones pares es también 10 (7 + 3). Por tanto, al coincidir ambas sumas, se deberán borrar los elementos que ocupan posiciones pares, esto es el 7 y el Figura b) 3 o Por el contrario, en la lista mostrada en la figura 1c), la suma de las claves que se encuentran contenidas en los elementos que ocupan posiciones impares es 15 ( ), mientras que la suma de las claves que se encuentran contenidas en los elementos que ocupan posiciones pares es 10 (4 + 6). Por tanto, al no concidir ambas sumas, se deberán borrar los elementos que ocupan posiciones impares, es decir, el 5, el 3 y el 7. Figura c)

11 Orientación. La lógica del método es la siguiente: o En la fase de ida se contabiliza la suma neta de los elementos de la lista (se suman los que ocupan posición par y se resta los que ocupan posición impar). o En la fase de vuelta se aplican los criterios expresados en el enunciado. Es decir: o Si la suma es 0 (suma de elementos en posiciones pares igual a suma de elementos en posiciones impares) se eliminan los elementos que ocupan posiciones pares. o En caso contrario (suma!= 0) se eliminan los elementos que ocupan posiciones impares. Se requieren los siguientes argumentos: o par, de tipo booleano, con valor inicial false. Conmuta en cada llamada durante la fase de ida. Se consulta su valor durante la fase de vuelta. o suma, de tipo entero e inicializado a 0, con la finalidad expresada anteriormente. La condición de finalización en el tratamiento recursivo es la completa exploración de la lista (lista == null) sin posibilidad de terminación anticipada. El método recursivo será booleano, devolviendo true si la suma es 0 (y por tanto hay que borrar los elementos pares), y false en caso contrario (cuando habrá que borrar los elementos impares). Dado que las referencias se pasan por valor, cuando sea necesario borrar un nodo lo borraremos desde el anterior (cuando el resultado haya sido false y estemos en una posición par, o bien el resultado sea true y estemos en una posición impar). En caso de que sea necesario borrar el primer nodo (cuando la lista tenga un número impar de elementos y el resultado del método recursivo haya sido false), lo haremos desde el método de llamada (haciendo lista.inicio = lista.inicio.sig). Código. static boolean borrarparesoimpares (NodoLista nodo, int suma, boolean par) { boolean resul; NodoLista aux; if (nodo!= null) { aux = nodo; nodo = nodo.sig; if (par) resul = borrarparesoimpares (nodo, aux.clave + suma,!par); else resul = borrarparesoimpares (nodo, suma - aux.clave,!par) ; if (!resul && par && (nodo!= null)) aux.sig = nodo.sig; else if (resul &&!par && (nodo!= null)) aux.sig = nodo.sig; else resul = (suma == 0); return resul; public static void borrarposicionesparesoimpares (Lista lista){ boolean resul = borrarparesoimpares (lista.inicio, 0, false); if (!resul) lista.inicio = lista.inicio.sig;

12 ListasInvertirContenido. Enunciado. Dada la siguiente declaración de lista enlazada: public class NodoLista { int dato; NodoLista sig; public class Lista { NodoLista inicio; SE PIDE: Codificar un método en Java que, recibiendo como parámetro una lista perteneciente al tipo anterior, invierta su contenido. OBSERVACIONES: Solamente se permite la realización de un único recorrido de la lista No se permite la creación de nuevos nodos de la clase NodoLista. En caso de que la lista esté vacía o posea un solo elemento, la ejecución del método no deberá surtir ningún efecto Además de la lista, la cabecera del método podrá contener otros parámetros EJEMPLO: Dada la lista mostrada en la parte superior de la figura, el método deberá devolver dicha lista en la situación mostrada en la parte inferior. lista lista Orientación. El ejercicio básicamente, supone desarrollar un método recursivo sin terminación anticipada (seguiremos hasta que la lista esté vacía) que, durante la fase de ida, recorra la lista almacenado localmente la dirección del nodo desde el que se realiza la llamada (anterior). Dicha referencia (anterior) se utilizará, en la fase de vuelta, para sustituir los sucesivos campos lista.sig consiguiendo así que cado nodo pase a apuntar al anterior. El primer elemento, que como consecuencia de la ejecución del proceso pasará a ser el último, deberá tratarse de forma excepcional: Su campo sig deberá tomar el valor null. El valor inicial (y final ) de lista deberá ser el correspondiente al nodo que ocupa inicialmente la última posición. Para ello se requiere que el método recursivo devuelva al módulo principal la referencia del último nodo (el valor de anterior en la fase de transición): será el resultado del método recursivo.

13 Código. static NodoLista invertir (NodoLista lista, NodoLista anterior) { NodoLista resul; if (lista!= null) { resul = invertir (lista.sig, lista); lista.sig=anterior; else resul = anterior; return resul; static void invertirlista (Lista lista) { NodoLista ultimo; if (lista!= null) { ultimo = invertir (lista.inicio.sig, lista.inicio); lista.inicio.sig = null; lista.inicio = ultimo;

14 ListasEstaContenida. Enunciado. Se dispone de dos listas calificadas ordenadas con la siguiente declaración: class NodoLista { int clave; NodoLista sig; SE PIDE: Codificar un método booleano en Java que, recibiendo dos listas como parámetro, compruebe si cada uno de los elementos de la segunda lista está contenido en la primera. OBSERVACIONES: No se permitirá la utilización de estructuras de datos auxiliares. No se permitirá la realización de más de un recorrido en ninguna de las dos listas. Se prestará especial atención al número de elementos visitados en la solución. Lista n Lista Lista Como se puede apreciar en el ejemplo, todos los elementos de la Lista2 están en la Lista1, mientras que no todos los elementos de la Lista3 están contenidos en la Lista1 (por ejemplo el 6). Orientación. La condición de finalización más restrictiva es haber procesado con éxito lista2. En tal caso el resultado será true. Se producirá finalización anticipada (no se realizarán más llamadas recursivas) proporcionando un resultado false cuando: o Finalice lista1. En tal caso aún quedan pendientes elementos de lista2 y, en consecuencia, no pueden estar todos sus elementos incluidos en lista1. o Se encuentre un elemento de lista2 no existente en lista1. Ya no es necesario seguir procesando pues no se cumplirá la condición de que todos los elementos de lista2 estén en lista1. El resto de situaciones que pueden producirse serán: o Se enfrentan dos claves iguales. Se realizará una llamada recursiva a partir de los siguientes elementos de ambas listas. o Se enfrenta una clave de lista1 inferior a la de lista2. Se realiza una llamada recursiva desde la siguiente posición de lista1 sin modificar la de lista2.

15 Código. static boolean estacontenida (NodoLista nodolista1, NodoLista nodolista2) { boolean resul; if (nodolista2!= null) if (nodolista1 == null) resul = false; else if (nodolista1.clave > nodolista2.clave) resul = false; else if (nodolista1.clave == nodolista2.clave) resul = estacontenida (nodolista1.sig, nodolista2.sig); else resul = estacontenida (nodolista1.sig, nodolista2); else resul = true; return resul;

16 ListasGenerarDosListasSiNodoComun Enunciado Dada la siguiente declaración de lista calificada de números enteros: public class NodoLista { int dato; NodoLista sig; NodoLista (int x) { dato = x; sig = null; public class Lista { NodoLista inicio; SE PIDE: Implementar, en Java, un método recursivo tal que, dadas dos listas (lista1 y lista2) del tipo anterior, ordenadas ascendentemente y que pueden tener un nodo común, genere dos listas independientes. OBSERVACIONES: Si no existe ningún nodo común el método no deberá surtir ningún efecto. En cada una de las listas no puede haber claves repetidas. No se permite la utilización de ninguna estructura de datos auxiliar. Sólo se permite la realización de un único recorrido en cada lista. EJEMPLO: Situación de partida: lista1 lista * 3 5 Situación final: lista * lista * Orientación Se trata de un ejercicio de enfrentamiento de listas en modalidad AND, es decir: el proceso continúa si hay elementos en ambas listas: ((nodolista1!= null) && nodolista2!= null)). Durante la fase de ida se recorren ambas listas teniendo en cuenta su ordenación ascendente. El cumplimento de la terminación pesimista significa que se ha alcanzado el final de alguna de las listas sin haber encontrado un nodo común. El método no surte efecto alguno. La terminación anticipada tiene lugar como consecuencia del encuentro de un nodo común (nodolista1 == nodolista2) que requiere como condición necesaria, pero no suficiente, que las dos claves sean iguales. La transición implica la llamada desde el punto actual a un método recursivo auxiliar (replicar). Los únicos argumentos necesarios son nodolista1 y nodolista2.

17 El método auxiliar (replicar) recibe un argumento de tipo NodoLista (nodolistao), y devuelve un resultado de tipo NodoLista. Se trata de devolver la lista apuntada por uno de los punteros (nodolistao) y una réplica de la misma (el resultado del método). Código. static NodoLista replicar (NodoLista nodolistao) { NodoLista aux = null; if (nodolistao!= null) { aux = replicar (nodolistao.sig); aux = new NodoLista (nodolistao.clave, aux); return aux; static NodoLista generardoslistassinodocomun (NodoLista nodolista1, NodoLista nodolista2) { NodoLista aux; if ((nodolista1!= null) && (nodolista2!= null)) if (nodolista1.clave < nodolista2.clave) aux = generardoslistassinodocomun (nodolista1.sig,nodolista2); else if (nodolista1.clave > nodolista2.clave) aux = generardoslistassinodocomun (nodolista1,nodolista2.sig); else if (nodolista1!= nodolista2) { aux = generardoslistassinodocomun (nodolista1.sig, nodolista2.sig); if (nodolista2!= aux) { nodolista2.sig = aux; aux = nodolista2; else aux = replicar (nodolista1); else aux = nodolista2; return aux; static void llamadagenerar (Lista lista1, Lista lista2) { generardoslistassinodocomun (lista1.inicio, lista2.inicio);

18 ListasBusquedaReorganizableEnListaCabeceraCentinela. Enunciado. Dada la siguiente declaración de lista reorganizable con cabecera y centinela ficticios de números enteros: class NodoLista { int clave; NodoLista sig; public class Lista { NodoLista cab, cent; SE PIDE: Codificar, en Java un método booleano que, recibiendo como argumentos una lista del tipo anterior y un dato entero, devuelva el valor true si el dato se encuentra en la lista a la vez que mantiene la naturaleza de la lista reorganizable o false, en caso contrario y la lista no se modifica. EJEMPLO: dados la lista de la figura 1 y el dato 13 el método devolverá true y la lista quedará según se indica en la figura 2. lista cabecera centinela * Figura 1. lista cabecera centinela * Figura 2. OBSERVACIONES: La lista no contiene elementos repetidos. No se permite la utilización de ninguna estructura de datos auxiliar. Sólo se permite la realización de un único recorrido en la lista..

19 Orientación. Como siempre que trabajamos con listas con cabecera y centinela, se plantea una solución iterativa. El algoritmo contempla dos funcionalidades: Devolver el valor booleano correspondiente a la existencia (o no) de la clave solicitada. Para reubicar, en su caso, el nodo que contiene la clave buscada se utiliza la propia variable referencia (actual) empleada para recorrer la lista (lista.cab.sig = actual). También es necesario arrastrar una referencia al nodo anterior (ant) que permita enlazarlo con el siguiente al que se quiere reubicar (actual.sig = lista.cab.sig y anterior.sig = actual.sig) 1. Código. static boolean busquedareorganizable (Lista lista, int dato) { NodoLista anterior, actual; boolean resul = false; anterior = lista.cab; actual = anterior.sig; lista.cent.clave = dato; while (actual.clave!= dato) { anterior = actual; actual = actual.sig; if (actual!= lista.cent){ resul = true; anterior.sig = actual.sig; actual.sig = lista.cab.sig; lista.cab.sig = actual; return resul; 1 Deberá prestar especial atención al orden en que ejecute dichas asignaciones.

20 ListasPilasInsertarNSiListaEnPila. Enunciado. Dados el Tad Pila de Enteros con las operaciones static boolean pilavacia (); static void apilar (int elem); static int desapilar (); y la siguiente declaración de lista enlazada: class NodoLista { int clave; NodoLista sig; public class Lista { NodoLista inicio; String nombre; SE PIDE: Codificar un método recursivo en Java que, recibiendo como parámetros una pila perteneciente al Tad Pila anterior, una lista enlazada perteneciente al tipo Lista y un número entero n, inserte en la pila el número n justo debajo de la secuencia de números que representa la lista, si es que dicha secuencia se encuentra contenida en la pila. OBSERVACIONES: No se permite la utilización de ninguna estructura de datos auxiliar. Sólo se permite la realización de un único recorrido tanto en la pila como en la lista. Se supone que ni la lista ni la pila se encuentran vacías. Se supone que ni en la lista ni en la pila existen elementos repetidos. EJEMPLOS: Dadas la pila, la lista y el número n mostrados en la figura a), la ejecución del método debera dejar la pila en la situación mostrada en la figura b. Sin embargo, dadas la pila, la lista y el número n mostrados en la figura c, dado que la secuencia de números que constituye la lista no se encuentra contenida dentro de la pila, la ejecución del método no deberá surtir ningún efecto n= n=6 3 2 Figura a Figura b Figura c

21 Orientación. El método continuará siempre que la pila tenga elementos (!pila.pilavacia()) y que no se haya alcanzado el final de la lista (&& lista!= null). Pueden darse las siguientes circunstancias: o Se encuentran (desapilan) elementos de la pila distintos al primero de la lista. Se lanzará una nueva llamada recursiva desde el estado actual de la pila y el mismo punto de la lista. No olvidar, en la fase de vuelta, volver a apilar el elemento desapilado. o Se produce, en su caso, la primera coincidencia entre un elemento de la pila y de la lista. Esta situación se identifica mediante el argumento engan, (de tipo boolean inicializado a false en el módulo de llamada). En este momento su valor cambiará a true y se realiza una llamada recursiva pasando como argumento el nodo siguiente de la lista. (No olvidar apilar en la fase de vuelta). o A partir de esta situación se espera encontrar siempre coincidencias entre los elementos de la pila y de la lista y ejecutar nuevas llamadas recursivas apilando a la vuelta). Si es así se alcanzaría la condición general (compuesta) de terminación. o Si dicha condición se cumple como consecuencia de haber recorrido la lista completamente (lista == null) se entiende que se satisfacen las condiciones del enunciado y puede apilarse el argumento n. o En caso de vaciado de la pila (pila.pilavacia()) sin haber recorrido la lista completamente (lista!= null), se entiende no se cumplen las condiciones especificadas (la secuencia de la lista no está en la pila) y, por tanto, no procede la inserción de n. o En caso de que se interrumpa la secuencia de coincidencias entre los elementos de la pila y de la lista se produce terminación anticipada (no hay más llamadas recursivas) y el proceso finaliza después de apilar el último elemento desapilado de la pila. Por supuesto, no procede la inserción de n. Código. static void insertarn (Pila pila, NodoLista lista, int n, boolean engan) throws PilaVacia { int elem; if (!pila.pilavacia() && (lista!= null)) { elem = pila.desapilar (); if (elem!= lista.clave) if (!engan) { insertarn (pila,lista, n,engan); pila.apilar (elem); else pila.apilar (elem); else { if (!engan) engan = true; insertarn(pila,lista.sig, n,engan); pila.apilar (elem); else if (lista == null) pila.apilar (n); static void insertarnsilistaenpila (Pila pila, Lista lista, int n) throws PilaVacia { if (lista.inicio!= null) insertarn (pila, lista.inicio, n, false);

22 Ejercicios de Estructuras de Datos I Listas 133 ListasInsertarUnoListaSobreMatriz. Enunciado. Considérese la siguiente declaración de Lista Enlazada Ordenada de Números Enteros Positivos: class NodoLista { int clave, sig; NodoLista () { clave = 0; sig = 0; public class Lista { final int NULL = 0, N = 9; NodoLista [] matriz; int i; Lista () { matriz = new NodoLista [N]; for (i = 0; i < N-1; i++) { matriz [i] = new NodoLista (); matriz [i].sig = i + 1; matriz [i] = new NodoLista (); Nodo inicial (índice 0): El campo clave es un puntero explícito al primer nodo de la lista en tanto que el campo sig es otro puntero al primer hueco. Nodos con información: El campo clave es la clave y el campo sig es un puntero al siguiente nodo de la lista. El valor 0 (NULL) se debe interpretar como final de la lista. Nodos libres ( huecos ): El campo clave no tiene ningún significado. El campo sig es un puntero al siguiente hueco (el valor 0 se interpreta como final de la lista de huecos) Figura 1 Figura 2 SE PIDE: Codificar un método en Java que, recibiendo como parámetro una lista del tipo anterior, inserte un 1 entre aquellos dos elementos consecutivos cuya diferencia sea la mínima existente. OBSERVACIONES: Solamente se permite la realización de un único recorrido, tanto en la lista de números como en la lista de huecos. No se permite la utilización de estructuras de datos auxiliares. Se supone que en la lista no existen números repetidos. Si existen varios pares de elementos consecutivos cuya diferencia mínima sea la misma, el 1 se insertará entre los dos más pequeños. Si la lista de números posee menos de dos elementos, la ejecución del método no surtirá ningún efecto. Si no existe ningún hueco libre en el vector, la ejecución del método no surtirá ningún efecto. EJEMPLO: Dada la lista mostrada en las figuras 1 y 2, dado que los números consecutivos de difencia mínima son el 12 y el 13, la ejecución del método deberá devolver la lista en la situación mostrada en las figuras 3 y 4. Al insertar un nuevo elemento en la lista de números, éste se ubicará en la posición del primer hueco de la lista de huecos, debiendo desconectarse dicho hueco de la mencionada lista de huecos Figura 3 Figura 4

23 Orientación. Básicamente la solución del problema consiste en aplicar un tratamiento recursivo que: En la fase de ida recorra la lista encontrando la menor diferencia (difmin). El tratamiento del primer elemento (no tiene anterior) debería ser diferente al del resto, salvo que se admita utilizar la constante MAX_VALUE. No existe posibilidad de terminación anticipada. En la fase de transición se fija el valor de alguna información necesaría para identificar (en la fase de vuelta) el lugar donde ha de procederse a la inserción del 1. Podría ser la posición de un nodo o también la clave correspondiente al sustraendo que participa en la primera menor diferencia encontrada (no hay claves repetitdas). Se ha optado por esta última lo que obliga a utilizar (en la fase de ida) dicha información (menor) que no se puede pasar como argumento (por valor), dado que en la fase de vuelta se necesita su valor final. Se ha optado por declararlo como variable global de una clase interna Inserta1. En la fase de vuelta se consultan las claves correspondientes hasta encontrar la que coincide con el valor de menor. En ese momento se procede a la inserción del nodo con clave 1 (método insertar1). Dada la naturlaeza de la lista (implementada mediante una matriz), la creación de nuevo nodo implica codificar expresamente las funcionalidades de localizar el primer nodo disponible (si hay) y actualizar, en su caso, la lista de huecos 2. Para ello se emplean los correspondientes algoritmos básicos explicados en teoría. 2 En el caso de utilizar estructuras de datos dinámicas estas funcionalidades se ejecutan de forma transparente para el programador cuando se hace uso del contructor (new).

24 Ejercicios de Estructuras de Datos I Listas 135 Código. static class Inserta1 { static final int NULL = 0, N = 9; static int menor, difmin; static void insertar1 (NodoLista [ ] lista, int i) { int aux; aux = lista[0].sig; lista[0].sig = lista[aux].sig; lista[aux].clave = 1; lista[aux].sig = lista[i].sig; lista[i].sig = aux; static void insertaruno (NodoLista [ ] lista, int i, int ant) { if (i!= NULL) { if (lista[i].clave - ant < difmin) { difmin = lista[i].clave-ant; menor = ant; ant = lista[i].clave; insertaruno (lista, lista[i].sig, ant); if (lista[i].clave == menor) insertar1 (lista,i); static void insertarunomenordiferencia (Lista lista) { int ant, i; NodoLista [] auxlista = lista.matriz; if ((auxlista [0].sig!= NULL) && (auxlista [0].clave!= NULL)) { i = auxlista[0].clave; menor = Integer.MAX_VALUE; ant = auxlista[i].clave; difmin = menor; insertaruno (auxlista, auxlista[i].sig, ant); if (auxlista[i].clave== menor) insertar1(auxlista, i);

25 ListasInsertarUnoTADLista. Enunciado. Dado el TAD Lista de números enteros positivos con las siguientes operaciones: void crearnodo (); /*Crea un nuevo nodo al principio del tadlista*/ int devolverclave (); /*Devuelve la clave contenida en el nodo del tadlista*/ NodoLista devolverreferencia (); /*Devuelve una referencia al primer nodo del tadlista*/ NodoLista devolversiguiente (); /*Devuelve una referencia al siguiente del tadlista*/ void asignarclave (int dato); /*Asigna el dato al primer nodo del tadlista*/ void asignarreferencia (NodoLista referencia); /*Hace que el tadlista apunte al mismo sitio que referencia*/ void asignarreferenciasiguiente (NodoLista referencianueva); /*Hace que el siguiente del nodo actual apunte ahora al mismo sitio que referencianueva*/ void asignarnulo (); /*Hace que el tadlista tome el valor null*/ boolean esnulo (); /*Devuelve true si el tadlista tiene valor null; false en caso contrario*/ boolean esigual (NodoLista referencia); /*Devuelve true si referencia apunta al mismo sitio que el tadlista, false en caso contrario*/ SE PIDE: Codificar un método en Java que, recibiendo como parámetro una lista ordenada ascendentemente perteneciente al TadLista anterior, inserte un 1 entre aquellos dos elementos consecutivos cuya diferencia sea la mínima existente. OBSERVACIONES: Solamente se permite la realización de un único recorrido en la lista. No se permite la utilización de estructuras de datos auxiliares. Se supone que en la lista no existen números repetidos. Si existen varios pares de elementos consecutivos cuya diferencia mínima sea la misma, el 1 se insertará entre aquellos dos que resulten ser los más pequeños. Si la lista de números posee menos de dos elementos, la ejecución del método no surtirá ningún efecto. EJEMPLO: Dada la lista mostrada en la figura 1, puesto que los números consecutivos de diferencia mínima son el 12 y el 13, la ejecución del método deberá devolver la lista en la situación mostrada en la figura Figura 1 Figura 2

26 Ejercicios de Estructuras de Datos I Listas 137 Orientación. Dado que se trata de un TAD no está permitido presuponer ningún tipo de implementación física. No obstante, por comodidad, se puede desarrollar una solución previa basada en algún tipo de implementación conocida (por ejemplo, mediante estructuras dinámicas) y adaptarla posteriormente a las especificaciones del TAD. Se realiza un tratamiento recursivo sin posibilidad de terminación anticipada 3. En la fase de ida se identifica tanto el valor de la (primera) menor diferencia y alguno de sus componentes, por ejemplo la clave del sustraendo. En consecuencia se requiere el uso de dos argumentos (dif y menor), pasados por referencia pues deberá conocerse su valor final en la fase de vuelta. Además es necesario pasar el valor de la clave anterior (anterior). Dado que en la solución propuesta se utiliza en la fase de vuelta para identificar el punto de inserción (anterior=menor) se pasará por valor. Para poder implementar la lógica anterior a partir de las especificaciones del TAD se respetarán las equivalentes correspondencias. Adicionalmente, las llamadas con el argumento lista.sig deberán adaptarse en el sentido de utilizar una variable local (punt) a la que previamente se le asigna (mediante la operación devolversiguiente) el valor adecuado. Código. static class Inserta1 { static int menor, mindif; static void insertar1 (Lista lista, int anterior) { TadLista aux = new TadLista (); if (!lista.esnulo()) { if ((lista.devolverclave() - anterior) < mindif) { mindif = lista.devolverclave() - anterior; menor = anterior; aux.asignarreferencia(lista.devolversiguiente ()); insertar1 (aux, lista.devolverclave()); lista.asignarreferenciasiguiente (aux.devolverreferencia()); if (anterior == menor) { lista.crearnodo(); lista.asignarclave(1); static void insertaruno (Lista lista) { TadLista punt = new TadLista (); if (!lista.esnulo()) { mindif = Integer.MAX_VALUE; menor = lista.devolverclave (); punt.asignarreferencia(lista.devolversiguiente ()); insertar1(punt, lista.devolverclave()); lista.asignarreferenciasiguiente (punt.devolverreferencia()); 3 Podría plantearse una situación excepcional y específica para este ejercicio concreto, en el caso de aparecer una pareja que ofrezca diferencia de 1 unidad (la lista está ordenada y no hay elementos repetidos). La inserción del nuevo nodo tendría lugar entre ambos elementos dado que aunque aparezcan nuevas diferencias de valor 1, el enunciado establece que la inserción se realice entre los de menor valor.

27 ListasTADMatrizDinamicaBidimensional. Enunciado. Dadas las siguientes declaraciones: class ListaColumna { int contenido; ListaColumna sig; ListaColumna (int dato) { contenido = dato; sig = null; class Lista { ListaColumna columna; Lista sig; Lista () { columna = null; sig = null; public class MatrizDinamica { Lista matriz; int numfilas, numcolumnas; MatrizDinamica () { matriz = null; numfilas = 0; numcolumnas = 0; SE PIDE: Implementar el TAD Matriz Dinámica Bidimensional de Números Enteros Positivos con las siguientes operaciones: public int recuperarcontenido (int fila, int columna) /*Devuelve el contenido de la posición dada por fila y columna. Si la fila y/o la columna referenciadas no existiesen en la matriz, el método devolverá el valor cero*/ public void escribircontenido (int fila, int columna, int valor) /*Escribe en la posición dada por fila y columna el valor especificado. Si la fila y/o la columna no existiesen en la matriz, se creará una nueva posición dada por esa fila y esa columna, en la que se almacenará el mencionado valor y además deberán crearse tantas nuevas posiciones como sean necesarias para alcanzar las mencionadas fila y columna. Todas esas nuevas posiciones deberán inicializarse con el valor cero.*/ Por ejemplo, supóngase que se dispone de una matriz de 2x3 y se deseara escribir en la posición (3,4) el valor 8, la matriz deberá experimentar los cambios mostrados en la figura: OBSERVACIONES: No se permite la utilización de estructuras de datos auxiliares. Tanto los números de filas y columnas como los valores serán siempre positivos.

28 Ejercicios de Estructuras de Datos I Listas 139 Orientación. La implementación física de la estructura se ilustra en la figura siguiente: Lista de punteros a las sucesivas columnas matriz col col col * Columnas con el contenido de la matriz El diseño propuesto implica accesos múltiples a los diferentes nodos. Método escribircontenido: Utiliza tres métodos auxiliares. o aumentarcolumnas. Se ejecuta solo en caso de que alguno de los argumentos fila o columna sea superior a la variable numfilas o numcolumnas, respectivamente. En ese caso habrá que proceder a ampliar la matriz. Este método de cabecera: static ListaColumna aumentarcolumnas (Lista lista, int columnas, int filas) Se ejecuta recursivamente tantas veces como sea necesario (numcolumnas-columna). Si numfilas < fila, llamará al siguiente método auxiliar: static ListaColumna aumentarfilas (ListaColumna lista, int filas) Que se encarga de añadir tantos nodos (con contenido 0) como haga falta. Al finalizar, devolverá una referencia al último nodo añadido. A su vez, aumentarcolumnas devolverá al método de llamada una referencia al nodo correspondiente a la posición (filas, columnas). Los otros dos métodos se ejecutan si la posición buscada ya existía en la matriz o devolvercolumna. Devuelve una referencia a la columna de posición n. Su cabecera es: static Lista devolvercolumna (Lista lista, int n) o buscarfila. Devuelve una referencia al elemento de la posición fila de la columna lista. static ListaColumna buscarfila (ListaColumna lista, int fila) En cualquiea de los dos casos, una vez localizada (o añadida) la posición correspondiente, se asigna al campo contenido referenciado en ese momento el valor pasado como argumento (auxf.contenido=valor) Método recuperarcontenido: Este método deberá detectar si los argumentos fila y/o columna suponen una situación de fuera de rango (fila > numfilas y/o columna > numcolumnas). Su cabecera es: public int recuperarcontenido (int fila, int columna) Los valores de fila y columna se utilizarán como condiciones de terminación (> 0) enviándolos a las siguientes llamadas decrementados en una unidad. Utiliza los métodos auxiliares descritos anteriormente: o devolvercolumna, que devuelve una referencia a la columna de posición n. o buscarfila, que devuelve una referencia al elemento de la posición fila de la columna lista. Como resultado devuelve auxf.contenido, o 0 si la posición no existe.

29 Código. static Lista devolvercolumna (Lista lista, int n) { Lista aux; if (n > 0) if (lista!= null) aux = devolvercolumna (lista.sig, n-1); else aux = null; else aux = lista; return aux; static ListaColumna buscarfila (ListaColumna lista, int fila) { ListaColumna resul; if (fila > 0) resul = buscarfila (lista.sig, fila-1); else resul = lista; return resul; public int recuperarcontenido (int fila, int columna) { ListaColumna auxf = null; Lista auxc = null; int resul = 0; if (numfilas >= fila && numcolumnas >= columna) { auxc = devolvercolumna (matriz, columna); if (auxc!= null) auxf = buscarfila (auxc.columna, fila); if (auxf!= null) resul = auxf.contenido; return resul; static ListaColumna aumentarfilas (ListaColumna lista, int filas) { ListaColumna resul, aux; if (filas > 0) { if (lista.sig == null) { aux = new ListaColumna (0); lista.sig = aux; resul = aumentarfilas (lista.sig, filas - 1); else resul = lista; return resul;

30 Ejercicios de Estructuras de Datos I Listas 141 static ListaColumna aumentarcolumnas (Lista lista, int columnas, int filas) { ListaColumna resul = null, auxf; Lista aux; if (columnas > 0) { if (lista.sig == null) { aux = new Lista (); lista.sig = aux; resul = aumentarcolumnas (lista.sig, columnas - 1, filas); if (lista.columna == null) lista.columna = new ListaColumna (0); auxf = aumentarfilas (lista.columna, filas); if (columnas == 0) resul = auxf; return resul; public void escribircontenido (int fila, int columna, int valor) { ListaColumna auxf = null; Lista auxc = null; if (numcolumnas >= columna && numfilas >= fila) { auxc = devolvercolumna (matriz, columna-1); if (auxc!= null ) { auxf = buscarfila (auxc.columna, fila); else { if (matriz == null) { matriz = new Lista (); auxf = aumentarcolumnas (matriz, columna, fila); if (columna < numcolumnas) aumentarcolumnas (matriz, numcolumnas, fila); else if (fila < numfilas) aumentarcolumnas (matriz, columna, numfilas); if (fila > numfilas) numfilas = fila; if (columna > numcolumnas) numcolumnas = columna; if (auxf!= null) auxf.contenido = valor;

Estructuras de Datos. 14 de junio de Apellidos

Estructuras de Datos. 14 de junio de Apellidos Ejercicio 1) (3 puntos). Dado el TAD Pila de Números Enteros con las siguientes operaciones: boolean pilavacia (); void apilar (int x); int desapilar () throws PilaVacia; SE PIDE: Codificar un método estático

Más detalles

TEMA 4. Árboles CONSIDERACIONES GENERALES.

TEMA 4. Árboles CONSIDERACIONES GENERALES. TEMA 4. Árboles CONSIDERACIONES GENERALES. Se detallan a continuación ejercicios de implementación de funcionalidades de árboles binarios con estructuras dinámicas (referencias). A la hora de abordar la

Más detalles

ESTRUCTURAS DE DATOS LISTAS 93

ESTRUCTURAS DE DATOS LISTAS 93 ESTRUCTURAS DE DATOS LISTAS 93 TEMA 3 Listas. 3.1. CONCEPTOS GENERALES. Una lista es una estructura de datos lineal que se puede representar simbólicamente como un conjunto de nodos enlazados entre sí.

Más detalles

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

Tema 2 Tipos abstractos de datos. 2.2 Pila de números enteros Tema 2 Tipos abstractos de datos. 2.2 Pila de números enteros Especificación de TAD s. TAD Pila de Enteros. desapilar 2 7 3 5 apilar Cima de la Pila Cima de la Pila Definición: Estructura de Datos que

Más detalles

Tema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz

Tema 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 detalles

Estructuras dinámicas lineales (i)

Estructuras dinámicas lineales (i) Estructuras dinámicas lineales (i) Introducción En la lección anterior se explicaron los conceptos de dinámicas y puntero; vimos la forma en que se implementan dichas tanto en la notación algorítmica como

Más detalles

1.2.4 Listas enlazadas

1.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 detalles

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Tema 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 detalles

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

UNIDAD 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 detalles

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

Tema 2 Tipos abstractos de datos. 2.3 Cola de números enteros. Tema 2 Tipos abstractos de datos. 2.3 Cola de números enteros. Especificación de TAD s. TAD Cola de Enteros. Definición del TAD Cola de Enteros: Estructura de Datos que contiene una serie de elementos

Más detalles

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS

LISTAS 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 detalles

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ESTRUCTURA 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: NOTA FINAL: Nota Practica (1 punto) + Nota Examen (9 punto) Es indispensable aprobar el examen (4,5 puntos) para aprobar la asignatura (5 puntos) La práctica es opcional Duración:

Más detalles

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

UNIDAD 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 detalles

Estructuras dinámicas lineales (ii)

Estructuras dinámicas lineales (ii) Estructuras dinámicas lineales (ii) Introducción Continúa la exposición de los distintos algoritmos existentes para manipular s simplemente enlazadas; sin el lección anterior se presentaban algoritmos

Más detalles

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ESTRUCTURA 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: Escribe tu nombre y apellidos en esta hoja e inmediatamente en todas las suplementarias, incluso las de sucio. El no hacerlo puede suponer tu expulsión Puedes utilizar el lápiz

Más detalles

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

UNIDAD 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 detalles

Estructura de datos y de la información Boletín de problemas - Tema 10

Estructura de datos y de la información Boletín de problemas - Tema 10 Estructura de datos y de la información Boletín de problemas - Tema 10 1. En el caso de que sea posible, dar un ejemplo de los siguientes puntos. Si no, explicar por qué no lo es. Considerar un valor genérico

Más detalles

Examen escrito de Programación 1

Examen escrito de Programación 1 Examen escrito de Programación 1 Escuela de Ingeniería y Arquitectura Departamento de Informática e Ingeniería de Sistemas 31 de agosto de 2012 Disponer sobre la mesa en lugar visible un documento de identificación

Más detalles

Estructura de Datos. Listas Enlazadas

Estructura 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 detalles

Implementación de las Clases Pila, Cola, Lista y Arbol

Implementació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 detalles

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

Tema 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 detalles

SUBPROGRAMAS. Los subprogramas pueden ser invocados varias veces desde diferentes partes del programa.

SUBPROGRAMAS. Los subprogramas pueden ser invocados varias veces desde diferentes partes del programa. SUBPROGRAMAS Los subprogramas son un conjunto de instrucciones que realizan una labor específica y se comportan de manera independiente en un programa. Los subprogramas facilitan: Descomponer la complejidad

Más detalles

LISTAS. Prof. Ing. M.Sc. Fulbia Torres

LISTAS. Prof. Ing. M.Sc. Fulbia Torres LISTAS ESTRUCTURAS DE DATOS 2006 Prof. UNIDAD II ESTRUCTURAS DE DATOS LISTAS Definición. Representación de Listas. Lista Lineal Simplemente Enlazada. Operaciones TAD LLSE. Implementación Dinámica. Otras

Más detalles

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

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 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 detalles

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

Algoritmos 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 detalles

Versión Iterativa de recuperar en un. Ejercicios Tema 11. Implementa una versión del método recuperar iterativa con la siguiente especificación:

Versión Iterativa de recuperar en un. Ejercicios Tema 11. Implementa una versión del método recuperar iterativa con la siguiente especificación: Versión Iterativa de recuperar en un ABB Ejercicios Tema 11 Ejercicios Adaptados de Apuntes y Exámenes de EDA Germán Moltó Martínez gmolto@dsic.upv.es Estructuras de Datos y Algoritmos Escuela Técnica

Más detalles

Segundo Parcial de Programación 2 7 de junio de 2017

Segundo Parcial de Programación 2 7 de junio de 2017 Instituto de Computación. Facultad de Ingeniería. Universidad de la República Segundo Parcial de Programación 2 7 de junio de 2017 Problema 1 (30 puntos) Considere un TAD T que permita almacenar a lo sumo

Más detalles

Introducción: una simple colección

Introducció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 detalles

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Leonardo DaVinci. Piccasso La Tempestad. Mona Lisa

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Leonardo DaVinci. Piccasso La Tempestad. Mona Lisa 1. Ejercicio (3,5 puntos) a) Complentar la especificación public class Galeria { LinkedList cuadrosportitulo; LinkedList cuadrosporautor; LinkedListItr itrcuadrosportitulo; LinkedListItr itrcuadrosporautor;

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS

PROGRAMACIÓN ORIENTADA A OBJETOS PROGRAMACIÓN ORIENTADA A OBJETOS GRADO EN INGENIERÍA INFORMÁTICA SEGUNDO CURSO DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO ESCUELA POLITÉCNICA SUPERIOR UNIVERSIDAD DE CÓRDOBA CURSO ACADÉMICO: 2011

Más detalles

Segundo parcial de Programación 2

Segundo parcial de Programación 2 Generalidades: Segundo parcial de Programación 2 a. La prueba es individual y sin material. b. La duración es 3hs. c. Sólo se contestan dudas acerca de la letra. 8 de Julio de 2016 d. Escriba las hojas

Más detalles

UNIVERSIDAD 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 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 detalles

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ESTRUCTURA 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 detalles

Notas de estructura de datos con lenguaje C. Estructuras de datos dinámicas

Notas de estructura de datos con lenguaje C. Estructuras de datos dinámicas Listas Enlazadas que está prohibida su impresión y distribución. Estructuras de datos dinámicas Contrariamente a las estructuras de datos estáticas (arreglos-listas, vectores y tablas- y estructuras) en

Más detalles

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º 1. Ejercicio (1 puntos) Dado el array A={8, 3, 7, 1, 4, 9, 5, 2, 6 (a) Escribir la secuencia de ordenación del array A por medio del algoritmo de InsertionSort. {8, 3, 7, 1, 4, 9, 5, 2, 6 {3, 8, 7, 1,

Más detalles

Soluciones Ejercicios Tema 8

Soluciones Ejercicios Tema 8 Traza Pila (1/2) Pila p = new ArrayPila(); Soluciones Ejercicios Tema 8 Germán Moltó Martínez gmolto@dsic.upv.es Estructuras de Datos y Algoritmos Escuela Técnica Superior de Ingeniería

Más detalles

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.

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. 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 detalles

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

EJERCICIO 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 detalles

Práctica 4. TAD lista posicional

Práctica 4. TAD lista posicional Objetivos. Práctica 4. TAD lista posicional Se trata de construir el TAD lista posicional con una implementación acotada. Haciendo uso de este TAD, se implementará una biblioteca de cálculos estadísticos

Más detalles

Tipos Recursivos de Datos

Tipos 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 detalles

TEMA 1. Tipos Abstractos de Datos. CONSIDERACIONES GENERALES.

TEMA 1. Tipos Abstractos de Datos. CONSIDERACIONES GENERALES. TEMA 1 Tipos Abstractos de Datos. CONSIDERACIONES GENERALES. El TAD es oculto por naturaleza. Se desconoce cualquier referencia a su funcionamiento interno. Salvo expresa indicación en contra, las estructuras

Más detalles

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

1. Cuántas sentencias hay en la secuencia principal del siguiente programa? 1. Cuántas sentencias hay en la secuencia principal del siguiente programa? public class PruebaSwitch { System.out.print ("Opcion: "); case 3: System.out.println ("miércoles "); A. 1. B. 4. C. Más de 10.

Más detalles

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Nombre-Apellidos:

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Nombre-Apellidos: Nombre-Apellidos: Nota: 1. Ejercicio (1 punto) Responder a las siguientes preguntas de tipo test, seleccionando sólo una de las respuestas. Se evaluarán sólo las respuestas contestadas con el siguiente

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...

Más detalles

LEA ATENTAMENTE ESTAS INSTRUCCIONES ANTES DE COMENZAR LA PRUEBA

LEA ATENTAMENTE ESTAS INSTRUCCIONES ANTES DE COMENZAR LA PRUEBA Asignatura Estructura de Datos y Algoritmos Grado en Ingeniería Informática y Doble Grado en Informática y Administración de Empresas 24 de Marzo de 2014. SEGUNDO EXAMEN PARCIAL Nombre:... Apellidos:...

Más detalles

13. LISTAS Introducción Listas con punto de interés

13. LISTAS Introducción Listas con punto de interés Ricardo Ferrís / Jesús Albert Algoritmos y Estructuras de Datos I 13. LISTAS 13.1. INTRODUCCIÓN...59 13.2. LISTAS CON PUNTO DE INTERÉS...59 13.3. IMPLEMENTACIÓN DE LA CLASE LISTA EN C++...63 13.3.1 Implementación

Más detalles

Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 80M, 2014/ de Marzo de

Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 80M, 2014/ de Marzo de Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 80M, 2014/2015 09 de Marzo de 2015 Nombre y Apellidos:... PROBLEMA 1 (1 punto) Programación Orientada a Objetos. Una compañía solicita

Más detalles

Soluciones del Examen de Fundamentos de Computadores y Lenguajes

Soluciones del Examen de Fundamentos de Computadores y Lenguajes Soluciones del Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Final. Junio 2003 1) Escribir un fragmento de programa que haga lo siguiente Declara

Más detalles

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

TEMA 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 detalles

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota: Nombre y apellidos: Nota: Escribe tu nombre y apellidos en esta hoja e inmediatamente en todas las suplementarias, incluso las de sucio. El no hacerlo puede suponer tu expulsión Puedes utilizar el lápiz

Más detalles

Implementación de las Clases Pila, Cola, Lista y Arbol

Implementació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 13 de mayo de 2018 2/1 Implementación de Estructuras de Datos Implementaremos cada estructura de datos en dos niveles.

Más detalles

Estructuras de Datos

Estructuras de Datos 8 de marzo de 2011 1 2 3 4 5 Tipo de Dato Abstracto Un tipo de dato abstracto (TDA), corresponde a un conjunto de valores y un conjunto de operaciones sobre tales valores. s de TDA Enteros. Reales. Booleanos.

Más detalles

Ejercicio 1 (proyecto prlistas, paquete listas)

Ejercicio 1 (proyecto prlistas, paquete listas) PRÁCTICA 3 Curso 2004-05 En esta práctica construiremos y usaremos dos paquetes: el primero, listas, que implementa listas genéricas y el segundo, colas, que implementa colas y colas de prioridades genéricas.

Más detalles

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 -

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 - Trabajo práctico Nº 7 (Resolución de problemas Estructura: pila y cola). Realiza el programa de cada situación problemática. 1- Cargar en una pila n letras del abecedario.(n debe ser menor a 30) 2- En

Más detalles

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS Capítulo 3 Estructuras de datos estáticas 1/37 1. INTRODUCCIÓN Las estructuras de datos se utilizan, generalmente, para procesar una colección de valores que están

Más detalles

EDA. Tema 8 Colas de Prioridad: Heaps

EDA. 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

Tema 2: Clases y Objetos

Tema 2: Clases y Objetos Tema 2: Clases y Objetos Anexo: tipo de datos Pila Programación Orientada a Objetos Curso 2017/2018 Características del paradigma OO Curso 2017/2018 Programación Orientada a Objetos 2 Características del

Más detalles

LISTAS CIRCULARES. // Métodos private CElemento() {} // constructor. ultimo

LISTAS CIRCULARES. // Métodos private CElemento() {} // constructor. ultimo LISTAS CIRCULARES Una lista circular es una lista lineal en la que el último elemento apunta al primero. Entonces es posible acceder a cualquier elemento de la lista desde cualquier punto dado. Las operaciones

Más detalles

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

Clase 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 detalles

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

Tema 04: TAD Lista. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom Tema 04: TAD Lista M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom (Prof. Edgardo A. Franco) 1 Contenido TAD Lista Descripción del TAD Lista

Más detalles

Examen de Programación 1. Viernes 31/enero/2014. Problema 1 o (2.5 puntos) Disponer un documento de identificación con fotografía sobre la mesa.

Examen de Programación 1. Viernes 31/enero/2014. Problema 1 o (2.5 puntos) Disponer un documento de identificación con fotografía sobre la mesa. Examen de Programación 1. Viernes 31/enero/2014 Disponer un documento de identificación con fotografía sobre la mesa. Comenzar a resolver cada problema del examen en una hoja de papel diferente. Escribir

Más detalles

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

Biblioteca 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 detalles

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES Capitulo 5. Arboles 1. Al recorrer el siguiente árbol en se visitan más nodos para llegar al número 38. Justifique su respuesta mostrando cada uno de los recorridos. Tipo de Recorrido Recorrido A) PREORDEN

Más detalles

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

IMPLEMENTACIÓ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 detalles

Capitulo V Listas Enlazadas

Capitulo V Listas Enlazadas Capitulo V Listas Enlazadas Muere lentamente, quien abandona un proyecto antes de iniciarlo, no preguntando de un asunto que desconoce o no respondiendo cuando le indagan sobre algo que sabe. Evitemos

Más detalles

Programación II Árboles binarios de búsqueda (ABB)

Programación II Árboles binarios de búsqueda (ABB) Programación II Árboles binarios de búsqueda (ABB) Definición Un árbol binario de búsqueda(abb) a es una estructura de datos de tipo árbol binario en el que para todos sus nodos, el hijo izquierdo, si

Más detalles

Ejercicio de Programación Orientada a Objetos Curso 2016/2017 Exámenes

Ejercicio de Programación Orientada a Objetos Curso 2016/2017 Exámenes Ejercicio de Programación Orientada a Objetos Curso 2016/2017 Exámenes Introducción El ejercicio consiste en la implementación de una aplicación para la creación, edición, resolución y corrección de exámenes.

Más detalles

Nombre:... Apellidos:...

Nombre:... Apellidos:... MODELO A Asignatura Estructura de Datos y Algoritmos 24 de Marzo de 2014. Grado en Ingeniería Informática y Doble Grado en Informática y Administración de Empresas SEGUNDO EXAMEN PARCIAL Nombre:... Apellidos:...

Más detalles

Instituto 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: 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 detalles

TEMA 5. ESTRUCTURAS DE CONTROL: BUCLES.

TEMA 5. ESTRUCTURAS DE CONTROL: BUCLES. TEMA 5. ESTRUCTURAS DE CONTROL: BUCLES. Una de las características de las computadoras que aumenta considerablemente su potencia es su capacidad para ejecutar una tarea muchas (repetidas) veces con gran

Más detalles

Objetivos. Conocer y saber utilizar diferentes tipos de datos. estructurados: cómo se definen. cómo están organizadas sus componentes

Objetivos. Conocer y saber utilizar diferentes tipos de datos. estructurados: cómo se definen. cómo están organizadas sus componentes Objetivos Conocer y saber utilizar diferentes tipos de datos estructurados: cómo se definen cómo están organizadas sus componentes cómo se accede a ellas y sus operaciones y algoritmos básicos Tema: Estructuras

Más detalles

Examen de Introducción al Software (Ingeniería Informática)

Examen de Introducción al Software (Ingeniería Informática) Examen de Introducción al Software (Ingeniería Informática) Febrero 2011 Primera parte (5 puntos, 50% nota del examen) 1) Escribir en Java el siguiente algoritmo descrito en pseudocódigo, que calcula los

Más detalles

Análisis semántico. Análisis semántico. Índice (I)

Análisis semántico. Análisis semántico. Índice (I) Análisis semántico Índice (I) Marina de la Cruz Alfonso Ortega Objetivo del análisis semántico Decisiones para la construcción de un analizador semántico Análisis semántico con Bison Nivel de indirección

Más detalles

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010 Estructura de Datos Árboles Binarios de Búsqueda ABB Prof.: Mauricio Solar Prof.: Lorna Figueroa Primer Semestre, 20 1 Arboles de Búsqueda Binaria El árbol binario de búsqueda (ABB) toma su nombre del

Más detalles

Examen de Prácticas de Programación Ingeniería Informática

Examen de Prácticas de Programación Ingeniería Informática Examen de Prácticas de Programación Ingeniería Informática Junio 2007 1) (2 puntos) Escribir en Java la implementación de los métodos public void escribematrizenfichero(double[][] m, String nomfich)...

Más detalles

Unidad III: Estructuras lineales

Unidad III: Estructuras lineales Unidad III: Estructuras lineales Listas En Ciencias de la Computación, una lista enlazada es una de las estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de datos.

Más detalles

Estructuras Dinámicas de datos.

Estructuras 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

Grado 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/ 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 detalles

Estructuras de datos Solemne 2

Estructuras de datos Solemne 2 Estructuras de datos Solemne 2 Profesores: Luis Bastías, Rodrigo Paredes, Iván Zuñiga Ayudantes: Patricia Albornoz, Francisco Claude, Hans Ulloa Sin apuntes, 1:30 horas P1. Move-To-Front Lists Utilizando

Más detalles

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2 Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2 Diseño de algoritmos recursivos 1. Dado un vector de enteros de longitud N,

Más detalles

Indique la veracidad o falsedad de cada una de las afirmaciones siguientes, explicando detalladamente en cada caso el motivo de su respuesta.

Indique la veracidad o falsedad de cada una de las afirmaciones siguientes, explicando detalladamente en cada caso el motivo de su respuesta. LENGUAJES DE PROGRAMACIÓN INSTRUCCIONES Por favor, entregue esta primera hoja de enunciado junto con el examen. Dispone de 2 horas para realizar el examen. MATERIAL PERMITIDO: Ninguno. Pregunta 1 (3 puntos)

Más detalles

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Soluciones al Examen de Fundamentos de Computadores y Lenguajes Soluciones al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Final. Septiembre 2003 1) Se dispone del siguiente array de números reales ya creado.

Más detalles

Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas. Guillermo Román Díez

Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas. Guillermo Román Díez Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2015-2016 Guillermo Román, UPM AED: Introducción

Más detalles

Definición de árbol. Árboles

Definición de árbol. Árboles ÁRBOLES Árboles * Definición de árbol * Formas de representación * Nomenclatura sobre árboles * Árboles binarios * Declaración de árbol binario * Recorridos sobre árboles binarios * Construcción de un

Más detalles

Examen escrito de Programación 1. Viernes 22 de enero de Problema 1 o (3.0 puntos) Problema 2 o (3.0 puntos)

Examen escrito de Programación 1. Viernes 22 de enero de Problema 1 o (3.0 puntos) Problema 2 o (3.0 puntos) Examen escrito de Programación 1. Viernes 22 de enero de 2016 Se debe disponer de un documento de identificación con fotografía sobre la mesa. Se debe comenzar a resolver cada uno de los problemas del

Más detalles

Soluciones a los ejercicios planteados en el curso

Soluciones a los ejercicios planteados en el curso Soluciones a los ejercicios planteados en el curso Unidad 3 - Algoritmos recursivos Lección 2 Mecanismo de recursividad Escribe un algoritmo recursivo que calcule el elemento de cardinal más elevado de

Más detalles

Programación de sistemas Árboles

Programación de sistemas Árboles Programación de sistemas Árboles Departamento de Ingeniería Telemática 1 Contenidos Concepto de árbol Terminología Implementación Casos especiales Árboles binarios de búsqueda Montículos (heaps) 2 Concepto

Más detalles

Soluciones Ejercicios Tema 7. Cambio de Signo Pila (3/3) if (!p.esvacia()) { d i l cambiasignopila(p); this.apilar(new Integer(-dato));

Soluciones Ejercicios Tema 7. Cambio de Signo Pila (3/3) if (!p.esvacia()) { d i l cambiasignopila(p); this.apilar(new Integer(-dato)); Cambio de Signo Pila (1/3) Soluciones Ejercicios Tema 7 Germán Moltó Martínez gmolto@dsic.upv.es Estructuras de Datos y Algoritmos Escuela Técnica Superior de Ingeniería Informática Universidad Politécnica

Más detalles

Ejercicios Tema 7. que tenga los mismos datos que la Pila original pero. Diséñese un método que invierta recursivamente una Cola dada.

Ejercicios Tema 7. que tenga los mismos datos que la Pila original pero. Diséñese un método que invierta recursivamente una Cola dada. Ejercicios Tema 7 Ejercicios Adatados de Auntes y Exámenes de EDA Germán Moltó gmolto@dsic.uv.es Estructuras de Datos y Algoritmos Escuela Técnica Suerior de Ingeniería Informática Universidad Politécnica

Más detalles

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ESTRUCTURA 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: Escribe tu nombre y apellidos en esta hoja e inmediatamente en todas las suplementarias, incluso las de sucio. El no hacerlo puede suponer tu expulsión Puedes utilizar el lápiz

Más detalles

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

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos. Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos. Con relación a la Estructura LISTA Indicar objetos reales que se puedan modelar con dicha estructura. Listas de Ordenes de visitas

Más detalles

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Introducción Un árbol es una estructura no lineal en la que cada nodo puede apuntar a uno o varios nodos. A B C D E F G H I J K Clasificación con respecto a su relación: Nodo hijo: cualquiera de los nodos

Más detalles

Tema 10: Árbol binario de búsqueda

Tema 10: Árbol binario de búsqueda Tema 10: Árbol binario de búsqueda M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom (Prof. Edgardo A. Franco) 1 Contenido Árbol binario de

Más detalles

ELO320 Estructuras de Datos y Algoritmos. Listas. Tomás Arredondo Vidal

ELO320 Estructuras de Datos y Algoritmos. Listas. Tomás Arredondo Vidal ELO320 Estructuras de Datos y Algoritmos Listas Tomás Arredondo Vidal Este material está basado en: Robert Sedgewick, "Algorithms in C", (third edition), Addison-Wesley, ISBN 0-201-31663-3. 2001 material

Más detalles

directamente indirectamente

directamente indirectamente PUNTEROS EN C PUNTEROS Permiten simular el pasaje de parámetros por referencia. Permiten crear y manipular estructuras de datos dinámicas. Su manejo es de fundamental importancia para poder programar en

Más detalles

o Los arreglos son colecciones ordenadas de datos del mismo tipo. o Ejemplos: 2

o Los arreglos son colecciones ordenadas de datos del mismo tipo. o Ejemplos: 2 Arreglos en Java o Los arreglos son colecciones ordenadas de datos del mismo tipo. o Ejemplos: 3 27 50 4 Arreglo de bytes Arreglos con tipos primitivos hola Casa Auto No Arreglo de Strings EII147-01-02

Más detalles

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

1. Una pila funciona según el método LIFO (Last In First Out ). Se define la clase Pila de la siguiente forma: Facultad de Ingeniería Establecimiento Público de Educación Superior, adscrito al Departamento de Antioquia Lógica de Programación II Taller Nº 3: Pilas, colas y recursividad Período 02 de 2014 Profesor:

Más detalles

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática)

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática) Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática) Primera parte (50% nota del examen) Septiembre 2009 1) Se desea hacer un método con la cabecera que se muestra abajo que cree y retorne

Más detalles

Tema 3. Estructuras de control

Tema 3. Estructuras de control Tema 3. Estructuras de control 3.1. Secuencial 3.2. Selección 3.3. Repetición 2 Objetivos Objetivos del tema: Conocer y saber la utilidad de las tres estructuras de control (secuencial, alternativa y repetitiva)

Más detalles

Tema 4- Representación Enlazada

Tema 4- Representación Enlazada Tema 4- Representación Enlazada Tema 4: Representación Enlazada Índice general: 1. Representación Enlazada: Variables referencia Java como enlaces. 2. Listas Enlazadas Genéricas. Operaciones y costes.

Más detalles