Sei sulla pagina 1di 12

Estructura de Datos

UNEDS

Modalidad de Estudios Semipresencial

LISTAS ENLAZADAS

TUTOR: Ing. Oswaldo Basurto G. Msc


Por: Ing. Oswaldo
Basurto G.

Estructura de Datos

Estructuras Dinmicas de Datos


Las estructuras dinmicas nos permiten crear estructuras de datos que se adapten a las
necesidades reales a las que suelen enfrentarse nuestros programas.
Las estructuras de datos estn compuestas de otras pequeas estructuras a las que
llamaremos nodos o elementos, que agrupan los datos con los que trabajar nuestro programa
y adems uno o ms punteros autoreferenciales, es decir, punteros a objetos del mismo tipo.
Dentro de los datos de este tipo podemos hablar de:

Listas.
Pilas.
Colas
rboles.
Grafos

Por: Ing. Oswaldo


Basurto G.

Estructura de Datos

Listas Enlazadas
Una lista lineal enlazada es un conjunto de elementos u objetos de cualquier tipo,
originariamente vaca que, durante la ejecucin del programa va creciendo o
decreciendo elemento a elemento segn las necesidades previstas.
En una lista lineal cada elemento apunta al siguiente, es decir, cada nodo tiene
informacin de dnde est el siguiente. Por este motivo tambin se le llama lista
enlazada.

Por: Ing. Oswaldo


Basurto G.

Estructura de Datos

Listas Enlazadas
La forma ms simple de estructura dinmica es la lista simplemente enlazada o lista
abierta.
Cada elemento (nodo) slo dispone de un puntero, que apuntar al siguiente elemento de la
lista o valdr NULL si es el ltimo elemento. Slo se pueden recorrer hacia delante.
En esta forma los nodos se organizan de modo que cada uno apunta al siguiente, y el ltimo
no apunta a nada, es decir, el puntero del nodo siguiente vale NULL.
Para crear un alista debemos definir la clase de elementos que van a formar parte de la
misma. Un tipo de dato genrico podra ser:
struct nodo{
int dato;
struct nodo *sig;
};

Por: Ing. Oswaldo


Basurto G.

Estructura de Datos

Listas Enlazadas
Cuando el puntero que usamos para acceder a la lista vale NULL, diremos que la lista est
vaca:
*pNodo = NULL;

/* lista vaca */

Inicialmente *sig apunta a NULL.


Lo representamos grficamente en la forma:

Por: Ing. Oswaldo


Basurto G.

Estructura de Datos

Listas Enlazadas
Cuando el puntero que usamos para acceder a la lista vale NULL, diremos que la lista est
vaca:
*pNodo = NULL;

/* lista vaca */

Inicialmente *sig apunta a NULL.


Lo representamos grficamente en la forma:

Por: Ing. Oswaldo


Basurto G.

Estructura de Datos

Listas Enlazadas
Operaciones bsicas con listas:
Con las listas se pueden realizar las siguientes operaciones bsicas:
a)
b)
c)
d)
e)
f)

Crear lista
Aadir o insertar elementos
Buscar o localizar elementos.
Borrar elementos.
Moverse a travs de una lista.
Ordenar una lista.

Cada una de estas operaciones tendr varios casos especiales, por ejemplo, no
ser lo mismo insertar un nodo en una lista vaca, o al principio de una lista no
vaca, o al final, o en una posicin intermedia.

Por: Ing. Oswaldo


Basurto G.

Estructura de Datos

Listas Enlazadas
a) Crear Lista.
Si queremos crear una lista, podemos emplear la tcnica de reservar memoria dinmicamente. Para ello escribimos una
funcin llamada insertar:
La funcin principal tomar la forma:
void main(void)
{
struct elemento *p; //puntero a un nodo
c = NULL; /* lista vaca */
/* Reserva dinmica de memoria */
p = nuevo_elemento();
/* p apunta al nodo recin creado */
p->sig = NULL; /* fin de lista */
/* operaciones. . */
/* Liberacin de memoria reservada */
delete (p) /* en compilador de C++ */
/* free(p); en el compilador de C */
}
Por: Ing. Oswaldo
Basurto G.

Estructura de Datos

Listas Enlazadas

b) Aadir o insertar elementos en una lista enlazada:


Veremos primero los casos sencillos y finalmente construiremos un algoritmo genrico para la insercin de
elementos en una lista.
Insertar un elemento en una lista vaca:
Este es el caso ms sencillo. Equivale a crear una lista, como en el caso a). Partiremos de que ya
tenemos el nodo a insertar (creado en la llamada a la funcin nuevo_elemento() y, por supuesto un
puntero que apunte a l, adems el puntero a la lista valdr NULL:
El proceso es muy simple, bastar con que:
nodo->sig apunte a NULL
Lista apunte a nodo

Por: Ing. Oswaldo


Basurto G.

Estructura de Datos

Listas Enlazadas

b) Aadir o insertar elementos en una lista enlazada:


Veremos primero los casos sencillos y finalmente construiremos un algoritmo genrico para la insercin de
elementos en una lista.
Insertar un elemento en una lista vaca:
Este es el caso ms sencillo. Equivale a crear una lista, como en el caso a). Partiremos de que ya
tenemos el nodo a insertar (creado en la llamada a la funcin nuevo_elemento() y, por supuesto un
puntero que apunte a l, adems el puntero a la lista valdr NULL:
El proceso es muy simple, bastar con que:
nodo->sig apunte a NULL
Lista apunte a nodo

Por: Ing. Oswaldo


Basurto G.

10

Estructura de Datos

Listas Enlazadas
Insertar un elemento en la primera posicin de una lista:
Podemos considerar el caso anterior como un caso particular de ste, la nica diferencia es que en el
caso anterior la lista es una lista vaca, pero siempre podemos, y debemos considerar una lista vaca
como una lista.
Por tanto, ahora la lista ya existe.
De nuevo partiremos de un nodo a insertar, con un puntero que apunte a l ( p ), y de una lista, en este
caso no vaca, apuntada por cabeza o lista:
El proceso es el siguiente:
1.
2.

Hacemos que nodo->sig apunte a Lista


Hacemos que Lista apunte a nodo

Por: Ing. Oswaldo


Basurto G.

11

Estructura de Datos

Listas Enlazadas
Insertar un elemento en la primera posicin de una lista:
Podemos considerar el caso anterior como un caso particular de ste, la nica diferencia es que en el
caso anterior la lista es una lista vaca, pero siempre podemos, y debemos considerar una lista vaca
como una lista.
Por tanto, ahora la lista ya existe.
De nuevo partiremos de un nodo a insertar, con un puntero que apunte a l ( p ), y de una lista, en este
caso no vaca, apuntada por cabeza o lista:
El proceso es el siguiente:
1.
2.

Hacemos que nodo->sig apunte a Lista


Hacemos que Lista apunte a nodo

Por: Ing. Oswaldo


Basurto G.

12

Potrebbero piacerti anche