Lista Doble – Multiplica pares
Dada una lista doble, Multiplique por dos todos los elementos que son pares y divida entre dos todos los elementos que son impares.
#include<conio.h>
#include<iostream.h>
struct nodo
{
int nro;
struct nodo* sgte;
struct nodo* ante;
};
typedef struct nodo* Tlista;
void InsertaAlInicio(Tlista&,int);
void InsertaAlFinal(Tlista&,int);
void EliminaAlInicio(Tlista&);
bool Busqueda(Tlista,int,int&);
void EliminarLista(Tlista&);
void Imprimir(Tlista);
void EliminaElemento(Tlista&,int);
void Ordenar(Tlista&);
void main(void)
{
Tlista lista=NULL;
int opc,valor,pos;
bool R;
do
{
cout<<"======================================n";
cout<<"=============== MENU =================n";
cout<<"======================================n";
cout<<"| 1.- Inserta al inicio |n";
cout<<"| 2.- Inserta al final |n";
cout<<"| 3.- Busqueda |n";
cout<<"| 4.- Eliminar Lista |n";
cout<<"| 5.- Listado [Izquierda - Derecha] |n";
cout<<"| 6.- Elimina al inicio |n";
cout<<"| 7.- Elimina Elemento |n";
cout<<"| 8.- Ordenar Lista y mostrar los elementos mltiplicados y divididos |n";
cout<<"| 9.- Salir |n";
cout<<"======================================n";
cout<<"======================================n";
cout<<"IngreseOpcion: ";cin>>opc;
char opc0='s';
switch(opc)
{
case 1:
while(opc0=='s' || opc0=='S')
{
cout<<"=============================n";
cout<<"Numero : ";cin>>valor;
if(valor%2==0)
InsertaAlInicio(lista,valor*2);
else
InsertaAlInicio(lista,valor/2);
cout<<"Seguir ingresando [s/n]: ";cin>>opc0;
}
break;
case 2:
while(opc0=='s' || opc0=='S')
{
cout<<"=============================n";
cout<<"Numero : ";cin>>valor;
if(valor%2==0)
InsertaAlFinal(lista,valor*2);
else
InsertaAlFinal(lista,valor/2);
cout<<"Seguir ingresando [s/n]: ";cin>>opc0;
}
break;
case 3:
cout<<"=============================n";
cout<<"Ingrese el valor a buscar: ";cin>>valor;
cout<<"nListadon";
Imprimir(lista);
R=Busqueda(lista,valor,pos);
if(R==true)
{
cout<<"ntValor buscado: "<<valor;
cout<<"ntEstado : Existe";
cout<<"ntPosicion : "<<pos;getch();
}
else
{
cout<<"ntValor buscado: "<<valor;
cout<<"ntEstado : No Existe";
cout<<"ntPosicion : Ninguna";
}
break;
case 4:
cout<<"=============================n";
cout<<"nElementosn";
EliminarLista(lista);getch();
break;
case 5:
cout<<"=============================n";
cout<<"nListadon";
Imprimir(lista);getch();
break;
case 6:
cout<<"=============================n";
EliminaAlInicio(lista);
getch();
break;
case 7:
cout<<"=============================n";
cout<<"Ingrese el valor a eliminar: ";cin>>valor;
cout<<"nElmetodo eliminara todos los elementos que ncoincidan con el valor ingresado ...n";
EliminaElemento(lista,valor);
getch();
break;
case 8:
cout<<"=============================n";
cout<<"nLista Ordenadan";
Ordenar(lista);
Imprimir(lista);getch();
break;
} //FIN DEL SWITCH
clrscr();
}while(opc!=9);
}
void InsertaAlInicio(Tlista&lista,int valor)
{
Tlista pos,nu;
nu = new (struct nodo);
nu->nro = valor;
pos = lista;
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 InsertaAlFinal(Tlista&lista,int valor)
{
Tlista pos,nu;
nu = new (struct nodo);
nu->nro = valor;
pos = lista;
if(lista == NULL)
{
lista = nu;
lista->sgte = NULL;
lista->ante = NULL;
}
else
{
while (pos->sgte!= NULL) { pos = pos->sgte; }
nu->sgte = pos->sgte;
pos->sgte = nu;
nu->ante = pos;
}
}
bool Busqueda(Tlista lista,int num,int& pos)
{
Tlista aux = lista;
pos=0;
while (aux != NULL)
{
if (aux->nro == num)
{
return true;
}
aux = aux->sgte;
pos++;
}
return false;
}
void EliminarLista(Tlista& lista)
{
lista = NULL;
}
void Imprimir(Tlista lista)
{
Tlista aux = lista;
int i = 0;
while (lista != NULL)
{
cout<<"["<<i<<"] = "<<lista->nro<<endl;
lista = lista->sgte;
i++;
}
if(i==0)
{
cout<<"nLa lista no tiene datos ... PressEnter";
}
}
void EliminaAlInicio(Tlista& lista)
{
if(lista!=NULL) //Siempre que la lista tenga un valor
{
lista=lista->sgte;
cout<<"nEliminado ... PressEnter ";
}
else
{
cout<<"nLa lista no tiene datos ... PressEnter ";
}
}
void EliminaElemento(Tlista&lista,int ele)
{
Tlista aux=lista;
bool existe=false;
while (aux!= NULL)
{
if (aux->nro == ele)
{
if(aux->ante == NULL &&aux->sgte == NULL)//Si el elemento se encuentra al inicio y es el unico
{
aux = NULL;
lista = aux;
existe=true;
goto fin;
}
else
{
if(aux->ante == NULL) //Si el elemento está al inicio
{
lista->sgte->ante = NULL;
lista = lista->sgte;
}
else
{
if(aux->sgte == NULL) //Si el elemento se encuentra al final
{
aux->ante->sgte = NULL;
aux = aux->ante;
}
else //Si el elemento se encuentra en otra posición
{
aux->ante->sgte = aux->sgte;
aux->sgte->ante = aux->ante;
aux = aux->ante;
}
}
}
existe = true;
}
aux = aux->sgte;
}
fin:
if(existe)
{
cout<<"n¡¡ELEMENTO ELIMINADO!! ... PressEnter";
}
else
{
cout<<"n¡El Elemento NO EXISTE en la Lista! ... PressEnter";
}
}
void Ordenar(Tlista& lista)
{
Tlista aux1,aux2;
if(lista!=NULL)
{
aux1 = lista, aux2 = lista->sgte;
int cambiar;
while (aux1 != NULL)
{
aux2 = aux1->sgte;
while (aux2 != NULL)
{
if (aux1->nro>= aux2->nro)
{
cambiar = aux1->nro;
aux1->nro = aux2->nro;
aux2->nro = cambiar;
}
aux2 = aux2->sgte;
}
aux1 = aux1->sgte;
}
}
}
NOTA:
+ Los ejercicios desarrollados en este post son a través del programa Borland. Para obtener el programa, clic en el siguiente enlace: Descargar Borland
Continuando con Listas Dobles, les comparto el siguiente post: Inserta, busca, elimina y muestra elementos