Unidad 6 ListasDoblementeVinculadas

7
Listas Doblemente Listas Doblemente Vinculadas Vinculadas

description

breve apunte sobre listas doblemente vinculadas usando punteros

Transcript of Unidad 6 ListasDoblementeVinculadas

  • 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