Listas enlazadas: mayor y menor de una lista en C++

APLICACIÓN DEL MÉTODO BURBUJA EN C++

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.

CODIFICACIÓN EN C++ DEL EJERCICIO RESUELTO DE LISTAS ENLAZADAS

#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();
                              }

CAPTURA DE PANTALLA DEL EJERCICIO DE LISTAS ENLAZADAS EN C++

  • Al ejecutar el programa, se podrá ver el menu de opciones, para ingresar los elementos de la lista, se deberá elegir la primera opción.
  • En el programa se debe ingresar el límite de la lista y los elementos.
Mayor y menor de una lista
  • Retornamos al menu, escribiendo la letra S.
  • Luego, elegimos la opción de calcular la media.
  • Automáticamente el programa nos mostrará el resultado de la media del grupo de elementos ingresados.
Mayor y menor de una lista
  • Volvemos al menu y elegimos la opción de buscar elemento dentro de la lista.
  • Ingresamos el elemento a buscar y automáticamente nos debe mostrar un mensaje de texto afirmando o negando si el elemento ingresado se encuentra dentro de la lista.
  • Retornamos al menu de opciones y elegimos: calcular el mayor elemento de la lista.
  • El programa debe mostrar el elemento mayor de la lista.

Probamos con todas las opciones del menu para verificar si el resultado que nos muestra es el correcto.

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.

Para ver más ejercicios de listas enlazadas en C++, te comparte el siguiente enlace: Ejemplos de listas enlazadas usando lenguaje de programación C++