Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Maracaibo-Estado-Zulia
M
Listas
Enlazadas
Estructura
De Datos
do
2 Corte
mer
Profesora: ING. IVETT KOOL
Ciudad: SAN CRISTOBAL
Extensión sede o ampliación:
1 10% Alumno: JESÚS MARQUINA
Cedula: 24.253.109
Teléfono: 0412-651-05-35
Correo: jesus.armando.marquina@gmail.com
PSM SAN CRISTOBAL
INTRODUCCION
Hasta este punto se han visto las estructuras de datos presentadas por Arreglos, Pilas y Colas,
éstas son denominadas estructuras estáticas, porque durante la compilación se les asigna un
espacio de memoria, y éste permanece inalterable durante la ejecución del programa.
Una de las principales ventajas de manejar un tipo dinámico es que se pueden obtener posiciones
de memoria a medida que se va trabajando con el programa, y éstas se liberan cuando ya no se
requiere, de ese modo se crea una estructura más dinámica que cambia dependiendo de la
necesidad, según se agreguen o eliminen elementos.
Lo anterior solucionaría en gran manera el manejo de los espacios en memoria, necesarios para la
solución de problemas y así optimizar el uso de los recursos del sistema, es importante destacar que
las estructuras dinámicas no pueden reemplazar a los arreglos en todas sus aplicaciones. Hay casos
numerosos que podrían ser solucionados, de modo fácil, aplicando arreglos, en tanto que si se
utilizaran estructuras dinámicas, como las listas, la solución de tales problemas se complicaría.
INDICE
Listas enlazadas
Tipos de listas
La diferencia fundamental está en el nodo que se utiliza para llevar a cabo la implementación.
Una lista almacenará un puntero (referencia) al primer elemento de la lista el cual se le puede
llamar (top, cabeza, inicio).
La posición actual se representa como un puntero (referencia) a un nodo de la lista.
Un nodo está compuesto por dos partes principales las cuales son el campo dato y el campo
referencia al siguiente nodo de la lista.
class Nodo {
int dato;
Nodo liga;
public Nodo()
{
dato=0;
sig=null;
}
public Nodo (int elem)
{
dato = elem;
sig = null;
}
}
Creación de un nodo.
Implementación.
Para crear la lista se puede hacer que las inserciones se han por donde esta posicionado el
apuntador inicio en la lista como se muestra a continuación:
Para desplegar la lista basta con posicionar un apuntador al inicio de la lista e ir recorriendo nodo
por nodo hasta llegar a final como lo podemos ver en el siguiente algoritmo:
Para quitar un nodo de la lista es necesario primeramente localizar el dato que se desea
eliminar.
Posteriormente se actualiza el campo sig del nodo anterior (Q) para que podamos entonces
eliminar el nodo. Como lo podemos ver a continuación suponer que el dato a eliminar es el 4.
Algoritmo de eliminación
Procedimiento eliminar(info)
sw <- false
si inicio != null entonces
p <- inicio
mientras p!=null haz
si p(dato) = info entonces
sw <- true
si p = inicio entonces
inicio<- inicio(liga)
en caso contrario
si p=final entonces
final=q;
q(liga) <- p(liga)
p(liga) <- null
p <- null
en caso contrario
q <- p
p <- p(liga)
en caso contrario
mensaje( 'no hay lista')
si not sw entonces
mensaje('no existe información')
en caso contrario
mensaje('información borrada')
Algoritmo que cuenta el número de nodos de una L.S.E.L.
Se desea saber el número de nodos con que cuenta la lista, para esto suponer que tenemos la
siguiente lista:
Lo primero que tenemos que realizar es colocar un apuntador al primer nodo de la lista y también
inicializar un contador en cero, posteriormente ir recorriendo la lista, e ir incrementando el contador
en uno por cada movimiento que tenga el apuntador, este recorrido termina hasta que el apuntador
sea igual a null.
Se desea desplegar el contenido de la lista en forma inversa esto quiere decir que se debe de
recorrer la lista de derecha a izquierda. El algoritmo seria:
Listas Circulares
Las listas circulares se desprenden de las listas descritas anteriormente, con respecto al manejo y
a su creación son casi iguales.
Una lista circular tiene la característica que su último nodo tiene la dirección del primer nodo de la
lista, a diferencia de la lista lineal, en donde el último nodo de la lista apunta a null. Gráficamente una
lista circular se puede representar de la siguiente manera:
Las operaciones básicas con las listas circulares, son las que se llevan a cabo en cualquier
variable, las cuales son:
Creación.
Inserción.
Eliminación.
Desplegar
Ordenar
lis.Inicio = lis.ult = q;
else
{
lis.ult.liga= q;
lis.ult = q;
}
q.sig = lis.Inicio;
}
Se desea insertar el nodo con el dato 6 que se encuentra con líneas azules en la lista después del
nodo cuya información es 3, el algoritmo seria:
Otra situación diferente a la anterior, es la de insertar el nodo antes del nodo cuya información es
3, como se muestra a continuación:
public void InsertarAntes(ref ListaCirc Lis, int X, int dato)
{
Nodo p = null, q = null, r = null;
if (Lis.Inicio != null)
{
p = Lis.Inicio;
do
{
if (p.dato == X)
{
q = new Nodo(dato);
q.liga = p;
if (p == Lis.Inicio)
{
Lis.Inicio = q;
Lis.ult.liga = Lis.Inicio;
p.liga = q;
}
else
r.liga = q;
p = Lis.Inicio;
}
else
{
r = p;
p = p.liga;
}
} while (p != Lis.Inicio);
}
}
El cual se desea eliminar el nodo cuya información sea 1. La lista nos quedaría de la siguiente
manera:
El algoritmo que realiza la tarea de eliminar el nodo con x datos seria:
Procedimiento eliminar(entero x)
si inicio != null entonces
p <- inicio;
sw <- false
haz
si p(dato) = x entonces
sw <- verdadero
si p = inicio entonces
si inicio(liga) = inicio entonces
inicio<- nil
en caso contrario
ult(liga) <- inicio(liga)
inicio<- inicio(liga)
en caso contrario
q(liga) <- p(liga)
si ult=p entonces
ult=q
p->liga <- null
p <- inicio
en caso contrario
q <- p
p <- p(liga)
mientras p != inicio
si sw entonces
mensaje(´nodo borrado´)
en caso contrario
mensaje(´no existe información ´)
en caso contrario
mensaje(´no existe lista´)
Escalera mecánica
Problema de tiempo compartido utilizado por el planificador durante la programación de los
procesos en el sistema operativo.
Juego de mesa para múltiples jugadores
Las listas doblemente encadenadas, tienen las característica de que dado un apuntador p
posicionado en cualquier nodo que forme parte de la lista, esta puede ser examinada en ambos
sentidos, esto es de adelante hacia atrás y de atrás hacia adelante. Un nodo en una lista doblemente
encadenada tiene dos apuntadores, uno hacia el nodo siguiente y otro hacia el nodo anterior, como
lo podemos apreciar a continuación:
Tipos de L.D.E.
Circulares
Lineales.
Las listas simplemente enlazadas, son posiblemente las estructuras de datos más fáciles, rápidas y
sencillas de estudiar, aprender y entender. La resolución de una función relacionada con listas
simplemente enlazadas, es fácil y rápida, en especial porque no se requieren demasiadas líneas de
código, por ende la solución es inmediata.
Las listas simplemente enlazadas, así como también otro tipo de estructuras similares, son útiles a
la hora de trabajar problemas como PILAS y COLAS, ya que se maneja la misma lógica de agregar,
borrar o buscar elementos. Algunos ejemplos pueden ser la fila para el cine o un banco, en donde tal
vez se necesite de estas tres funciones principales de listas simplemente enlazadas, para registrar
quien es el primero de la lista, el último, el tiempo que lleva en espera, etc.
A pesar, de que podríamos trabajar con árboles y/o grafos, cuando se trata de listas simplemente
enlazadas, lo más probable es que tanto nuestro árbol, como nuestro grafo, adquieran una
característica lineal.