Programacion c++ – inserta, media, mayor y menor de una lista

Programacion c++ – inserta, media, mayor y menor de una lista

  Listas enlazadas

  Método burbuja

Mayor y menor de una lista. Mediante programación en C++, realizar un programa haciendo uso de listas para insertar elementos a una lista, eliminar elementos de la lista, así como al inicio y al final de la lista, eliminar lista, eliminar números repetidos y también números pares.

A través del programa se debe calcular la media, mayor y menor elemento de una lista y números primos.
También realizar la búsqueda de un elemento de la lista, unir lista y ordenar los elementos mediante el Método burbuja.
Finalmente debe imprimir la lista invertida así como la lista inicial.

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
 //mcwH290890//
 struct nodo
  {
   int n;
   struct nodo*sgte;
   };
   typedef struct nodo*Tlista;
   void inserta(Tlista &,int);
   void elimina_inicio(Tlista &);
   void elimina_fin(Tlista &);
   void elimina_elemento(Tlista &,int);
   void elimina_lista(Tlista &);
   void media(Tlista );
   void busqueda(Tlista, int);
   void eliminarepetidos(Tlista &);
   void unelista(Tlista &,Tlista &,Tlista &);
   void mayorlista(Tlista );
   void menorlista(Tlista);
   void eliminapares(Tlista &);
   void numerosprimos(Tlista);
   void ordenaburbuja(Tlista);
   void imprimeinver(Tlista);
   void imprimir(Tlista);
    //cuerpo de la funcion
void imprimir(Tlista lista)
 {
  if(lista==NULL)
  cout<<"la lista vacia, por favor ingrese elementos";
  while(lista!=NULL)
  {
   cout<<lista->n<<endl;
   lista=lista->sgte;
   }
   cout<<endl;
   }
void imprimeinver(Tlista lista)
{
 int x[20],k=0;
 if(lista!=NULL)
 cout<<"la lista vacia, x fa ingrese elementos";
 while(lista!=NULL)
 {
  lista=lista->sgte;
   x[k]=lista->n;
    for(int i=0;i>=0;i--)
    cout<<x[i];
    }
    }
void inserta(Tlista &lista,int k)
 {
  int i;
  Tlista q;
  for(i=0;i<k;i++)
   {
    q=new(struct nodo);
    cout<<"nt ELEMENTO ["<<i<<"] :";
    cin>>q->n;
    q->sgte=lista;
    lista=q;
    }
    }
void elimina_inicio(Tlista &lista)
 {
  struct nodo*p;
  if(lista!=NULL)
    {
     p=lista;
     lista=lista->sgte;
     delete(p);
     }
     }
void elimina_fin(Tlista &lista)
  {
   Tlista p,ant;
   if(lista==NULL) return;
   p=lista;
   if(lista->sgte==NULL)
   lista=lista->sgte;
   else
   {
   while(p->sgte!=NULL)
   {
   ant=p;
   p=p->sgte;
   }
   ant->sgte=NULL;
   }
   delete(p);
  }
void elimina_elemento(Tlista &lista,int valor)
  {
   Tlista p,ant;
   p=lista;
  while(p!=NULL)
  {
  if(p->n==valor)
  {
  if(p==lista)
  lista=lista->sgte;
  else
  ant->sgte=p->sgte;
  delete(p);
  return;
  }
  ant=p;
  p=p->sgte;
  }
  }
void elimina_lista(Tlista &lista)
  {
  Tlista p;
  while(lista!=NULL)
  {
  p=lista;
  lista=lista->sgte;
  delete(p);
  }
  }
void media(Tlista lista)
           {
            Tlista q;
            int i=0;
            int p;
            q=lista;
            while(q!=NULL)
             {
             i++;
           q=q->sgte;
           }
              cout<<" la lista tiene "<<i<<" elementos"<<endl;
               q=lista;
               for(p=1; q!=NULL;  p++)
                {
                 if(  i%2==0)
         {
                  if(p==i/2)
                  {
                   cout<<"nt la media";
                   cout<<q->n<<" , ";
                   q=q->sgte;
                   cout<<q->n;
                   return;
       }
           else
                    {
                    q=q->sgte;
         }
             }
                  else
                     {
                     if(p==(i+1)/2)
         {
                      cout<<" la media:";
        cout<<q->n;
        return ;
        }
              else
                        {  q=q->sgte;
             }
                 }
                       }
                         }
void busqueda(Tlista lista, int valor)
      {
       while (lista!=NULL)
     {
        if (valor ==lista->n)
          {
            cout<<"ntelemento encontrado ";
    return;
            }
   lista=lista->sgte;
   }
  cout<<"ntelemento no habido ";
      }
void eliminarepetidos(Tlista &lista)
    {
     Tlista t,r, a;
     Tlista p=lista;
      while(p!=NULL)
     {
            t=p;
     r=t->sgte;
       while(r!=NULL)
          {
                       if (p->n==r->n)
        {
                        a=r;
        t->sgte=r->sgte;
        r=r->sgte;
        delete(a);
        }
             else {t=r;
             r=r->sgte; }
             }
                   p=p->sgte;
                   }
                         }
void unelista(Tlista &lista1, Tlista &lista2, Tlista &lista3)
  {
   Tlista t;
   t=lista1;
    if(lista1!=NULL)
     {
   while (t->sgte!=NULL)
    {
         t=t->sgte;
    }
      t->sgte=lista2;
      lista3=lista1;
     }
        else
         {
         lista3=lista2;
     }
         lista1=NULL;
         lista2=NULL;
         }
 void mayorlista(Tlista lista)
 {
  int mayor=0;
  while(lista!=NULL)
  {
     if (lista->n>mayor)
     {
      mayor=lista->n;
  }
   lista=lista->sgte;
     }
       cout<<"nt  el mayor es:"<<mayor;
       }
void menorlista(Tlista lista)
{
 int menor=999;
 while(lista!=NULL)
  {
       if(lista->n<menor)
   {
          menor= lista->n;
         }
      lista=lista->sgte;
      }
       cout<<" el menor es:"<<menor;
         }
void eliminapares(Tlista &lista)
{
 Tlista q,a,p,t,m;
 q=new(struct nodo);
 q->n=1;
 q->sgte=lista;
 lista=q;
 p=lista;
 a=p->sgte;
  while(a!=NULL)
  {
     if( a->n%2==0)
     {
      p->sgte=a->sgte;
      t=a;
      a=a->sgte;
      delete(t);
      }
  else
      {
       p=a;
   a=a->sgte;
   }
   }
       m=lista;
       lista=lista->sgte;
       delete(m);
      }
void numerosprimos(Tlista lista)
 {
  int band;
  int num;
  while(lista!=NULL)
  {
       num=lista->n;
   band=1;
     for(int i=2; i<=num/2 ;i++)
           {
            if(num%i==0)
           {
            band=-1;
           }
           }
           if(band==1)
     {
            cout<<lista->n<<" , ";
     }
     lista=lista->sgte;
           }
           }
void ordenaburbuja(Tlista lista )
{   Tlista p,t;
  Tlista marca=NULL;
  int tmp;
  if (lista==NULL)  { return;  }
  else
   {
  while(lista->sgte!=marca)
  {  p=lista;
   t=p->sgte;
      while(t!=marca)
               {
                if (p->n>t->n)
               {
                tmp=p->n;
      p->n=t->n;
                t->n=tmp;
                 }
                 else
                  {
                   p=t;
                   t=t->sgte; }
                  }
                   marca=p;
               }
               }
                   }
  //**************************funcion main**************************************//
                    void main()
                      {
                       Tlista lista1,lista2,lista3,lista;
                       lista1=lista2=lista3=lista=NULL;
                       int valor;
                       char opc,opcion;
                        textbackground(BLUE);
                        do
                         {
                           clrscr();
                           cout<<"nta.INSERTA  ELEMENTOS"<<endl;
                           cout<<"ntb.ELIMINAR AL INICIO"<<endl;
                           cout<<"ntc.ELIMINAR AL FINAL"<<endl;
                           cout<<"ntd.ELIMINAR ELEMENTO DADO"<<endl;
                           cout<<"nte.ELIMINAR TODA LA LISTA"<<endl;
                           cout<<"ntf.IMPRIMIR LISTA"<<endl;
                           cout<<"ntg.MEDIA DE LA LISTA"<<endl;
                           cout<<"nth.BUSQUEDA DE ELEMENTO"<<endl;
                           cout<<"nti.ELIMINA ELEMENTOS REPETIDOS"<<endl;
                           cout<<"ntj.UNE DOS LISTAS"<<endl;
                           cout<<"ntk.MAYOR DE LA LISTA"<<endl;
                           cout<<"ntl.MENOR DE LA LISTA"<<endl;
                           cout<<"ntm.ELIMINA NUMEROS PARES"<<endl;
                           cout<<"ntn.NUMEROS PRIMOS"<<endl;
                           cout<<"nto.ORDENA POR BURBUJA"<<endl;
                           cout<<"ntp.IMPRIME INVERTIDO"<<endl;
                           cout<<"ntx.SALIR"<<endl;
                           opcion=getche();
                           while(!strchr("abcdefghijklmnopx",opcion));
                             switch(opcion)
                             {
                              case 'a':{clrscr();
                                      cout<<"ntINGRESE LIMITE DE LA LISTA:";
                                      cin>>valor;
                                      inserta(lista,valor);
                                      }
                                      break;
                              case 'b':{clrscr();
                                    cout<<"ntELIMINAR AL INICIO";
                                    elimina_inicio(lista);
                                    }
                                    break;
                              case 'c':{clrscr();
                                    cout<<"ntELIMINA AL FINAL";
                                    elimina_fin(lista);
                                    }
                                    break;
                              case 'd':{clrscr();
                                     cout<<endl<<"ntELIMINA ELEMENTO"<<endl;
                                     cout<<"ntVALOR A ELIMINAR:";
                                     cin>>valor;
                                     elimina_elemento(lista,valor);
                                     }
                                     break;
                             case 'e':{clrscr();
                                    cout<<endl<<"ntELIMINA LISTA";
                                    elimina_lista(lista);
                                    }
                                    break;
                             case 'f':{clrscr();
                                    cout<<endl<<"ntLISTADO"<<endl;
                                    imprimir(lista);
                                    }
                                    break;
                            case 'g':{ clrscr();
                                     cout<<"ntmedia de la lista "<<endl;
                        media(lista);
                                    }
                        break;
                            case 'h':{ clrscr();
                                     cout<<"ntingrese elemento a buscar:";
                                     cin>>valor;
                                     busqueda(lista,valor);
                                     }
                                     break;
                            case 'i':{clrscr();
                                      cout<<"nteliminados elementos repetidos";
                                      eliminarepetidos(lista);
                                     }
                                      break;
                            case 'j':{clrscr();
                                      cout<<"ntUNIENDO LISATA";
                                      cout<<"ntingrese el limite de las listas:";
                                      cin>>valor;
                                      cout<<"ntingrese valores a la lista A";
                                      inserta(lista1,valor);
                                      cout<<"ingresa valores a la lista B";
                                      inserta(lista2,valor);
                                      cout<<"ntlista ingresados son:";
                                      cout<<"ntlista A"<<endl;
                                      imprimir(lista1);
                                      cout<<"ntlista B"<<endl;
                                      imprimir(lista2);
                                      cout<<"ntlistas unidas"<<endl;
                                      unelista(lista1,lista2,lista3);
                                      imprimir(lista3);
                                      }
                                      break;
                            case 'k':{clrscr();
                                      cout<<"ntel mayor elemento:"<<endl;
                                      mayorlista(lista);
                                      }
                                      break;
                            case 'l':{clrscr();
                                     cout<<"ntel menor de la lista"<<endl;
                                     menorlista(lista);
                                     }
                                     break;
                            case 'm':{clrscr();
                                     cout<<"nteliminados los numeros pares"<<endl;
                                     eliminapares(lista);
                                     }
                                     break;
                            case 'n':{clrscr();
                                     cout<<"nt los numeros primos"<<endl;
                                     numerosprimos(lista);
                                     }
                                     break;
                            case 'o':{clrscr();
                                     cout<<"ntordena por burbuja"<<endl;
                                     ordenaburbuja(lista);
                                     cout<<"ntlista ordenada"<<endl;
                                     imprimir(lista);
                                     }
                                     break;
                            case 'p':{clrscr();
                                     cout<<"ntimprime imvertido"<<endl;
                                     imprimeinver(lista);
                                     }
                                     break;
                                     }
                                     cout<<"ntregresa al menu [s] o [n]:";cin>>opcion;
                                     }
                              while(opcion!='n');
                              cout<<endl;
                            cout<<"ntgracias por su visita vuelva  pronto.........";
                            getche();
                              }

  Te comparto otro ejercicio donde se aplica el Método burbuja: Uso de Listas dobles que permita insertar, eliminar, modificar repetidos por el Método burbuja. El programa también no sólo realiza la búsqueda por el Método burbuja, también permite insertar, modificar y eliminar repetidos.