Documentos de Académico
Documentos de Profesional
Documentos de Cultura
inf apuntador
primero
aux
aux = primero
aux = aux --> siguiente
aux --> dato = 10
aux --> siguiente = NULL
primero
6 10
y asi se pueden ir agregando elementos a una lista simplemente enlazada. Se debe notar que
la cabecera de lista permanece fija en la parte izquierda de la lista.
primero
6 10 10
aux aux
Se va a crear ahora una lista simplemente enlazada insertando elementos por la parte izquierda,
que es la forma en la que se procederá en adelante.
11 8
primero
11 8
aux
De forma similar, se puede ir insertando más elementos por la izquierda empleando una
variable auxiliar.
primero
10 11 8
aux
primero
10 11 8
aux
primero
7 10 11 8
aux
Ahora se va a insertar un elemento al final de la lista. En tal situación , se debe recorrer la lista
desde la cabecera hasta el final de la misma, empleando una variable auxiliar, esto es;
primero
7 10 11 8 11
aux r
aux = primero
aux = aux -- > siguiente
primero
7 10 11 8 11
r --> dato = 11
r --> siguiente = NULL
aux --> siguiente = r
primero
7 10 11 8 11
aux r
Ahora se insertará un elemento en medio de la lista, después de un elemento dado, para ello
se buscará el elemento en la lista después del cual se quiere insertar un nuevo elemento.
primero
10 3 6 8
aux
11
Primero aux
10 3 6 8
aux
11
De esta forma, una vez hubicado el elemento, se procede a modificar los enlaces a fin de que el
nuevo elemento este en la lista.
r --> dato = 2
r --> siguiente = aux --> siguiente
aux --> siguiente = r
primero aux
10 3 6 8
Se recorre toda la lista desde la cabecera hasta llegar al último elemento de la lista, empleando
dos apuntadores; en este caso, en el algoritmo, el apuntador r siempre toma la dirección del
apuntador aux.
Lista r
10 3 6 8
aux aux
Lista r
10 3 6 8
aux aux
aux = Lista
Lista
8 4
aux
Lista r aux
11 8 4 6
aux
En este caso, r --> siguiente toma la dirección a la que apunta actualmente aux, y de esa
forma se ha eliminado el elemento de interés.
11 8 4 6
aux aux
primero ultimo
primero = aux
se recorre el apuntador cabecera de la lista, y la inserción del segundo elemento queda así,
como se refleja en el código anterior.
primero primero
8 4
aux ultimo
primero ultimo
10 8 4
aux
primero ultimo
10 8 4
primero ultimo
10 8 4
aux
se continua insertando elementos de lista, uno a la vez, y la lista queda así con cuatro
elementos, por ejemplo.
primero ultimo
11 10 8 4
se quiere ahora insertar un elemento en medio de la lista doble. Mediante el apuntador aux
se identifica el elemento después del cual se quiere insertar uno nuevo.
primero ultimo
11 10 8 4
aux
6
11 10 8 4
11 10 8 4
finalmente, r--> siguiente --> anterior debe apuntar al mismo r, y de esa forma el nuevo
elemento esta ahora en la lista.
11 10 8 4
if(aux-->anterior != NULL)
primero ultimo
11 10 8 4
aux
11 10 8 4
aux
primero ultimo
11 10 8 4
11 10 8 4
primero r ultimo
11 10 8 4
aux
primero r ultimo
11 10 8 4
aux
primero r ultimo
11 10 8 4
aux
Lista
Lista
Lista
8 8
aux
Así que, aux --> siguiente apuntará a Lista --> siguiente y Lista --> siguiente apuntará a aux
Lista
8 8
Lista
8 8
aux
Lista
8 8
Aux
y Lista --> anterior apuntará a aux y finalmente se recorre el apuntador Lista, lo cual
señala el último elemento que entró a la estructura.
Lista
8 8
aux
Lista
11 10 8 4
Eliminar o insertar un elemento en una lista circular, es similar a insertar o eliminar un elemento
en medio en una lista doblemente enlazada. Se sugiere revisar el procedimiento que inserta o
elimina un elemento en medio de una lista doblemente enlazada, para insertar o eliminar en una
lista circular doblemente enlazada.
# include <iostream.h>
class Nodo{
private: int dato;
Nodo * siguiente;
public: Nodo(){
dato = 0;
siguiente = NULL;
class Lista
private: Nodo primero; // cabecera de lista
public: Lista(){
primero = NULL; // se crea una lista vacía
}
void creaLista(int );
Nodo *Bucar(int );
void insertaEnmedio(Nodo *, int);
void insertaUltimo(int );
void eliminaUltimo();
void eliminaEnmedio(int );
void Listar();
};
if(primero == NULL){
primero = new Nodo;
primero -> dato = x;
primero -> siguiente = NULL;
}
else{
aux -> dato = x;
class Lista
private: Nodo *primero, *ultimo; // cabeceras de lista
public: Lista(){
primero = NULL; // se crea una lista vacía
ultimo = NULL;
}
void creaLista(int );
Nodo *Bucar(int );
void insertaEnmedio(Nodo *, int);
void insertaUltimo(int );
void eliminaUltimo();
void eliminaEnmedio(int );
void Listar();
};
if(primero == NULL){
}
}
La eliminación del primer elemento de la lista es reciproco; se deja como ejercicio particular
la hechura de esta función.
class Listax
private: Nodo *Lista; // cabecera de lista
public: Listax(){
Lista = NULL; // se crea una lista vacía
}
void creaLista(int );
Nodo *Buscar(int );
void insertaEnlista(Nodo *, int);
void eliminaElemento(int );
void Listar();
};
If(Lista == NULL){
Lista = new Nodo;
Lista -> dato = x;
Lista -> siguiente = Lista;
Lista -> anterior = Lista;
}
else{
aux -> dato = x;
aux -> siguiente = Lista -> siguiente;
Lista -> siguiente = aux;
aux -> anterior = Lista;
Lista -> anterior = aux;
Lista = aux;
}
}