|
|||||||
|
|
|
|||||
|
|
|||||||
Creación de la estructura
typedef struct
{
pListaNodo primero;
pListaNodo ultimo;
pListaNodo ventana;
int longitud;
} TLista ,*Lista;
Esta estructura nos permite administrar, una secuencia de nodos.
Esta estructura, nos permite manejar los nodos, a través de una variable
de tipo Lista.
Cada vez que se crea o eliminada un nodo, los campos
longitud, primero , ventana , último se tiene que actualizar.
CAMPOS
longitud : almacena el numero de elementos o nodos de la lista.
primero : guarda la dirección del primer nodo de la lista.
ventana : guarda la dirección del nodo visible o actual en un momento dado.
ultimo : guarda la dirección del último nodo de la lista.
CREAR LISTA ( Reservar memoria e inicializar los campos )
Lista inicLista( void )
{
Lista aux = NULL;
aux = (Lista) malloc(sizeof(TLista));
aux->primero = aux->ventana = aux->ultimo = NULL;
aux->longitud = 0;
return aux;
}
INSERTAR UN NODO A LA LISTA (a continuación de la ventana)
void anxLista( Lista lst , TipoL elem);
PASOS :
Crear un nuevo nodo pListaNodo, asignando al campo info, algún elemento de tipo TipoL entregado como parámetro e inicializando el campo sig en NULL.
pListaNodo nuevo = (pListaNodo) malloc( sizeof (struct ListaNodo) ); nuevo->info = elem; nuevo->sig = NULL;
A continuación actualizar los campos de la lista, para ubicar el nodo en forma
correcta.
Por defecto, el nuevo nodo pasa a ser ventana de la lista y la longitud de la misma
se incrementa en uno.
lst->ventana = nuevo; lst->longitud++;
Existen tres casos, para la inserción de un nodo :
1 ) Lista vacía
El nuevo nodo pasa a ser el primero y último de la lista
lst->primero = lst->ultimo = nuevo;
2 ) La ventana corresponde al ultimo nodo de la lista
Asignamos a ventana->sig el nuevo nodo , y este pasa a ser el útimo nodo de la lista.
lst->ventana->sig = lst->ultimo = nuevo;
3 ) La lista no es vacia y la ventana no corresponde al último nodo
Asignamos a nuevo->sig el nodo siguiente de la ventana y luego al campo a ventana->sig le asignamos el nodo nuevo.
nuevo->sig = lst->ventana->sig; lst->ventana->sig = nuevo;
V : ventana
S : ventana->sig
N : nuevo
Por lo tanto la función sería :
void anxLista( Lista lst , TipoL elem)
{
pListaNodo nuevo = (pListaNodo) malloc( sizeof (struct ListaNodo) );
nuevo->info = elem;
nuevo->sig = NULL;
if (lst->longitud == 0)
lst->primero = lst->ultimo = nuevo;
else if (lst->ventana == lst->ultimo)
{
lst->ventana->sig = lst->ultimo = nuevo;
}
else
{
nuevo->sig = lst->ventana->sig;
lst->ventana->sig = nuevo;
}
lst->ventana = nuevo;
lst->longitud++;
}