document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /*
  2.     Autor: Joel  Fernandez
  3.     Curso: Estructura de Datos
  4.     Ejercicio: IMPLEMENTACION DE UNA LISTA CIRCULAR
  5.     Descripcion: funciones inserta, elimina, busca y elimina
  6.     IDE: CodeBlocks
  7.     Pagina Web: http://codebotic.blogspot.com
  8.  
  9. */
  10.  
  11.  
  12. #include <iostream>
  13. #include <cstdlib>
  14. using namespace std;
  15.  
  16. struct nodo{
  17.             int nro;    //los datos seran de tipo entero
  18.             struct nodo *sgte; //puntero
  19.             };
  20.  
  21. typedef struct nodo;//definimos a nodo como un tipo de variable
  22. nodo *fin;//puntero que ira siempre al final de la lista
  23. nodo *lista;//puntero que para nosotros apuntara a la cabeza de nuestra lista
  24.  
  25. void menu1(); //declaramos las funciones a usar
  26. void insertarInicio();
  27. void insertarFinal();
  28. void mostrar();
  29. void buscarElemento();
  30. void eliminarElemento();
  31. void eliminarElementos();
  32.  
  33. /*                        Funcion Principal
  34. ---------------------------------------------------------------------*/
  35.  
  36. int main(void)
  37. {
  38.     lista = NULL;
  39.     int op;     // opcion del menu
  40.  
  41.  
  42.     system("color 0a");
  43.  
  44.     do
  45.     {
  46.         menu1();
  47.         cin>>op;
  48.  
  49.         switch(op)
  50.         {
  51.             case 1:
  52.                     insertarInicio();
  53.                     break;
  54.  
  55.             case 2:
  56.                     insertarFinal();
  57.                     break;
  58.             case 3:
  59.                     cout<<"\\n\\n Lista Circular \\n\\n";
  60.                     mostrar();
  61.                     break;
  62.  
  63.             case 4:
  64.                     buscarElemento();
  65.                     break;
  66.  
  67.             case 5:
  68.                     eliminarElemento();
  69.                     break;
  70.             case 6:
  71.                     eliminarElementos();
  72.                     break;
  73.  
  74.             default: cout<<"OPCION NO VALIDA...!!!";
  75.                      break;
  76.  
  77.  
  78.         }
  79.  
  80.         cout<<endl<<endl;
  81.         system("pause");  system("cls");
  82.  
  83.     }while(op!=7);
  84.  
  85.    return 0;
  86. }
  87.  
  88. //////////////////////MOSTRAR MENU///////////////////////////////
  89.  
  90. void menu1()
  91. {
  92.     cout<<"\\n\\t\\tLISTA ENLAZADA CIRCULAR\\n\\n";
  93.     cout<<" 1. INSERTAR AL INICIO               "<<endl;
  94.     cout<<" 2. INSERTAR AL FINAL                "<<endl;
  95.     cout<<" 3. REPORTAR LISTA                   "<<endl;
  96.     cout<<" 4. BUSCAR ELEMENTO                  "<<endl;
  97.     cout<<" 5. ELIMINAR ELEMENTO \'V\'            "<<endl;
  98.     cout<<" 6. ELIMINAR ELEMENTOS CON VALOR \'V\' "<<endl;
  99.     cout<<" 7. SALIR                            "<<endl;
  100.  
  101.     cout<<"\\n INGRESE OPCION: ";
  102. }
  103.  
  104. //////////////////////INSERTAR AL INICIO//////////////////////////
  105.  
  106. void insertarInicio()
  107. {
  108.    nodo *nuevo;
  109.    nuevo=new struct nodo;
  110.  
  111.    cout<<"\\n***INSERTA AL INICIO*****\\n";
  112.    cout<<"\\nINGRESE DATO:";
  113.    cin>>nuevo->nro;
  114.    nuevo->sgte=NULL;
  115.  
  116.    if(lista==NULL)
  117.     {
  118.         cout<<"PRIMER ELEMENTO..!!!";
  119.         lista=nuevo;
  120.         lista->sgte=lista;
  121.         fin=nuevo;
  122.       }
  123.    else
  124.      {
  125.         nuevo->sgte = lista;
  126.         lista = nuevo;
  127.         fin->sgte = lista;
  128.      }
  129.  
  130. }
  131. //////////////////INSERTAR AL FINAL/////////////////////
  132. void insertarFinal()
  133. {
  134.     nodo *nuevo;
  135.     nuevo=new struct nodo;
  136.     cout<<"\\n***INSERTA AL INICIO*****\\n";
  137.     cout<<"\\nINGRESE DATO:";
  138.     cin>>nuevo->nro;
  139.     nuevo->sgte=NULL;
  140.  
  141.      if(lista==NULL)
  142.         {
  143.              cout<<"PRIMER ELEMENTO..!!!";
  144.              lista=nuevo;
  145.              lista->sgte=lista;
  146.              fin=nuevo;
  147.         }
  148.      else
  149.         {
  150.           fin->sgte = nuevo;
  151.           nuevo->sgte = lista;
  152.           fin = nuevo;
  153.         }
  154. }
  155. //////////////////MOSTRAR TODOS LOS DATOS////////////////////////
  156. void mostrar()
  157. {   nodo *aux;
  158.     aux=lista;
  159.     int i=1;
  160.  
  161.     if(lista!=NULL)
  162.      {
  163.           do
  164.           {    cout<<"  "<<aux->nro;
  165.                aux = aux->sgte;
  166.                i++;
  167.           }while(aux!=lista);
  168.       }
  169.      else
  170.          cout<<"\\n\\n\\tLista vacia...!"<<endl;
  171.  
  172.  
  173. }
  174. //////////////////BUSCAR ELEMENTO///////////////////////
  175. void buscarElemento() //esta funcion muestra la posicion del primer dato coincidente
  176.                       //encontrado en la lista
  177. {
  178.      nodo *aux;
  179.      int i = 1, valor , flag = 0;
  180.  
  181.      cout<<"\\nINGRESE ELEMENTO A BUSCAR:";
  182.      cin>>valor;
  183.      if(lista !=NULL)
  184.      {
  185.           aux = lista;
  186.  
  187.           do
  188.           {
  189.                if(aux->nro == valor)
  190.                {
  191.                    cout<<"\\n\\n Encontrado en posicion "<< i <<endl;
  192.                    flag=1;
  193.                }
  194.                else
  195.                {
  196.                    aux = aux->sgte;
  197.                    i++;
  198.                }
  199.           }while(aux!=lista);
  200.  
  201.           if(flag==0) cout<<"\\n\\n\\tNumero no econtrado..!"<<endl;
  202.  
  203.      }
  204.      else
  205.          cout<<"\\n\\n\\tLista vacia...!"<<endl;
  206.  
  207. }
  208. ////////////////ELIMINAR ELEMENTO DETERMINADO//////////////////////
  209. void eliminarElemento()
  210. {
  211.     nodo *aux, *r, *q;
  212.     int i = 1, flag = 0,valor;
  213.  
  214.     cout<<"\\n INGRESE ELEMENTO A ELIMINAR:";
  215.     cin>>valor;
  216.  
  217.     if(lista !=NULL)
  218.      {
  219.           aux = lista;
  220.  
  221.           do
  222.           {
  223.                if(aux->nro == valor)
  224.                 {
  225.                     if(aux==lista)//si es que el dato a eliminar es el primero
  226.                     {   r=lista;
  227.                         lista=lista->sgte;
  228.                         aux=aux->sgte;
  229.                         fin->sgte=lista;
  230.                         r->sgte=NULL;
  231.                         if(fin->sgte==NULL)
  232.                         {
  233.                             lista==NULL;
  234.                             aux==NULL;
  235.                             delete(r);
  236.                             cout<<"\\nELEMENTO ELIMINADO...!!!\\n";
  237.                             return;
  238.                         }
  239.                         else
  240.                         {
  241.                             delete(r);
  242.                             cout<<"\\nELEMENTO ELIMINADO...!!!\\n";
  243.                             return;
  244.                         }
  245.                     }
  246.                    else
  247.                     {
  248.                         if(aux==fin)//si es que el dato a eliminar es al que apunta a fin
  249.                             {
  250.                             r=aux;
  251.                             aux=aux->sgte;
  252.                             q->sgte=aux;
  253.                             fin=q;
  254.                             r->sgte=NULL;
  255.                             delete(r);
  256.                             cout<<"\\nELEMENTO ELIMINADO...!!!\\n";
  257.                             return;
  258.                             }
  259.                         else
  260.                         {
  261.                             r=aux;
  262.                             aux=aux->sgte;
  263.                             q->sgte=aux;
  264.                             r->sgte=NULL;
  265.                             delete(r);
  266.                             cout<<"\\nELEMENTO ELIMINADO...!!!\\n";
  267.                             return;
  268.                         }
  269.                   }
  270.                   flag=1;
  271.                 }
  272.                 else
  273.                 {   q=aux;
  274.                     aux = aux->sgte;
  275.                     i++;
  276.                 }
  277.           }while(aux!=lista);
  278.  
  279.           if(flag==0)
  280.           cout<<"\\n\\n\\tNumero no econtrado..!"<<endl;
  281.  
  282.  
  283.     }
  284.     else
  285.       cout<<"LISTA VACIA...!!!!";
  286.  
  287.  
  288. }
  289. //////////////////////ELIMINAR REPETIDOS/////////////////////
  290. void eliminarElementos()
  291. {
  292.      nodo *aux, *r, *q;
  293.      int  flag = 0,valor;
  294.  
  295.      cout<<"\\n DATO REPETIDO A ELIMINAR:";
  296.      cin>>valor;
  297.  
  298.      if(lista !=NULL)
  299.         { aux=lista;
  300.  
  301.             while(aux->nro==valor)//si los primeros elementos son repetidos
  302.                 if(aux==lista)    //esta funcion borra a estos
  303.                   {
  304.                    r=lista;
  305.                    aux=lista->sgte;
  306.                    lista=lista->sgte;
  307.                    fin->sgte=lista;
  308.                    r->sgte=NULL;
  309.                     if(fin->sgte==NULL)
  310.                      {
  311.                         lista==NULL;
  312.                         aux==NULL;
  313.                         delete(r);
  314.                         flag=1;
  315.                       }
  316.                     else
  317.                      {
  318.                         delete(r);
  319.                         flag=1;
  320.                      }
  321.                    }
  322.           do
  323.           {
  324.                if(aux->nro == valor)
  325.                 {
  326.                     while(aux==lista)
  327.                     {
  328.                          r=lista;
  329.                          aux=lista->sgte;
  330.                          lista=lista->sgte;
  331.                          fin->sgte=lista;
  332.                          r->sgte=NULL;
  333.                         if(fin->sgte==NULL)
  334.                         {
  335.                             lista==NULL;
  336.                             aux==NULL;
  337.                             delete(r);
  338.                         }
  339.                       else
  340.                         delete(r);
  341.  
  342.                     }
  343.  
  344.                    if(aux==fin)//para si el elemento a borrar es apuntado por *fin
  345.                     {
  346.                         r=aux;
  347.                         aux=aux->sgte;
  348.                         q->sgte=aux;
  349.                         fin=q;
  350.                         r->sgte=NULL;
  351.                         delete(r);
  352.                     }
  353.                     else
  354.                     {
  355.                         r=aux;
  356.                         aux=aux->sgte;
  357.                         q->sgte=aux;
  358.                         r->sgte=NULL;
  359.                         delete(r);
  360.                     }
  361.  
  362.                     flag=1;
  363.                }
  364.                else
  365.                {   q=aux;
  366.                    aux = aux->sgte;
  367.                }
  368.           }while(aux!=lista);
  369.  
  370.           if(flag==0)
  371.             cout<<"\\n\\n\\tNumero no econtrado..!"<<endl;
  372.         }
  373.           else
  374.             cout<<"LISTA VACIA...!!!!";
  375. }
');