Advertisement
davidcastrosalinas

clase 20200929 Eliminación LLS

Sep 29th, 2020
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.91 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Nodo {
  6.     int info;
  7.     string nombre;
  8.     struct Nodo *link;
  9. };
  10. typedef Nodo *Lista;
  11.  
  12. void insertarAlInicio(Lista &l, int valor, string nombre){
  13.     Lista nuevoNodo = new(Nodo);
  14.     nuevoNodo->info = valor;
  15.     nuevoNodo->nombre = nombre;
  16.     nuevoNodo->link = l;
  17.     l = nuevoNodo;
  18. }
  19.  
  20. void mostrar(Lista l){
  21.     while(l != NULL) {
  22.         cout <<l->info<<"\t"<<l->nombre<<endl;
  23.         l = l->link;
  24.     }
  25. }
  26.  
  27. int posicionX(Lista l, string X){
  28.     int posicion = -1;
  29.     int contador = 1;
  30.     while(l != NULL) {
  31.         if(l->nombre == X){
  32.             posicion = contador;
  33.         }
  34.         contador++;
  35.         l = l->link;
  36.     }
  37.     return posicion;
  38. }
  39.  
  40. bool existe(Lista l, string X){
  41.     int encontrado = false;
  42.     while(l != NULL) {
  43.         if(l->nombre == X)
  44.             encontrado = true;
  45.  
  46.         l = l->link;
  47.     }
  48.     return encontrado;
  49. }
  50.  
  51.  
  52. void mostrarR(Lista l){
  53.     if(l == NULL)
  54.         return;
  55.     cout <<l->info<<"\t"<<l->nombre<<endl;
  56.     mostrarR(l->link);
  57. }
  58.  
  59. int sumaR(Lista l){
  60.     if(l == NULL)
  61.         return 0;
  62.  
  63.     return l->info + sumaR(l->link);
  64. }
  65.  
  66.  
  67. void mostrarRI(Lista l){
  68.     if(l == NULL)
  69.         return;
  70.     Lista tmp = l;
  71.     mostrarR(l->link);
  72.     cout <<tmp->info<<"\t"<<tmp->nombre<<endl;
  73. }
  74.  
  75. void eliminarNodoIgualK(Lista &l, int k){
  76.     if(l == NULL) {
  77.         cout <<"[X] no puedo eliminar: Lista sin elementos";
  78.         return;
  79.     }
  80.     if(l!= NULL && l->info == k){
  81.         //respaldo de la dirección que queremso eliminar
  82.         Lista nodoEliminar = l;
  83.         //cambiamos la cabeza de la lista
  84.         l = l->link;
  85.         delete(nodoEliminar);
  86.     } else {
  87.         //cuando tiene un nodo y no es el primero
  88.         Lista aux = l;
  89.         Lista siguiente = l->link;
  90.         while (aux !=  NULL){
  91.             siguiente = aux->link;
  92.             if(siguiente != NULL && siguiente->info == k){
  93.                 cout <<"[X]"<<siguiente->nombre<<endl;
  94.                 Lista nodoEliminar = siguiente;
  95.                 aux->link = siguiente->link;
  96.                 delete(nodoEliminar);
  97.             }
  98.             aux = aux->link; //con esto voy al siguiente nodo
  99.         }
  100.     }
  101.  
  102. }
  103.  
  104. void datosDePrueba(Lista &l) {
  105.  
  106.     insertarAlInicio(l, 11, "Loro");
  107.     insertarAlInicio(l, 12, "Perro");
  108.     insertarAlInicio(l, 13, "Gato");
  109.     insertarAlInicio(l, 14, "Jirafa");
  110.     insertarAlInicio(l, 15, "Lobo");
  111.     insertarAlInicio(l, 16, "Pez");
  112. }
  113.  
  114. int main()
  115. {
  116.     Lista L=NULL;
  117.     insertarAlInicio(L, 1, "Auto");
  118.     insertarAlInicio(L, 2, "Perro");
  119.     insertarAlInicio(L, 3, "Gato");
  120.     insertarAlInicio(L, 4, "Loro");
  121.     mostrar(L);
  122.     cout <<endl<<"Mostrar Recursivo"<<endl;
  123.     mostrarR(L);
  124.     cout <<endl<<"Mostrar Recursivo Inverso"<<endl;
  125.     mostrarRI(L);
  126.     cout <<"La suma es:"<< sumaR(L);
  127.     cout <<"mostrar posicion:"<<posicionX(L, "Gato")<<endl;
  128.     cout <<"mostrar posicion2:"<<posicionX(L, "leon")<<endl;
  129.  
  130.     if(true)
  131.         cout << "siempre se ejecuta"<<endl;
  132.     if(false)
  133.         cout << "Nunca siempre se ejecuta"<<endl;
  134.  
  135.     if(existe(L, "Gato"))
  136.         cout <<"fue encontrado"<<endl;
  137.     else
  138.         cout <<"No existe en la lista";
  139.  
  140.     cout <<"\n\n\nEliminación";
  141.     Lista L2 = NULL;
  142.     insertarAlInicio(L2, 1, "Loro");
  143.     insertarAlInicio(L2, 1, "Loro");
  144.     insertarAlInicio(L2, 2, "Perro");
  145.     insertarAlInicio(L2, 3, "Gato");
  146.     insertarAlInicio(L2, 4, "Jirafa");
  147.     insertarAlInicio(L2, 5, "Lobo");
  148.     insertarAlInicio(L2, 6, "Pez");
  149.     datosDePrueba(L2); //set de datos de prueba
  150.     mostrarR(L2);
  151.     eliminarNodoIgualK(L2, 1);
  152.     eliminarNodoIgualK(L2, 1);
  153.     eliminarNodoIgualK(L2, 2);
  154.     eliminarNodoIgualK(L2, 3);
  155.     eliminarNodoIgualK(L2, 4);
  156.     eliminarNodoIgualK(L2, 5);
  157.     eliminarNodoIgualK(L2, 6);
  158.     cout <<"\nDespues de Eliminación";
  159.     mostrarR(L2);
  160.     cout <<"\n\n\n";
  161.     return 0;
  162. }
  163.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement