Programacion: Lista Doble – Multiplica pares, divide impares


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

-->