Listas dobles
Intercalar unir y sumar en listas dobles
Hacer un programa que permita insertar, intercalar, unir y sumar dos listas doblemente enlazadas.
#include <iostream.h>
#include <conio.h>
struct nodo
{
int nro;
struct nodo* sgte;
struct nodo* ante;
};
typedef struct nodo* Tlista;
void incertar(Tlista &,int);
void intercala(Tlista &,Tlista &,Tlista &);
void unir(Tlista &,Tlista &,Tlista &);
void listado(Tlista);
void sumar(Tlista &,Tlista &, Tlista &);
void main(void)
{
Tlista lista1,lista2,lista3,lista4,lista5;
lista1=lista2=lista3=lista4=lista5=NULL;
int opc,n,i,k;
do
{clrscr();
cout<<"[1]->INSERTAR NUMEROS\n";
cout<<"[2]->INTERCALAR\n";
cout<<"[3]->UNIR\n";
cout<<"[4]->SUMAR\n";
cout<<"[0]->SALIR\n";
cout<<"INGRESE OPCION:";
cin>>opc;
switch(opc)
{
case 1:
clrscr();
cout<<"INGRESE LIMITE DE LAS LISTAS";
cin>>n;
cout<<"\nLISTA NUMERO 1";
for(i=0;i<n;i++)
{
cout<<"\nINCERTE VALOR ["<<(i+1)<<"]";
cin>>k;
incertar(lista1,k);
}
cout<<"\nLISTA NUMERO 2";
for(i=0;i<n;i++)
{
cout<<"\nINCERTE VALOR ["<<(i+1)<<"]";
cin>>k;
incertar(lista2,k);
}
break;
case 2:
clrscr();
cout<<"LAS LISTAS FUERON INTERCALADAS";
intercala(lista1,lista2,lista3);
cout<<"\nLISTA 1";
listado(lista1);
cout<<"\nLISTA 2";
listado(lista2);
cout<<"\nLISTA UNIDA";
listado(lista3);
getch();
break;
case 3:
clrscr();
cout<<"LA LISTAS FUERON UNIDAS";
unir(lista1,lista2,lista4);
cout<<"\nLISTA 1";
listado(lista1);
cout<<"\nLISTA 2";
listado(lista2);
cout<<"\nLISTA UNIDA";
listado(lista4);
getch();
break;
case 4:
clrscr();
cout<<"LA LISTAS FUERON SUMADAS";
sumar(lista1,lista2,lista5);
cout<<"\nLISTA 1";
listado(lista1);
cout<<"\nLISTA 2";
listado(lista2);
cout<<"\nLISTA SUMADA";
listado(lista5);
getch();
break;
}
}while(opc!=0);
}
void incertar(Tlista &lista,int n)
{
Tlista nu;
nu=new(struct nodo);
nu->nro=n;
if(lista==NULL)
{
lista=nu;
lista->sgte=NULL;
lista->ante=NULL;
}
else
{
nu->sgte=lista;
nu->ante=lista->ante;
lista->ante=nu;
lista=nu;
}
}
void intercala(Tlista &lista1,Tlista &lista2,Tlista &lista3)
{
int x;
Tlista l1,l2;
l1=lista1;
l2=lista2;
while(l1!=NULL && l2!=NULL)
{if(l1!=NULL)
{
x=l1->nro;
incertar(lista3,x);
}
if(l2!=NULL)
{
x=l2->nro;
incertar(lista3,x);
}
l1=l1->sgte;
l2=l2->sgte;
}
}
void unir(Tlista &lista1,Tlista &lista2,Tlista &lista4)
{
int x;
Tlista l1,l2;
l1=lista1;
l2=lista2;
while(l1!=NULL)
{
x=l1->nro;
incertar(lista4,x);
l1=l1->sgte;
}
while(l2!=NULL)
{
x=l2->nro;
incertar(lista4,x);
l2=l2->sgte;
}
}
void listado(Tlista lista)
{
Tlista p;
p=lista;
while(p!=NULL)
{cout<<"\n";
cout<<p->nro;
p=p->sgte;
}
}
void sumar(Tlista &lista1,Tlista &lista2,Tlista &lista5)
{
int x,s,y;
Tlista l1,l2;
l1=lista1;
l2=lista2;
while(l1!=NULL && l2!=NULL)
{if(l1!=NULL)
{
x=l1->nro;
}
if(l2!=NULL)
{
y=l2->nro;
}
s=x+y;
incertar(lista5,s);
l1=l1->sgte;
l2=l2->sgte;
}
}
Continuando con Listas Dobles, les comparto el siguiente post: Multiplica pares, divide impares