SHARE
TWEET

Double Linked List with Iterator

a guest Apr 18th, 2019 114 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. class CLista {
  6.     class CNodo {
  7.     public:
  8.         int valor;
  9.         CNodo* ant;
  10.         CNodo* sig;
  11.         CNodo(int valor=0, CNodo* ant = NULL, CNodo* sig=NULL) :
  12.         valor(valor), ant(ant), sig(sig) {}
  13.     };
  14.     class Iterator {
  15.         CNodo* it;
  16.         unsigned int pos;
  17.     public:
  18.         Iterator(unsigned int pos, CNodo* it)
  19.             : pos(pos), it(it) {}
  20.         void operator++() { this->pos++; this->it = this->it->sig; }
  21.         bool operator!=(Iterator it) { return this->pos != it.pos; }
  22.         int operator*() { return this->it->valor; }
  23.     };
  24.     CNodo* ini;
  25.     unsigned int lon;
  26. public:
  27.     CLista() {
  28.         this->ini = NULL;
  29.         this->lon = 0;
  30.     }
  31.     ~CLista() {
  32.         CNodo* aux = this->ini;
  33.         while (this->ini != NULL) {
  34.             this->ini = this->ini->sig;
  35.             delete aux;
  36.             aux = this->ini;
  37.         }
  38.     }
  39.     void agregarInicio(int valor) {
  40.         CNodo* nuevo = new CNodo(valor, NULL, this->ini);
  41.         if (this->ini != NULL)
  42.             this->ini->ant = nuevo;
  43.         this->ini = nuevo;
  44.         this->lon++;
  45.     }
  46.     void agregarFinal(int valor) {
  47.         CNodo* nuevo = new CNodo(valor);
  48.         if (this->ini == NULL)
  49.             this->ini = nuevo;
  50.         else {
  51.             CNodo* ultimo = this->obtenerUltimo();
  52.             ultimo->sig = nuevo;
  53.             nuevo->ant = ultimo;
  54.         }
  55.         this->lon++;
  56.     }
  57.     void imprimir() {
  58.         cout << "Lista en sentido progresivo" << endl;
  59.         for (CNodo* nodo = this->ini; nodo != NULL; nodo = nodo->sig)
  60.             cout << nodo->valor << " ";
  61.         cout << endl << endl;
  62.         cout << "Lista en sentido regresivo" << endl;
  63.         for (CNodo* nodo = this->obtenerUltimo(); nodo != NULL; nodo = nodo->ant)
  64.             cout << nodo->valor << " ";
  65.         cout << endl << endl;
  66.     }
  67.     Iterator begin() { return Iterator(0, this->ini); }
  68.     Iterator end() { return Iterator(this->lon, NULL); }
  69. private:
  70.     CNodo* obtenerUltimo() {
  71.         /*
  72.         CNodo* ultimo;
  73.         for(ultimo = this->ini; ultimo->sig != NULL; ultimo = ultimo->sig);
  74.         return ultimo;
  75.         */
  76.         CNodo* ultimo = this->ini;
  77.         while (ultimo->sig != NULL)
  78.             ultimo = ultimo->sig;
  79.         return ultimo;
  80.     }
  81. };
  82.  
  83. int main() {
  84.     CLista mi_lista;
  85.     mi_lista.agregarInicio(1);
  86.     mi_lista.agregarInicio(2);
  87.     mi_lista.agregarInicio(3);
  88.     mi_lista.agregarFinal(4);
  89.     mi_lista.agregarFinal(5);
  90.     mi_lista.agregarFinal(6);
  91.     mi_lista.imprimir();
  92.  
  93.     cout << "Mi lista" << endl;
  94.     for (auto valor : mi_lista)//Para cada valor en mi_vector
  95.         cout << valor << " ";
  96.    
  97.  
  98.  
  99.     system("pause>0");
  100.     return 0;
  101. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top