martes, 20 de marzo de 2018

Lista doblemente enlazada mostrar de primero a ultimo y viceversa

#include<iostream>
using namespace std;

struct ListaD{
    int info;
    struct ListaD *sig;
    struct ListaD *ant;
};

void crearCabLD(struct ListaD *&cab,int info){
    cab=new ListaD;
    cab->info=info;
    cab->sig=cab->ant=NULL;
}

void agregarNodoLD(struct ListaD *&cab,int info){
    struct ListaD *aux=cab;
    while(aux->sig){
        aux=aux->sig;
    }
    aux->sig=new ListaD;
    aux->sig->ant=aux;
    aux=aux->sig;
    aux->info=info;
    aux->sig=NULL;
}

void crearListaLD(struct ListaD *&cab){
    int info=666;
    while(info>0){
        cout<<endl<<"Dato: ";
        cin>>info;
        if(info>0){
            if(!cab){
                crearCabLD(cab,info);
            }
            else{
                agregarNodoLD(cab,info);
            }
        }
    }
}

void Mostrar(struct ListaD *&cab){
    struct ListaD *aux=cab;
    while(aux->sig!=NULL){
        cout<<aux->info<<"\t";
        aux=aux->sig;
    }
    cout<<aux->info<<"\t\n";

    while(aux!=cab){
        cout<<aux->info<<"\t";
        aux=aux->ant;
    }
    cout<<aux->info<<"\t";
}

main(){
    struct ListaD *cab=NULL;
    crearListaLD(cab);
    Mostrar(cab);
}

pseudocodigo antes y despues de nodo pedido

INSERTARANTES(P,DATO,REF){
inserta el nodo antes que otro con información X en una lista doblemente ligada
(Q,X,T =variables de tipo puntero, F ultimo nodo)
1. Hacer q:=P y BAND:=0
2. Repetir mientras (Q->inf!=REF&&BAND==0)
    2.1 Si (Q->lig!=NULL)
         hacer Q:=Q->LDER, T:=Q
         sino  BAND:=1
     2.2 Fin paso 2.1
3. Fin paso 2
4. Si BAND=1
    entonces "Elemento no fue encontrado"
    sino  Crear X,  Hacer T:=Q->LIZ, X->inf:=DATO,
         X->LDE:=Q
         X->LIZ:=T
         Q->LIZ:=X, T->LDE:=X
5.  Fin paso 4.

INSERTARDESPUES(P,DATO,REF){
inserta el nodo despues que otro con información X en una lista doblemente enlazada
(Q,X,T =variables de tipo puntero, F ultimo nodo)
1. Hacer q:=P y BAND:=0
2. Repetir mientras (Q->inf!=REF&&BAND==0)
    2.1 Si (Q->lig!=NULL)
         hacer Q:=Q->LIZ, T:=Q
         sino  BAND:=1
     2.2 Fin paso 2.1
3. Fin paso 2
4. Si BAND=1
    entonces "Elemento no fue encontrado"
    sino  Crear X,  Hacer T:=Q->LDE, X->inf:=DATO,
         X->LIZ:=Q
         X->LDE:=T
         Q->LDE:=X, T->LIZ:=X
5.  Fin paso 4.