Documentos de Académico
Documentos de Profesional
Documentos de Cultura
A.J.M.Checa<ajmoreno@ull.es>
February 5, 2008
IMPORTANTE:
La Prctica planteada en la ltima seccin de estos apuntes supone un 50% de la nota final.
Ser entregada y explicada en una de las dos convocatorias de febrero de 2008.
Introduccin
Las listas enlazadas son elementos del mismo tipo enlazados mediante una direccin a la que
llamaremos nodo. En nuestro caso, los elementos sern estructuras y los nodos punteros al
mismo tipo de estructura. En la figura 1 se representa el primer elemento de una lista, al que
Es importante recordar que estos nombre se refieren a direcciones asignadas mediante la funcin malloc a las
estructuras que formarn la lista enlazadas.
Una lista es simplemente enlazada cuando cada elemento posee un nico nodo que enlaza con
el siguiente elemento.
En primer lugar, antes de enlazar el primero con el segundo, hemos de tener ambos: como
Sin embargo nosotros seguiremos utilizando el puntero act, pues como veremos a continuacin, resulta muy til para generar una lista.
La sentencia
act = act -> sig;
es para actualizar el elemento actual. No se pierde ninguna informacin, ya que los nodos se
van guardando en elementos anteriores. Por otra parte, este bucle se realiza N 1 veces, pues
ya tenemos el primer elemento ini.
El cdigo completo lo resumimos en el siguiente cuadro mediante la declaracin de una determinada estructura con un nico campo;
#include <stdlib.h>
struct lista{
int n;
struct lista *sig;
} *ini,*act;
main(){
int i;
ini = (struct *lista) malloc(sizeof(struct lista));
act=ini;
for(i=0 , i<N-1, i++)
{
act -> sig = (struct *lista) malloc(sizeof(struct lista));
act = act -> sig;
}
act -> sig = NULL;
return 0;
}
El ltimo comando
act -> sig = NULL;
es til para cerrar la lista, o lo que es lo mismo, para saber cual es el ltimo elemento.
2.1
Ejercicio
Decimos que una lista est doblemente enlazada cuando cada elemento posee dos nodos, uno
que contiene la direccin del siguiente elemento y otro que contiene la direccin del elemento
anterior.
struct lista{
int n;
struct lista *sig, *ant;
} *ini,*act,*ult;
La estructura anterior puede utilizarse para crear la lista enlazada de la figura 5.En este caso
particular la lista se dice que es circular, pues el ltimo elemento de la lista ult contiene la direccin del primero ini, y a su vez el primero se enlaza con ult, y como es circular, hemos de
= NULL;
act=ini;
for(i=0 ;
{
act ->
(act ->
act =
}
i<N-1; i++)
sig
= (struct *lista) malloc(sizeof(struct lista));
sig) -> ant = act;
act -> sig ;
Estas notas solo son indicativas respecto a la insercin o extraccin de elementos de una lista
doblemente enlazada. No tiene en cuenta como hacerlo si se trata del primer o ltimo elemento. Esta tarea ha de ser desarrollada por el alumno como parte de la prctica que se detalla
en la introduccin.
la siguiente funcin permite aadir un elemento en una lista ordenada por el campo n,
struct lista{
int n;
struct lista *sig, *ant;
} *ini,*act,*new;
return;
}
act=act->sig;
}
return;
}
}
La sentencia while(act! = N U LL) es vlida para una lista que no se circular, pues el ltimo
elemento de la lista es el nico con direccin nula.
la siguiente funcin permite aadir un elemento en una lista ordenada por el campo n,
Prctica
Escriba un programa en C para crear un lista circular doblemente enlazada con dos opciones2
a. Eliminar un determinado elemento de la lista.
b. Aadir un nuevo elemento.