Listas Doblemente Listas Doblemente VinculadasVinculadas
Listas Doblemente VinculadasListas Doblemente Vinculadas
Listas Doblemente VinculadasListas Doblemente Vinculadas
lista
NULL NULL
Estructura de un nodo de una Lista Estructura de un nodo de una Lista dobledoble
Estructura de un nodo Estructura de un nodo de una Lista doblede una Lista doble
datoante
steStruct Nodo2{
int dato;Nodo2 * ste;Nodo2 * ante;
}
Nodo2 * Nodo2 * inicListainicLista()(){{
return NULL;return NULL;}}
Nodo2 * Nodo2 * crearNodocrearNodo(int dato)(int dato){{
Nodo2 * aux = (Nodo2 *) malloc (sizeof(Nodo2));Nodo2 * aux = (Nodo2 *) malloc (sizeof(Nodo2));aux->dato = dato;aux->dato = dato;aux->ante = NULL;aux->ante = NULL;aux->ste = NULL;aux->ste = NULL;return aux;return aux;
}}
Nodo2 * Nodo2 * agregarAlPrincipioagregarAlPrincipio(Nodo2 * lista, Nodo2 * nuevoNodo)(Nodo2 * lista, Nodo2 * nuevoNodo){{ nuevoNodo->ste = lista;nuevoNodo->ste = lista; if(lista != NULL)if(lista != NULL) lista->ante = nuevoNodo;lista->ante = nuevoNodo; return nuevoNodo;return nuevoNodo;}}//Ejemplo recursivo. Hacerlo iterativo, es similar a la lista //Ejemplo recursivo. Hacerlo iterativo, es similar a la lista
simplesimpleNodo2 * Nodo2 * buscarUltimobuscarUltimo(Nodo2 * lista)(Nodo2 * lista){{ Nodo2 * rta;Nodo2 * rta; if (lista == NULL)if (lista == NULL) rta = NULL;rta = NULL; elseelse if (lista->ste == NULL)if (lista->ste == NULL) rta = lista;rta = lista; elseelse rta = buscarUltimo(lista->ste);rta = buscarUltimo(lista->ste); return rta;return rta;}}
Nodo2 * Nodo2 * agregarAlFinalagregarAlFinal(Nodo2 * lista, Nodo2 * (Nodo2 * lista, Nodo2 * nuevoNodo)nuevoNodo)
{{ Nodo2 * ultimo = NULL;Nodo2 * ultimo = NULL; if (lista == NULL)if (lista == NULL) lista = nuevoNodo;lista = nuevoNodo; elseelse {{ ultimo = buscarUltimo(lista);ultimo = buscarUltimo(lista); ultimo->ste = nuevoNodo;ultimo->ste = nuevoNodo;
nuevoNodo->ante = ultimo;nuevoNodo->ante = ultimo; }} return lista;return lista;}}
//inserta manteniendo el orden creciente.Nodo2 * insertarNodo(Nodo2 * lista, Nodo2 * nuevoNodo){ if (lista == NULL) lista = nuevoNodo; else if (nuevoNodo->dato < lista->dato) lista = agregarAlPrincipio(lista, nuevoNodo); else { Nodo2 * seg = lista->ste; Nodo2 * ante = lista; while ( seg!= NULL && nuevoNodo->dato > seg->dato) { ante = seg; seg = seg->ste; } ante->ste = nuevoNodo; nuevoNodo->ante = ante; nuevoNodo->ste = seg; if( seg!= NULL) seg->ante = nuevoNodo; } return lista;}
Pgina 1Pgina 2Pgina 3Pgina 4Pgina 5Pgina 6Pgina 7