Listas Enlazadas
Listas Enlazadas
Listas Enlazadas
cuyo
tamao
en
memoria
permanece
inalterable
MARCO TERICO
LISTAS ENLAZADA SOBRE MATRIZ
Las listas enlazadas poseen muchas ventajas sobre los arrays. Los
elementos se pueden insertar en una lista indefinidamente mientras
que un array tarde o temprano se llenar o necesitar ser
redimensionado, una costosa operacin que incluso puede no ser
posible si la memoria se encuentra fragmentada.
En algunos casos se pueden lograr ahorros de memoria almacenando
la misma cola de elementos entre dos o ms listas es decir, la lista
acaban en la misma secuencia de elementos. De este modo, uno
puede aadir nuevos elementos al frente de la lista manteniendo una
referencia tanto al nuevo como a los viejos elementos - un ejemplo
simple de una estructura de datos persistente.
Por otra parte, los arrays permiten acceso aleatorio mientras que las
listas enlazadas slo permiten acceso secuencial a los elementos. Las
listas enlazadas simples, de hecho, solo pueden ser recorridas en una
direccin. Esto hace que las listas sean inadecuadas para aquellos
casos en los que es til buscar unos elementos por su ndice
rpidamente, como el heapsort. El acceso secuencial en los arrays
tambin es ms rpido que en las listas enlazadas.
Otra desventaja de las listas enlazadas es el almacenamiento extra
necesario para las referencias, que a menudos las hacen poco
prcticas para listas de pequeos datos como caracteres o valores
booleanos.
Tambin puede resultar lento y abusivo el asignar memoria para cada
nuevo elemento. Existe una variedad de listas enlazadas que
contemplan los problemas anteriores para resolver los mismos. Un
buen ejemplo que muestra los pros y contras del uso de arrays sobre
listas enlazadas es la implementacin de un programa que resuelva el
problema de Josephus. Este problema consiste en un grupo de
personas dispuestas en forma de crculo. Se empieza a partir de una
persona predeterminadas y se cuenta n veces, la persona n-sima se
saca del crculo y se vuelve a cerrar el grupo. Este proceso se repite
hasta que queda una sola persona, que es la que gana. Este ejemplo
muestra las fuerzas y debilidades de las listas enlazadas frente a los
arrays, ya que viendo a la gente como nodos conectados entre s en
una lista circular se observa como es ms fcil suprimir estos nodos.
Sin embargo, se ve como la lista perder utilidad cuando haya que
encontrar a la siguiente persona a borrar. Por otro lado, en un array el
suprimir los nodos ser costoso ya que no se puede quitar un
elemento sin reorganizar el resto. Pero en la bsqueda de la n-sima
persona tan slo basta con indicar el ndice n para acceder a l
resultando mucho ms eficiente.
Su interpretacin es la siguiente:
Las claves de la lista se representan en el primero de los
campos.
El primer elemento del vector (ndice 0) es especial. Su primer
campo hace referencia al primer nodo de la lista (el que ocupa
el primer campo de la posicin 1, es decir 10) y el segundo la
posicin del primer hueco (ndice 2 cuyo contenido 77 es
irrelevante).
El segundo campo de cada nodo indica la posicin (ndice) del
nodo que le sigue, salvo que se trate de un cero que indicara el
final de la lista de nodos.
El segundo campo de cada hueco indicara la posicin del
siguiente hueco, salvo que se trate de un cero que indicara el
final de la lista de huecos.
As pues, la estructura definida, permitira almacenar hasta 8
elementos en la lista (ndices 1 a 8). En la situacin actual
almacenara la secuencia de datos de la figura: 10, 12, 13 y 21
(ndices 1, 3, 7 y 5, respectivamente)
otro auxiliar recursivo privado (buscar (int pos, int dato) pasndole
como argumento la posicin del primer elemento de la lista. El
mtodo buscar se encarga de localizar si el elemento aparece en la
matriz o no:
Codificacin de bsqueda
public boolean busqueda (int dato) {
boolean resul = false;
int pos = matriz [0].clave;
if (pos != 0)
resul = buscar (pos, dato);
return resul;
}
private boolean buscar (int pos, int dato) {
boolean resul = false;
if (matriz [pos].clave < dato) {
if (matriz [pos].sig != 0)
resul = buscar (matriz [pos].sig, dato);
}
else if (matriz [pos].clave == dato)
resul = true;
return resul;
}
Insercin.
Para realizar la insercin en una lista calificada ordenada enlazada
sobre matriz, primero se comprueba en el mtodo insertar (int dato):
error,
bien si la lista est vaca vaca (comprobando si matriz [0].clave
!= 0), en dicho caso se inserta directamente el elemento
SOLUCIN O RESULTADOS
Listas enlazadas sobre una matriz
El soporte fsico de la lista es una matriz.
Los elementos de la lista ocupan posiciones contiguas al
principio de la matriz (el resto, si existe, es basura).
Se requieren, aparte del propio contenido de la lista, dos
informaciones:
CRITERIOS PERSONALES
1. Qu lo llev a considerar estas respuestas cmo vlida, en
qu se fundamenta?
En libros y aportes cientficos de programacin
2. Qu problemas se presentaron al momento de elaborar la
solucin?
Que no haba suficiente informacin del tema.
Conclusiones
Por medio de este trabajo comprend el funcionamiento de una lista
enlazada sobre una matriz y su implementacin, la cual facilita el uso
de variables de tipo puntero permite crear y destruir variables
referenciadas dinmicamente. Los arrays permiten acceso aleatorio
mientras que las listas enlazadas slo permiten acceso secuencial a
los elementos.
Recomendaciones
Tener en claro cul son las operaciones principales de las listas
enlazadas sobre una matriz.
Tener conocimiento sobre el desarrollo de algoritmos de las
listas
Tener cuidado al momento de implementarlo para no perder los
enlaces de esta lista.
Bibliografa
http://www.slideshare.net/LissJP/savedfiles?s_title=teoria-de-listas10104932&user_login=BorisSalleg
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/
http://ocw.upm.es/lenguajes-y-sistemas-informaticos/estructuras-dedatos/contenidos/tema3nuevo/Listas.pdf
Universidad Politcnica de Madrid