Está en la página 1de 12

Una lista es una estructura de datos homogénea y

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.

También podría gustarte