Está en la página 1de 4

// Programa que genera una lista doblemente enlazada de forma dinamica

#include <iostream.h>
#include <conio.h>
#include <dos.h>
struct nodo
{
int info;
struct nodo *sig;
struct nodo *ant;
};
struct nodo *p=NULL,*r=NULL, *pa=NULL;
void insertardespues(nodo **p, int dat, int ingre);
void inserta_nodo( struct nodo **p, int n);
void inserta_primero( struct nodo **p, int n);
void elimina_primero(struct nodo **p);
void mostrar_lista( struct nodo *p);
int buscar(nodo *p, int dat);
int n, dat, ingre; char op;
int main()
{
do
{
clrscr();
cout<<"MENU DE OPCIONES - LISTAS DOBLEMENTE ENLAZADAS:"<<endl;
cout<<"1: Insercion de un nodo al final de la lista"<< endl;
cout<<"2: Recorrido de la lista de izq-der y der-izq"<< endl;
cout<<"3: Buscar un Nodo dado como Referencia en la Lista"<<endl;
cout<<"4: Insercion de un Nodo al principio de la lista"<< endl;
cout<<"5: Insertar un Nodo despues de otro dado como referencia"<< endl;
cout<<"6: Eliminacion del primer nodo de la lista"<< endl;
cout<<"Escoja la opcion 0 para salir:";
cin>>op;
switch(op)
{
case '1':
cout<<"Digite la informacion del nodo a insertar:";
cin>>n;
inserta_nodo(&p,n);
break;
case '2':
mostrar_lista(p);
break;
case '3':
cout<<"Ingrese el dato a buscar en la lista: ";
cin>>n;
if(buscar(p,n)==0)
cout<<"el nodo no esta en la lista";
else
cout<<"El nodo "<<buscar(p, n)<<" si esta en la lista"<<endl;
break;
case '4':
cout<<"Digite la informacion del nodo a insertar:";
cin>>n;
inserta_primero(&p,n);
break;
case '5':
cout<<"Digite la informacion del nodo referencia:";
cin>>dat;
cout<<"Digite la informaci?n del nodo a insertar:";

This study source was downloaded by 100000830385026 from CourseHero.com on 10-20-2022 17:01:15 GMT -05:00

https://www.coursehero.com/file/96211569/Programa-Operaciones-Listas-Enlazadas-Doblestxt/
cin>>ingre;
insertardespues(&p,dat,ingre);
break;
case '6':
elimina_primero(&p);
break;

case '0':
cout<<"Fin del programa, se cierra en 3 segundos...";
sleep(3);
exit (0);
default :
cout<<"Opcion no valida";
}// fin del switch
getch();
}while(op!='0'); // fin del do-while
} // fin del main
void inserta_nodo( struct nodo **p, int n)
{
struct nodo *q;
if (*p==NULL)
{
*p=new nodo;
(*p)->info=n;
(*p)->sig=NULL;
(*p)->ant=NULL;
r=*p;
}
else
{
q=new nodo;
q->info=n;
q->sig=NULL;
q->ant=r;
r->sig=q;
r=q;
}
}
void mostrar_lista( struct nodo *p)
{
if (p==NULL)
cout<<"La lista esta vacia!!";
else
{
struct nodo *q;
q=p;
cout<<"El recorrido de izq a der es:"<<endl;
while(q!=NULL)
{
cout<<q->info<<"\t";
q=q->sig;
}
q=r;
cout<<endl<<"El recorrido de der a izq es:"<<endl;
while(q!=NULL)
{
cout<<q->info<<"\t";
q=q->ant;
}

This study source was downloaded by 100000830385026 from CourseHero.com on 10-20-2022 17:01:15 GMT -05:00

https://www.coursehero.com/file/96211569/Programa-Operaciones-Listas-Enlazadas-Doblestxt/
}
}
void inserta_primero( struct nodo **p, int n)
{
struct nodo *q;
if (*p==NULL)
{
*p=new nodo;
(*p)->info=n;
(*p)->sig=NULL;
(*p)->ant=NULL;
}
else
{
q=new nodo;
q->info=n;
q->ant=NULL;
q->sig=*p;
(*p)->ant=q;
*p=q;
}
q=NULL;
}
void elimina_primero(struct nodo **p)
{
struct nodo *q;
if(*p==NULL)
{
cout<<"la lista esta vacia";
}
else
{
q=*p;
*p=(*p)->sig;
(*p)->ant=NULL;
delete q;
cout<<"se elimino el primer elemento correctamente";
}
}
int buscar(nodo *cab, int dat)
{
if(cab == NULL) //dice si la lista esta vacia
{
cout<<"La lista esta vacia."<<endl;
}
else
{
nodo *p = cab; //declara un puntero p al primer elemento de la lista
do
{
if(p->info==dat) //valida si la informacion del nodo es la que buscada
{
return p->info; //retorna el nodo al caso
}
else
{
p = p->sig; //p apunta al siguiente nodo
}
}while(p!=NULL);//se repite mientras no se llegue al final de la lista

This study source was downloaded by 100000830385026 from CourseHero.com on 10-20-2022 17:01:15 GMT -05:00

https://www.coursehero.com/file/96211569/Programa-Operaciones-Listas-Enlazadas-Doblestxt/
} return NULL; //si termina la lista y no encontro el nodo buscado retorna NULL
}
void insertardespues(nodo **p, int dat, int ingre)
{
if(*p == NULL) //dice si la lista esta vacia
{
cout<<"La lista esta vacia."<<endl;
}
else
{
pa = *p;
do
{
cout<<pa->info<<"\t";
if(pa->info==dat) //valida si la informacion del nodo es la que buscada
{
nodo *nuevo;
nuevo= new nodo;
nuevo->info=ingre;
nuevo->ant=pa;
nuevo->sig=pa->sig;
pa->sig=nuevo;
if (nuevo->sig!=NULL)
{
nuevo->sig->ant=nuevo;
}
else
{
r=nuevo;
}
break;
}
else
{
pa = pa->sig; //p apunta al siguiente nodo
}
}
while(pa!=NULL);//se repite mientras no se llegue al final de la lista
if (pa==NULL)
cout<<"No encontrado";
}
}

This study source was downloaded by 100000830385026 from CourseHero.com on 10-20-2022 17:01:15 GMT -05:00

https://www.coursehero.com/file/96211569/Programa-Operaciones-Listas-Enlazadas-Doblestxt/
Powered by TCPDF (www.tcpdf.org)

También podría gustarte