Advertisement
AntonioVillanueva

Un ensayo de linked list ...

Sep 3rd, 2018
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.85 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //------------------------------------------------------------------------------------------
  5. struct nodo{ nodo* izq ;int dato;nodo *der;};//@direccion <- dato -> @direccion
  6. //------------------------------------------------------------------------------------------
  7. class nodos{
  8.     public:
  9.     nodos();
  10.     nodo* creaNodo(int dato);//Crea un Nodo
  11.     void leeNodos();//Lee los nodos disponibles
  12.     nodo* buscaNodo(int dato);//Busca un nodo
  13.     void borraNodo(nodo* direccion);//Borra un nodo por su direccion
  14.     void borraNodo(int dato);//Borra un nodo por dato
  15.  
  16.     private:
  17.     void leeUnNodo(nodo* unNodo);//Lee ,imprime datos de un solo NODO
  18.     nodo* primerNodo(nodo* unNodo);//Rebobina al primer nodo
  19.     nodo* actual;
  20. };
  21. //------------------------------------------------------------------------------------------
  22. //------------------------------------------------------------------------------------------
  23. //------------------------------------------------------------------------------------------
  24. nodos::nodos():actual(nullptr){};
  25. //------------------------------------------------------------------------------------------
  26. nodo* nodos::creaNodo(int dato){
  27.     nodo* nuevoNodo=new nodo();//Crea un nuevo nodo
  28.    
  29.     if (actual!=nullptr ) {actual->der=nuevoNodo;} //afecta em nodo anterior con la direccion del nodo recien creado
  30.  
  31.     nuevoNodo->dato=dato;//inicializa el dato
  32.     nuevoNodo->izq=actual;//Inicializa con la direccion del nodo anterior o Null
  33.     nuevoNodo->der=nullptr;//aun no existe ...
  34.     actual=nuevoNodo; //Actualizo el Nodo actual
  35.     return nuevoNodo;
  36. }
  37. //------------------------------------------------------------------------------------------
  38. nodo* nodos::primerNodo(nodo* unNodo){//Rebobina al primer nodo
  39.     while (unNodo->izq!=nullptr){//Mientras que no llegue al primer nodo
  40.         unNodo=unNodo->izq;//sigue bajando a izquierda
  41.     }  
  42.     return unNodo;//retorna el nodo inferior
  43. }
  44. //------------------------------------------------------------------------------------------
  45. void nodos::leeUnNodo(nodo* unNodo){//Lee ,imprime datos de un solo NODO
  46.     if (unNodo==nullptr){return;}
  47.     cout <<"NODO & "<<unNodo
  48.     <<"\t , izq &"<<unNodo->izq
  49.     <<"\t , der &"<<unNodo->der
  50.     <<" , dato = "<<unNodo->dato<<endl;
  51. }
  52. //------------------------------------------------------------------------------------------
  53. void nodos::leeNodos(){//Lee los nodos disponibles
  54.     nodo* tmp(actual);
  55.     actual=primerNodo(actual);//Rebobina al primero
  56.    
  57.     while (actual!=nullptr){//Mientras que no llegue al ultimo nodo
  58.         leeUnNodo(actual);//Lee ,imprime datos de un solo NODO
  59.         actual=actual->der;//sigue subiendo
  60.     }
  61.     actual=tmp;
  62. }
  63. //------------------------------------------------------------------------------------------
  64. nodo* nodos::buscaNodo(int dato){//Busca un nodo
  65.     nodo* tmp;
  66.     actual=primerNodo(actual) ;//Rebobina al NODO[0]
  67.  
  68.     //busca el dato en cada NODO en la lista
  69.     while (actual!=nullptr ){//Ha llegado al final de la lista de nodos ?
  70.        
  71.         if (actual->dato==dato){//encotrado ?
  72.                 cout <<" Encontrado "<<actual->dato<<endl;
  73.                 leeUnNodo(actual);
  74.                 return actual;
  75.             }//encontrado retorna nodo
  76.            
  77.             tmp=actual;
  78.             actual=actual->der; //sigue subiendo hasta el final de la lista
  79.     }
  80.     actual=tmp;
  81.    
  82.     cout << dato <<" No encontrado  ! "<<endl;
  83.     return nullptr;//no encotrado retorna nullo
  84. }
  85. //------------------------------------------------------------------------------------------
  86. void nodos::borraNodo(nodo* direccion){//Borra un nodo por su direccion
  87.     //Cose ,afecta nudos  laterales si existen
  88.     if (direccion->izq!=nullptr){
  89.         (direccion->izq)->der=direccion->der;
  90.         actual=direccion->izq;
  91.         }
  92.        
  93.     if (direccion->der!=nullptr){
  94.         (direccion->der)->izq=direccion->izq;
  95.         actual=direccion->der;
  96.         }  
  97.    
  98.     cout <<"actual "<<actual<<endl;
  99.     delete (direccion) ;//Borra el nodo
  100. }
  101. //------------------------------------------------------------------------------------------
  102. void nodos::borraNodo(int dato){//Borra un nodo por dato  
  103.     nodo* tmp;  
  104.     if ((tmp=buscaNodo(dato)) ==nullptr ){return ;} //No encontrado retorna
  105.     else{ borraNodo (tmp);}//borra por direccion ,funcion anterior
  106. }
  107. //------------------------------------------------------------------------------------------
  108. //------------------------------------------------------------------------------------------
  109. int main (){
  110.     nodos Nodos;
  111.  
  112.     //Crear una lista de nodos de forma automatica
  113.     for (int dato=100;dato<2000;dato+=100){
  114.         Nodos.creaNodo(dato);
  115.     }
  116.  
  117.    // Nodos.leeNodos();//Lectura de los Nodos, direccion y datos
  118.     Nodos.borraNodo(300);
  119.     Nodos.borraNodo(400);    
  120.  
  121.     Nodos.borraNodo(100);
  122.     Nodos.borraNodo(1900);    
  123.     Nodos.borraNodo(1950);      
  124.     Nodos.leeNodos();
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement