Advertisement
Guest User

Double Linked List with Iterator

a guest
Apr 18th, 2019
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement