<strong> LISTAS ENLAZADAS DOBLES </strong>
Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta al valor NULL o a la lista vacía si es el primer nodo; y otro que apunta al siguiente nodo siguiente, o apunta al valor NULL o a la lista vacía si es el último nodo.
X <---. 12 .<======> .
Ejemplo:
#include<alloc.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream.h>
//Estructuras Doblemente enlazadas
typedef struct nododoble
{
int dato;
struct nododoble *sig;
struct nododoble *ant;
}tipoNodo;
//PROTOTIPOS
tipoNodo *nuevo_elemento();
void creardoble();
void presentar();
void insertar();
void insertarfinaldoble();
void insertarordenadodoble();
void insertariniciodoble();
void modificar();
void buscar();
void ordenar();
void ordenardoblesasc();
void ordenardoblesdesc();
void eliminar();
void eliminar_cabeza();
void cuadro(int x1,int y1,int x2,int y2,char c);
tipoNodo *cab;
tipoNodo *cola;
tipoNodo *nuevo_elemento()
{
tipoNodo *nodo1;
nodo1=(tipoNodo *)malloc(sizeof(tipoNodo ));
if(!nodo1)
cout<<"No se ha reservado memoria para el nuevo ";
return nodo1;
}
//MENU PRINCIPAL
void main()
{
clrscr();
creardoble();
clrscr();
char opc=' ';
do
{
clrscr();
cuadro(1,10,35,56,"");
gotoxy(13,3);cout<<"->[ LISTAS ENLAZADAS DOBLES ]<-n";
gotoxy(12,6);cout<<" MENU PRINCIPALn";
gotoxy(12,9); cout<<" [1]: INSERTAR n";
gotoxy(12,12);cout<<" [2]: MODIFICARn";
gotoxy(12,15);cout<<" [3]: BUSCARn";
gotoxy(12,17);cout<<" [4]: ORDENARn";
gotoxy(12,19);cout<<" [5]: ELIMINARn";
gotoxy(12,21);cout<<" [6]: PRESENTARn";
gotoxy(12,24);cout<<" [7]: SALIR DEL MENUn";
gotoxy(12,27);cout<<" Elegir una Opci¢n [ ]";
gotoxy(32,27);cin>>opc;
switch(opc)
{
case'1":
clrscr();
insertar();;getch();break;
case'2":
clrscr();
modificar();getch();break;
case'3":
clrscr();
buscar();getch();break;
case'4":
clrscr();
ordenar();getch();break;
case'5":
clrscr();
eliminar();getch();break;
case'6":
clrscr();
presentar();getch();break;
}
}while(opc!='7");
getch();
}
//CREAR LA CABEZA
void creardoble()
{
clrscr();
int dat;
gotoxy(20,20);
cout<<"Ingrese Elemento: ";
cin>>dat;
cab=nuevo_elemento();
cola=nuevo_elemento();
cab->dato=dat;
cab->sig=NULL;
cab->ant=NULL;
cola=cab;
getch();
}
void insertar()
{
clrscr();
char opc=' ';
do
{
clrscr();
cuadro(1,10,25,56,"");
gotoxy(13,3);cout<<"->[ INSERTAR ELEMENMTOS A LA LISTA ENLAZADA ]<-n";
gotoxy(12,6); cout<<" [1]: INSERTAR ORDENADOn";
gotoxy(12,9);cout<<" [2]: INSERTAR CABEZAn";
gotoxy(12,12);cout<<" [3]: INSERTAR AL FINALn";
gotoxy(12,15);cout<<" [4]: REGRESARn";
gotoxy(12,17);cout<<" Elegir una Opci¢n [ ]";
gotoxy(32,17);cin>>opc;
switch(opc)
{
case'1":
clrscr();
insertarordenadodoble();getch();break;
case'2":
clrscr();
insertariniciodoble();getch();break;
case'3":
clrscr();
insertarfinaldoble();getch();break;
}
}
while(opc!='4");
getch();
}
void insertarfinaldoble()
{
clrscr();
nododoble *elem;
elem=nuevo_elemento();
clrscr();
gotoxy(20,20);
cout<<"tt"<<"INGRESE VALOR :t";
cin>>elem->dato;
cola->sig=elem;
elem->sig=NULL;
elem->ant=cola;
cola=elem;
getch();
}
void insertarordenadodoble()
{
int dat;
nododoble *aux;
nododoble *ant;
nododoble *post;
aux=nuevo_elemento();
ant=nuevo_elemento();
post=nuevo_elemento();
gotoxy(18,22);
cout<<"Ingrese un elemento: ";
cin>>dat;
aux->dato=dat;
if(aux->dato>cab->dato)
{
ant=cab;
post=cab->sig;
while((aux->dato>post->dato) && (post->sig!=NULL))
{
ant=post;
post=post->sig;
}
if (post->sig==NULL)
{
if (aux->dato<post->dato){
aux->sig=post;
post->ant=aux;
ant->sig=aux;
aux->ant=ant;
}else{
aux->sig=NULL;
post->sig=aux;
aux->ant=post;
}
}
else
{
aux->sig=post;
post->ant=aux;
ant->sig=aux;
aux->ant=ant;
}
}
else{
aux->dato=dat;
aux->sig=cab;
cab->ant=aux;
aux->ant=NULL;
cab=aux;
}
}
void insertariniciodoble()
{
nododoble *Aux;
int dat;
Aux=nuevo_elemento();
gotoxy(18,22);
cout<<"Ingrese un numero:";
cin>>dat;
Aux->dato=dat;
Aux->ant=NULL;
Aux->sig=cab;
cab->ant=Aux;
cab=Aux;
}
void modificar()
{
clrscr();
nododoble *modificar;
nododoble *ele;
modificar=nuevo_elemento();
int db,encontrado=0;
modificar=cab;
gotoxy(10,20);
cout<<"t"<<"INGRESE EL VALOR A MODIFICAR :t";
cin>> db;
while(modificar!=NULL)
{
if(db==modificar->dato)
{
gotoxy(10,22);cout<<"Elemento existente en la lista";
encontrado=1;
gotoxy(10,25);
cout<<"tt"<<"INGRESE VALOR :t";
cin>>ele->dato;
modificar->dato=ele->dato;
}
modificar=modificar->sig;
}
if(encontrado==0)
{
gotoxy(10,22);cout<<"Elemento no existente en la lista";
}
getch();
}
void buscar()
{
clrscr();
nododoble *buscar;
buscar=nuevo_elemento();
int db,encontrado=0;
buscar=cab;
gotoxy(18,15);
cout<<"Ingrese el numero a buscar: ";
cin>> db;
while(buscar!=NULL)
{
if(db==buscar->dato)
{
gotoxy(18,18);cout<<"Elemento existente en la lista";
encontrado=1;
}
buscar=buscar->si