Listas Enlazadas Genericas En C++
kefer1529 de Mayo de 2013
878 Palabras (4 Páginas)1.137 Visitas
#include <iostream>
using namespace std;
template <class Tipo>
class Nodo
{
public:
Tipo dato;
Nodo *siguiente;
public:
Nodo(Tipo dato,Nodo <Tipo> *sig = NULL)
{
this->dato=dato;
this->siguiente=sig;
}
~Nodo()
{
this->dato=0;
this->siguiente=NULL;
}
};
template <class Tipo>
class Lista
{
private:
Nodo <Tipo> *primero;
int tamanio;
public:
Lista()
{
primero = NULL;
tamanio = 0;
}
void insertarInicio(Tipo);
void insertarFinal(Tipo);
void insertar(Tipo,int);
void eliminar(Tipo);
void mostrar();
void buscar(Tipo);
};
template <class Tipo>
void Lista <Tipo> :: insertarInicio(Tipo elemento)
{
primero = new Nodo <Tipo> (elemento,primero);
tamanio++;
}
template <class Tipo>
void Lista <Tipo> :: insertarFinal(Tipo elemento)
{
Nodo <Tipo> *t;
Nodo <Tipo> *q = new Nodo <Tipo>(elemento,NULL);
if(primero==NULL)
{
primero = q;
tamanio++;
}
else
{
t = primero;
while(t->siguiente != NULL)
t = t->siguiente;
t->siguiente = q;
tamanio++;
}
}
template <class Tipo>
void Lista <Tipo> :: insertar(Tipo elemento, int posicion)
{
Nodo <Tipo> *t;
Nodo <Tipo> *q = new Nodo <Tipo> (elemento);
if(posicion == 1)
{
q->siguiente = primero;
primero = q;
}
else
{
t = primero;
for(int i=1;t!=NULL;i++)
{
if(i == posicion-1)
{
q->siguiente = t->siguiente;
t->siguiente = q;
return;
}
t = t->siguiente;
}
}
cout << "ERROR POSICION NO ENCONTRADA" <<endl;
}
template <class Tipo>
void Lista <Tipo> :: eliminar(Tipo elemento)
{
Nodo <Tipo> *p,*ant;
p = primero;
if(primero != NULL)
{
while(p!=NULL)
{
if(p->dato==elemento)
{
if(p == primero)
primero = primero->siguiente;
else
ant->siguiente = p->siguiente;
delete(p);
return;
}
ant = p;
p = p->siguiente;
}
}
else
cout << "LISTA VACIA" << endl;
}
template <class Tipo>
void Lista <Tipo> :: mostrar()
{
int i = 0;
while(primero != NULL)
{
cout << i+1 <<") " << primero->dato << endl;
primero = primero->siguiente;
...