Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- class CLista {
- class CNodo {
- public:
- int valor;
- CNodo* ant;
- CNodo* sig;
- CNodo(int valor=0, CNodo* ant = NULL, CNodo* sig=NULL) :
- valor(valor), ant(ant), sig(sig) {}
- };
- class Iterator {
- CNodo* it;
- unsigned int pos;
- public:
- Iterator(unsigned int pos, CNodo* it)
- : pos(pos), it(it) {}
- void operator++() { this->pos++; this->it = this->it->sig; }
- bool operator!=(Iterator it) { return this->pos != it.pos; }
- int operator*() { return this->it->valor; }
- };
- CNodo* ini;
- unsigned int lon;
- public:
- CLista() {
- this->ini = NULL;
- this->lon = 0;
- }
- ~CLista() {
- CNodo* aux = this->ini;
- while (this->ini != NULL) {
- this->ini = this->ini->sig;
- delete aux;
- aux = this->ini;
- }
- }
- void agregarInicio(int valor) {
- CNodo* nuevo = new CNodo(valor, NULL, this->ini);
- if (this->ini != NULL)
- this->ini->ant = nuevo;
- this->ini = nuevo;
- this->lon++;
- }
- void agregarFinal(int valor) {
- CNodo* nuevo = new CNodo(valor);
- if (this->ini == NULL)
- this->ini = nuevo;
- else {
- CNodo* ultimo = this->obtenerUltimo();
- ultimo->sig = nuevo;
- nuevo->ant = ultimo;
- }
- this->lon++;
- }
- void imprimir() {
- cout << "Lista en sentido progresivo" << endl;
- for (CNodo* nodo = this->ini; nodo != NULL; nodo = nodo->sig)
- cout << nodo->valor << " ";
- cout << endl << endl;
- cout << "Lista en sentido regresivo" << endl;
- for (CNodo* nodo = this->obtenerUltimo(); nodo != NULL; nodo = nodo->ant)
- cout << nodo->valor << " ";
- cout << endl << endl;
- }
- Iterator begin() { return Iterator(0, this->ini); }
- Iterator end() { return Iterator(this->lon, NULL); }
- private:
- CNodo* obtenerUltimo() {
- /*
- CNodo* ultimo;
- for(ultimo = this->ini; ultimo->sig != NULL; ultimo = ultimo->sig);
- return ultimo;
- */
- CNodo* ultimo = this->ini;
- while (ultimo->sig != NULL)
- ultimo = ultimo->sig;
- return ultimo;
- }
- };
- int main() {
- CLista mi_lista;
- mi_lista.agregarInicio(1);
- mi_lista.agregarInicio(2);
- mi_lista.agregarInicio(3);
- mi_lista.agregarFinal(4);
- mi_lista.agregarFinal(5);
- mi_lista.agregarFinal(6);
- mi_lista.imprimir();
- cout << "Mi lista" << endl;
- for (auto valor : mi_lista)//Para cada valor en mi_vector
- cout << valor << " ";
- system("pause>0");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement