Listas enlazadas

Buscar e invertir lista

Mediante programación en C++, desarrollar un programa que busque elemento , invierte lista y muestra elemento central.

#include <iostream.h>
#include <conio.h>
struct nodo{
     int nro;
     struct nodo *sgte;
            struct nodo *ant;
    };
typedef struct nodo *lisdo;
void insertain(lisdo &,int);
void insertafi(lisdo &,int);
int busca(lisdo,int,int &);
void elimini(lisdo &);
void elimlista(lisdo &);
void elimelem(lisdo &,int);
void verlis(lisdo);
void invertir(lisdo);
void media(lisdo);
void sure(lisdo);
void asen(lisdo &);
void insertain(lisdo &lista,int elem)
{
 lisdo l;
 l=new(struct nodo);
 l->nro=elem;
 if(lista==NULL)
   {
    lista=l;
    lista->sgte=NULL;
    lista->ant=NULL;
   }
 else
   {
    l->sgte=lista;
    l->ant=NULL;
    lista->ant=l;
    lista=l;
   }
}
void insertafi(lisdo &lista,int elem)
{
 lisdo l,aux;
 l=new(struct nodo);
 l->nro=elem;
 aux=lista;
 if(lista==NULL)
   {
    lista=l;
    lista->sgte=NULL;
    lista->ant=NULL;
   }
 else
   {
    while(aux->sgte!=NULL)
    {
     aux=aux->sgte;
    }
    l->sgte=NULL;
    aux->sgte=l;
    l->ant=aux;
   }
}
int busca(lisdo lista,int elem,int &pos)
{
 //int b;
 pos=0;
 lisdo aux;
 aux=lista;
 while(aux->sgte!=NULL)
 {
  if(aux->nro==elem)
    {
     return 1;
    }
  aux=aux->sgte;
  pos++;
 }
 return 0;
}
void elimini(lisdo &lista)
{
 if(lista!=NULL)
   {
    lista=lista->sgte;
    cout<<"!! primer elemento eliminado ¡¡";
   }
 else
   cout<<"¡¡¡ lista sin elementos !!!";
}
void elimlista(lisdo &lista)
{
 if(lista!=NULL)
   {
    lista=NULL;
    cout<<"!! lista bacia ¡¡";
   }
 else
   cout<<"!! lista sin elementos ¡¡"; 
}
void elimelem(lisdo &lista,int elem)
{
 lisdo aux;
 aux=lista;
 if(lista!=NULL)
   {
    while(aux!=NULL)
    {
     if(aux->nro==elem)
       {
 if(aux->sgte==NULL&&aux->ant==NULL)
   {
    aux=NULL;
           lista=aux;
   }
 else
   {
    if(aux->ant==NULL)
      {
              //lista->sgte->ant=NULL;
       lista=lista->sgte;
      }
    else
      if(aux->sgte==NULL)
        {
  aux->ant->sgte=NULL;
                aux=aux->ant;
        }
    else
      {
       aux->ant->sgte=aux->sgte;
       aux->sgte->ant=aux->ant;
              aux=aux->ant;
      }
   }
       }
    aux=aux->sgte;
    }
    cout<<"!! elemento eliminado ¡¡";
   }
 else
   cout<<"!! lista sin elementos ¡¡";
}
void verlis(lisdo lista)
{
 lisdo aux;
 aux=lista;
 if(lista!=NULL)
   {
    while(aux!=NULL)
    {
     cout<nro<<" - ";
     aux=aux->sgte;
    }
   }
 else
   cout<<"!! lista sin elementos ¡¡";
}
void invertir(lisdo lista)
{
 lisdo aux;
 aux=lista;
 if(lista!=NULL)
   {
    while(aux->sgte!=NULL)
    {
     aux=aux->sgte;
    }
    while(aux!=NULL)
    {
     cout<nro<<" - ";
     aux=aux->ant;
    }
   }
 else
   cout<<"!! sin elementos ¡¡";
}
void media(lisdo lista)
{
 int m,n=0,i=0,v;
 lisdo aux;
 aux=lista;
 while(aux->sgte!=NULL)
 {
  aux=aux->sgte;
  n++;
 }
 while(aux->ant!=NULL)
 {
  aux=aux->ant;
  i++;
  if(i==n/2)
    v=aux->nro;
 }
  cout<<v;
}
void sure(lisdo lista)
{
 lisdo aux1,aux2;
 aux1=lista;
 aux2=aux1->sgte;
 while(aux1!=NULL)
 {
  aux1->nro=((aux1->nro)+2);
  aux1=aux2->sgte;
  aux2->nro=((aux2->nro)-2);
  aux2=aux1->sgte;
 }
}
 void asen(lisdo &lista)
 {
  int may;
  lisdo aux1,aux2;
  if(lista!=NULL)
    {
     aux1=lista;
     aux2=lista->sgte;
     while(aux1!=NULL)
     {
      aux2=aux1->sgte;
      while(aux2!=NULL)
      {
       if(aux1->nro>aux2->nro)
  {
   may=aux1->nro;
   aux1->nro=aux2->nro;
          aux2->nro=may;
  }
       aux2=aux2->sgte;
      }
      aux1=aux1->sgte;
     }
    }
 }

void main()
{
 lisdo lista=NULL;
 int elem,pos,x,y,i;
 char opc;
 do
 {
  clrscr();
  cout<<"**********MENU********\n";
  cout<<"1.-INSERTAR ELEMENTO AL INICIO\n";
  cout<<"2.-INSETAR ELEMENTO AL FINAL\n";
  cout<<"3.-BUSCAR ELEMENTO\n";
  cout<<"4.-ELIMINAR PRIMER ELEMENTO\n";
  cout<<"5.-ELIMINAR ELEMENTO\n";
  cout<<"6.-ELIMINAR LISTA\n";
  cout<<"7.-VER ELEMENTOS DE LA LISTA\n";
  cout<<"8.-LISTA ORDENADA ASENDENTEMENTE\n";
  cout<<"9.-SALIR\n";
  cout<<"INGRESE SU OPCION: ";opc=getche();
  switch(opc)
 {
  case '1':clrscr();
     cout<<"numeros de elementos: ";cin>>x;
    for(i=0;i<x;i++)
      {
       cout<<i+1<<".-elemento: ";cin>>y;
                     insertain(lista,y);
      }
    break;
  case '2':clrscr();
    cout<<"numero de elementos: ";cin>>x;
    for(i=0;i<x;i++)
      {
       cout<<i+1<<".-elemento: ";cin>>y;
                     insertafi(lista,y);
      }
    break;
  case '3':clrscr();
    cout<<"Ingrese elemento a buscar: ";cin>>x;
    y=busca(lista,x,pos);
    if(y==1)
      {
                     cout<<"Elemento en la posicion "<<pos;
      }
    else
      cout<<"Elemento no existe ";
    break;
  case '4':clrscr();
    elimini(lista);
    break;
  case '5':clrscr();
    cout<<"Elementos a buscar";cin>>x;
    elimelem(lista,x);
    break;
  case '6':clrscr();
    elimlista(lista);
    break;
 case '7':clrscr();
   cout<<"******LISTA INVERTIDA********\n";
   verlis(lista);
   cout<<"nn*******LISTA DE ELEMENTOS********\n";
   invertir(lista);
   cout<<"n********LA MEDIA ES **********\n";
   media(lista);
   sure(lista);
   cout<<"n******LISTA DE ELEMENTOS********\n";
   verlis(lista);
   break;
  case '8':clrscr();
    cout<<"******LISTA DE ELEMENTOS********\n";
    verlis(lista);
                  cout<<endl<<endl;
    cout<<"******LISTA DE ELEMENTOS ORDENADOS********\n";
    asen(lista);
    verlis(lista);
    break;                                
 }
  getch();
 }while(opc!='9');
}

  Continuando con Listas enlazadas, les comparto el siguiente post: Multiplicación de una lista