Está en la página 1de 7

// ListaEnlazada.cpp: define el punto de entrada de la aplicacin de consola.

//


#include "iostream"
using namespace std;


template <class T>
class cNode
{
public:
cNode(T x, cNode<T>* puntero)
{ data=x; next=puntero; };
T data;
cNode<T>* next;
};


template <class T>
class Menor
{
public:
int operator() (T a, T b){return a<b;}
};

template<typename datatype>
struct ASCListType{
typedef datatype t;
typedef Menor<t> c;
};

//template <class T>
template <class tr>
class cList
{
public:

cList(){head=NULL;}

typedef typename tr::t T;
//typedef typename tr::c comp;

Menor<T> comp;
bool Find(T x,cNode<T>** &puntero);
bool Insert(T x);
bool Delete(T x);
bool Buscar(T x);
void Mostrar();
cNode<T>* head;
};



template <class T>
bool cList<T>::Find(T dato,cNode<T>** &p)
{
p=&head;
//while (*p && ((*p)->data<dato))
while (*p && (comp((*p)->data,dato)))
{
p=&(*p)->next;
}
return (*p && ((*p)->data==dato));
}

template <class T>
bool cList<T>::Insert(T dato)
{
cNode<T>** p;
cNode<T>* node=new cNode<T>(dato,NULL);
if(Find(dato,p)) return false;
else
{
node->next=*p;
*p=node;
}
}

template <class T>
bool cList<T>::Delete(T x)
{
cNode<T>** puntero;
if(Find(x, puntero))
{
(*puntero)=(*puntero)->next;
return true;
}
else
return false;
}

template <class T>
void cList<T>::Mostrar()
{
cNode<T>* node=head;
if(head==NULL)
{
cout<<"No hay elementos";
}
else
{
cout<<head->data<<" ";
while(node->next!=NULL)
{
node=node->next;
cout<<node->data<<" ";
}
}
}


int _tmain(int argc, _TCHAR* argv[])
{
int opc=0, nodo;
bool opcion=true;
//cList<int> lista;

//cList<ASCListType> a;


cList<ASCListType<int>> a;

while(opcion)
{
cout<<"Listas enlazadas"<<endl;
cout<<"1. Ver lista"<<endl;
cout<<"2. Agregar elemento"<<endl;
cout<<"3. Eliminar elemento"<<endl;
cout<<"4. Salir"<<endl;
cout<<"Ingrese opcion: ";
cin>>opc;
switch(opc)
{
case 1:
{
cout<<"Lista: "<<endl;
a.Mostrar();
//lista.Mostrar();
cout<<endl;
}break;
case 2:
{
cout<<"Ingrese elemento: ";
cin>> nodo;
//a.Insert(nodo);
if(a.Insert(nodo)) cout<<"Elemento insertado"<<endl;
else cout<<"No insertado"<<endl;

}break;
case 3:
{
cout<<"Ingrese elemento: ";
cin>> nodo;
if(a.Delete(nodo)) cout<<"Elemento eliminado"<<endl;
else cout<<"Elemento NO eliminado"<<endl;

}break;

case 4:
{opcion=false;}break;
}
}

return 0;
}

También podría gustarte