Você está na página 1de 10

INTRODUCCIN

La estructura de datos Lista. La cual es un tipo de estructura lineal


y dinmica de datos. Lineal debido a que a cada elemento le puede
seguir slo otro elemento, y dinmica porque se puede manejar la
memoria de manera flexible, sin necesidad de reservar espacio con
anticipacin.
El estudio de las estructuras de datos dinmicas. Al contrario que las
estructuras de datos estticas (arrays listas, vectores y tablas y
estructuras),

cuyo

tamao

en

memoria

permanece

inalterable

durante la ejecucin del programa, las estructuras de datos dinmicas


crecen y se contraen a medida que se ejecuta el programa.
La estructura de datos que se estudiar en este captulo es la lista
enlazada (ligada o encadenada, linked list): una coleccin de
elementos (denominados nodos) dispuestos uno a continuacin de
otro, cada uno de ellos conectado al siguiente por un enlace o
referencia.
Hay mtodos para insertar, buscar y borrar elementos en listas
enlazadas. De igual modo, se muestra el tipo abstracto de datos
(TAD) que representa las listas enlazadas.
Las listas enlazadas son estructuras muy flexibles y con numerosas
aplicaciones en el mundo de la programacin.

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)

Y an quedara espacio para almacenar otros 4 datos (el primer


espacio disponible es el nodo de ndice 2 y el ltimo el de ndice 8).
Codificacin del Nodo
class NodoLista {
int clave, sig;
NodoLista () {
clave = 0;
sig = 0;
}
}
Codificacin de la Lista
public class Lista {
final int NULL = 0, N = 9;
NodoLista [] matriz;
Lista () {
int i; matriz = new NodoLista [N];
for (i = 0; i < N-1; i++) {
matriz [i] = new NodoLista ();
matriz [i].sig = i + 1;
}
matriz [i] = new NodoLista ();
}
}
Utilizaremos la clase NodoLista para incluir los campos clave y sig. La
clase Lista contendr las constantes N (con valor 9, que representa el
nmero mximo de nodos de la lista + 1) y NULL (con valor 0, que
representa la posicin vaca, equivalente a null en las listas
enlazadas); adems incluye la variable miembro matriz (que es un
vector de elementos de la clase NodoLista), que contiene la lista
vaca. A continuacin desarrollaremos los mtodos de objeto de la
clase Lista.
Bsqueda.
Para realizar la bsqueda de una clave, recorreremos la matriz
siguiendo los enlaces hasta encontrar una clave mayor o igual que la
buscada, o bien llegar hasta el final de la lista. Se desarrollan dos
mtodos: bsqueda (int dato), que si la lista no est vaca, invoca a

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):

si la lista est llena (la lista de huecos estara vaca: matriz


[0].sig == NULL), en cuyo caso se producira un mensaje de

error,
bien si la lista est vaca vaca (comprobando si matriz [0].clave
!= 0), en dicho caso se inserta directamente el elemento

utilizando el mtodo auxiliar inser,


en cualquier otro caso, se llama a un mtodo auxiliar esttico
privado (insertar (int pos, int ant, int dato)), que recorre la lista
hasta localizar la posicin en la que se debe insertar un nuevo
elemento (y volveramos a llamar al mtodo auxiliar inser).

Codificacin de insertar un dato


public void insertar (int dato) {

if (matriz [0].sig != NULL) {


int pos = matriz [0].clave;
if (pos != 0)
insertar (matriz [0].clave, 0, dato);
else inser (0, 0, dato);
}
else System.out.println ("lista llena");
}
private void insertar (int pos, int ant, int dato) {
if (matriz [pos].clave < dato)
if (matriz [pos].sig != 0)
insertar (matriz [pos].sig, pos, dato);
else inser (0, pos, dato);
else if (matriz [pos].clave > dato)
inser (pos, ant, dato);
else System.out.println ("la clave ya existe");
}
private void inser (int pos, int ant, int dato) {
int nuevo = matriz [0].sig;
matriz [0].sig = matriz [nuevo].sig;
matriz [nuevo].clave = dato;
if (ant != 0) {
matriz [nuevo].sig = pos;
matriz [ant].sig = nuevo;
}
else {
int sig = matriz [0].clave;
matriz [0].clave = nuevo;
if (pos == 0)
matriz [nuevo].sig = 0;
else matriz [nuevo].sig = sig;
}
}
Eliminacin.
Para realizar la eliminacin de un elemento, se ha optado por hacer
un mtodo iterativo. Primero se verifica si la lista est vaca, y en caso
contrario, se recorre la lista hasta encontrar la clave buscada
(desenganchando el elemento de la lista de claves, y enlazndolo en
la lista de huecos), o bien una clave mayor que la buscada (en cuyo
caso se producir un mensaje de error)
Codificacin de eliminar un dato
public void eliminar (int d) {

int ant, pos, posAnt = 0;


if (matriz [0].clave != NULL) {
pos = matriz [0].clave;
ant = matriz [pos].clave;
while (ant < d) {
posAnt = pos;
pos = matriz [pos].sig;
ant = matriz [pos].clave;
}
if (ant == d) {
if (pos == matriz [0].clave)
matriz [0].clave = matriz [pos].sig;
else matriz [posAnt].sig = matriz[pos].sig;
matriz [pos].sig = matriz [0].sig;
matriz [0].sig = pos;
}
else System.out.println ("la clave no existe");
}
else System.out.println ("Error. La lista est vaca");
}
Recorrido completo.
Por ejemplo, utilizando la anterior estructura, podramos realizar un
recorrido completo (escribir el contenido de una lista enlazada sobre
matriz) con el siguiente mtodo esttico:
Codificacin escribirLista
static void escribirLista (Lista lista) {
int i = lista.matriz [0].clave;
while (i != 0) {
System.out.print (lista.matriz [i].clave+" ");
i = lista.matriz [i].sig;
}
System.out.println (FIN);
}

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:

El nmero mximo de elementos que se define a priori:


constante N.
El nmero actual de elementos de la lista: variable numNodos.
Modelo:

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.

METODOLOGA / DISEO DE INVESTIGACIN


Para el diseo de esta investigacin utilice la herramienta de
bsqueda de Google, al cual podemos acceder a libros digitales y
aportes cientficos para obtener una investigacin confiable y precisa.
La cual nos permiti entender de cmo funcionan las lista enlazadas
sobre una matriz y su implementacin.

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.

3. Qu se me hizo ms fcil resolver en este trabajo?


Determinar la definicin de una lista enlazada sobre una matriz
4. Cmo te ayud este trabajo a aprender algo nuevo o a
reforzar conocimientos anteriores?
Por medio de esta investigacin de las listas enlazadas sobre una
matriz aprend a manejar correctamente los arreglos.
5. Puedes describir algunas relaciones entre este trabajo,
otras asignaturas que estas estudiando y la vida real?
Nos ayuda al momento de crear una aplicacin en algunas
asignaturas
6. Qu no he logrado comprender?
Implementacin de las listas enlazadas sobre una matriz
7. Qu debo mejorar?
En la manera en que busco la informacin.

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

Você também pode gostar