Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include "Nodo.h"
- using namespace std;
- template <class Tipo>
- class ListaCircular
- {
- public:
- //Precondicion: ninguna
- //Postcondicion: inicializa la lista a un estado vacio, inicio = NULL
- ListaCircular();
- //Precondicion: la lista contiene elementos o ha sido inicializada
- //Postcondicion: imprime el contenido de la lista
- void imprimirLista() const;
- //Precondicion: nuevoDato contiene datos, la lista contiene elementos o ha sido inicializada
- //Postcondicion: inicio apunta al nuevo elemento, nuevoDato es insertado al inicio de la lista
- void InsertaAlInicio(const Tipo& nuevoDato);
- //Precondicion: nuevoDato contiene datos, la lista contiene elementos o ha sido inicializada
- //Postcondicion: recorre toda la lista, el nuevo elemento es insertado al final de la lista
- void InsertaAlFinal(const Tipo& nuevoDato);
- //Precondicion: la lista contiene elementos o ha sido inicializada
- //Postcondicion: determina si la lista esta vacia, regresa true si la lista esta vacia, en otro caso regresa false
- bool ListaVacia() const;
- //Precondicion: borraDato contiene datos, la lista contiene elementos o ha sido inicializada
- //Postcondicion: si lo encuentra lo elimina, si no, manda un mensaje
- bool EliminaNodo(int borrarPosicion);
- int Buscar(const Tipo& buscaDato) const;
- int cantidadNodos() const;
- string Inicio() const;
- private:
- Nodo<Tipo> *inicio;
- };
- template <class Tipo>
- ListaCircular<Tipo>::ListaCircular()
- {
- inicio = NULL;
- }
- template <class Tipo>
- int ListaCircular<Tipo>::Buscar(const Tipo& buscaDato) const
- {
- Nodo<Tipo> *temp;
- bool encontrado = false;
- int posicion = 0;
- temp = inicio;
- if (inicio->siguiente() == inicio)
- {
- if (inicio->informacion() == buscaDato)
- {
- encontrado = true;
- posicion = 1;
- }
- }
- else
- {
- while (temp->siguiente() != inicio && !encontrado)
- {
- if (temp->informacion() == buscaDato)
- encontrado = true;
- else
- temp = temp->siguiente();
- posicion++;
- }
- }
- return posicion;
- }
- template <class Tipo>
- bool ListaCircular<Tipo>::ListaVacia() const
- {
- return (inicio == NULL);
- }
- template <class Tipo>
- void ListaCircular<Tipo>::InsertaAlInicio(const Tipo& nuevoDato)
- {
- Nodo<Tipo> *temp; temp = new Nodo<Tipo>(nuevoDato);
- if (inicio == NULL)
- {
- inicio = temp;
- inicio->siguiente() = inicio;
- }
- else
- {
- Nodo<Tipo> *temp2;
- temp2 = inicio;
- while (temp2->siguiente() != inicio)
- {
- temp2 = temp2->siguiente();
- }
- temp2->siguiente() = temp;
- temp->siguiente() = inicio;
- inicio = temp;
- }
- }
- template <class Tipo>
- void ListaCircular<Tipo>::InsertaAlFinal(const Tipo& nuevoDato)
- {
- Nodo<Tipo> *temp;
- Nodo<Tipo> *introducir = new Nodo<Tipo>(nuevoDato);
- temp = inicio;
- if (inicio == NULL)
- {
- inicio = introducir;
- inicio->siguiente() = inicio;
- }
- else
- {
- do
- {
- temp = temp->siguiente();
- } while (temp->siguiente() != inicio);
- temp->siguiente() = introducir;
- introducir->siguiente() = inicio;
- }
- }
- template<class Tipo>
- bool ListaCircular<Tipo>::EliminaNodo(int borrarPosicion)
- {
- if (inicio == NULL)
- return false;
- Nodo<Tipo> *anterior = inicio;
- Nodo<Tipo> *actual = inicio->siguiente();
- Nodo<Tipo> *temp = inicio;
- for (int i = 1; i < borrarPosicion; i++)
- {
- anterior = actual;
- actual = actual->siguiente();
- }
- while (temp->siguiente() != anterior)
- temp = temp->siguiente();
- temp->siguiente() = actual;
- delete anterior;
- inicio = actual;
- return true;
- }
- template <class Tipo>
- void ListaCircular<Tipo>::imprimirLista() const
- {
- Nodo<Tipo> *temp;
- temp = inicio;
- if (temp != NULL)
- {
- do
- {
- cout << temp->informacion() << endl;
- temp = temp->siguiente();
- } while (temp != inicio);
- }
- }
- template <class Tipo>
- int ListaCircular<Tipo>::cantidadNodos() const
- {
- Nodo<Tipo> *temp;
- temp = inicio;
- int contar = 0;
- if (temp != NULL)
- {
- do
- {
- temp = temp->siguiente();
- contar++;
- } while (temp->siguiente() != inicio);
- }
- return contar;
- }
- template <class Tipo>
- string ListaCircular<Tipo>::Inicio() const
- {
- return inicio->informacion();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement