dinámica, que va a estar formada por una secuencia de
elementos, donde cada uno de ellos va seguido de otro o de ninguno.
Homogénea: Todos los elementos que la forman tienen
el mismo tipo base.
Dinámica: Puede crecer o decrecer en tiempo de
ejecución según nuestras necesidades. m ! lista densa: la propia estructura determina cuál es el siguiente elemento de la lista. Ejemplo: un array.
m ! lista enlazada: la posición del siguiente elemento de la
estructura la determina el elemento actual. Es necesario almacenar al menos la posición de memoria del primer elemento. Además es dinámica, es decir, su tamaño cambia durante la ejecución del programa.
m Una lista enlazada se puede definir recursivamente de la
siguiente manera: m ! una lista enlazada es una estructura vacía o ! un elemento de información y un enlace hacia una lista (un nodo). m °ráficamente se suele representar así:
m Como se ha dicho anteriormente, pueden cambiar de
tamaño, pero su ventaja fundamental es que son flexibles a la hora de reorganizar sus elementos; a cambio se ha de pagar una mayor lentitud a la hora de acceder a cualquier elemento. m - Inserción al comienzo de una lista: m - Recorrido de una lista. has listas ordenadas son aquellas en las que la posición de cada elemento depende de su contenido.
Por ejemplo, podemos tener una lista enlazada que contenga
el nombre y apellidos de un alumno y queremos que los elementos !los alumnos! estén en la lista en orden alfabético. has listas reorganizables son aquellas en las que cada vez que se accede a un elemento éste se coloca al comienzo de la lista. Si el elemento al que se accede no está en la lista entonces se añade al comienzo de la misma. Cuando se trata de borrar un elemento se procede de la misma manera que en la operación de borrado de la lista ordenada. Notar que el orden en una lista reorganizable depende del acceso a un elemento, y no de los valores de las claves. has listas enlazadas poseen muchas ventajas sobre los arrays. hos elementos se pueden insertar en una lista indefinidamentes mientras que un array tarde o temprano se llenará ó necesitará ser redimensionado, una costosa operación que incluso puede no ser posible si la memoria se encuentra fragmentada. Por otra parte, los arrays permiten acceso aleatorio mientras que las listas enlazadas sólo permiten acceso secuencial a los elementos. has listas enlazadas simples, de hecho, solo pueden ser recorridas en una dirección. Esto hace que las listas sean inadecuadas para aquellos casos en los que es útil buscar un elementos por su índice rápidamente, como el heapsort. El acceso secuencial en los arrays también es más rápido que en las listas enlazadas. ërray Lista Enlazada Indexado O(1) O(6) Inserción / Eliminación al O(1) O(1) or O(6)[2] final Inserción / Eliminación en O(6) O(1) la mitad Persistencia No Simples sí Localización Buena Mala Podemos distinguir dos tipos de recursividad:
Directa: Cuando un subprograma se llama a si mismo una o
mas veces directamente.
Indirecta: Cuando se definen una serie de subprogramas
usándose unos a otros. Un requisito importante para que sea correcto un algoritmo recursivo es que no genere una secuencia infinita de llamadas así mismo. Claro que cualquier algoritmo que genere tal secuencia no termina nunca. Una función recursiva f debe definirse en términos que no impliquen a f al menos en un argumento o grupo de argumentos. Debe existir una ´salidaµ de la secuencia de llamadas recursivas.