nodo *cap

Anuncio
LISTATEMPLATE.CPP
December 20, 2001
#include <iostream.h>
#define OK 0
#define ERR -1
template <class T>
class ListaOrd
{
struct nodo
{
T info;
nodo *sig;
};
nodo *cap;
public :
ListaOrd(){cap =NULL ;}
ListaOrd(const ListaOrd &);
~ListaOrd();
ListaOrd operator =(const ListaOrd &);
void Vaciar ();
int Vacia () { return cap ==NULL ;}
int Insertar (T);
void Mostrar ();
};
template <class T>
ListaOrd<T>::ListaOrd(const ListaOrd <T>& L)
{
nodo *aux;
cap=NULL;
aux=L.cap;
while (aux )
{
Insertar(aux->info);
aux=aux->sig;
}
}
template <class T>
ListaOrd<T>::~ListaOrd()
{
Vaciar();
}
template <class T>
ListaOrd<T> ListaOrd<T>::operator =(const ListaOrd <T>& L)
{
nodo *aux;
Vaciar();
aux=L.cap;
while (aux )
{
Insertar(aux->info);
aux=aux->sig;
}
return *this ;
}
Page 1
LISTATEMPLATE.CPP
December 20, 2001
template <class T>
void ListaOrd <T>:: Vaciar ()
{
nodo *aux;
while (cap !=NULL )
{
aux=cap;
cap=cap->sig;
delete aux ;
}
}
template <class T>
int ListaOrd <T>:: Insertar (T contenido )
{
nodo *act, *ant, *nuevo;
nuevo=new nodo ;
nuevo->info=contenido;
if(cap ==NULL )
{
cap=nuevo;
nuevo->sig=NULL;
return OK;
}
if(cap ->info ==contenido )
{
delete nuevo ;
return ERR ;
}
if(cap ->info >contenido )
{
nuevo->sig=cap;
cap=nuevo;
return OK;
}
ant=cap;
act=cap->sig;
int seguir =1;
while (act !=NULL && seguir )
{
if(act ->info >=contenido )
seguir=0;
else
{
ant=act;
act=act->sig;
}
}
if(!seguir )
{
if(act ->info ==contenido )
{
delete nuevo ;
return ERR ;
}
}
ant->sig=nuevo;
nuevo->sig=act;
return OK;
Page 2
LISTATEMPLATE.CPP
December 20, 2001
}
template <class T>
void ListaOrd <T>:: Mostrar ()
{
nodo *aux;
for (aux =cap ; aux !=NULL ; aux =aux ->sig )
cout<<aux->info<<endl;
}
int ListaOrd <char *>:: Insertar (char *cadena )
{
nodo *act, *ant, *nuevo;
nuevo=new nodo ;
nuevo->info= new char [strlen (cadena )+1];
strcpy(nuevo->info,cadena);
if(cap ==NULL )
{
cap=nuevo;
nuevo->sig=NULL;
return OK;
}
if(!strcmp (cap ->info ,cadena ))
{
delete []nuevo ->info ;
delete nuevo ;
return ERR ;
}
if(strcmp (cap ->info ,cadena )>0)
{
nuevo->sig=cap;
cap=nuevo;
return OK;
}
ant=cap;
act=cap->sig;
int seguir =1;
while (act !=NULL && seguir )
{
if(strcmp (act ->info ,cadena )>= 0)
seguir=0;
else
{
ant=act;
act=act->sig;
}
}
if(!seguir )
{
if(!strcmp (act ->info ,cadena ))
{
delete []nuevo ->info ;
delete nuevo ;
return ERR ;
}
}
ant->sig=nuevo;
nuevo->sig=act;
Page 3
LISTATEMPLATE.CPP
December 20, 2001
return OK;
}
void ListaOrd <char *>:: Vaciar ()
{
nodo *aux;
while (cap !=NULL )
{
aux=cap;
cap=cap->sig;
delete []aux ->info ;
delete aux ;
}
}
class Persona
{
char nombre [30];
public :
void Pdatos (char *c) {strcpy (nombre ,c);}
int operator ==( Persona P){ return !strcmp (nombre ,P.nombre );}
int operator >(Persona P) {return strcmp (nombre ,P.nombre )>0;}
int operator >=( Persona P) {return strcmp (nombre ,P.nombre )>= 0;}
friend ostream & operator <<( ostream &, const Persona );
};
ostream& operator <<( ostream &os, const Persona P)
{
os<<"Nombre:"<<P.nombre<<endl;
return os;
}
int PedirOpcion ();
void main ()
{
ListaOrd<int > L;
int opcion ;
do
{
switch (opcion =PedirOpcion ())
{
case 1: int valor ;
cout<<"Deme un valor:"; cin>>valor;
L.Insertar(valor);
case 2:
break ;
L.Mostrar ();
break ;
}
}
while (opcion );
ListaOrd<char *> Lc;
do
{
switch (opcion =PedirOpcion ())
{
case 1: char cadena [30];
cout<<"Deme una cadena:"; cin>>cadena;
Page 4
LISTATEMPLATE.CPP
December 20, 2001
Lc.Insertar(cadena);
case 2:
break ;
Lc.Mostrar ();
break ;
}
}
while (opcion );
ListaOrd<Persona> Lp;
do
{
switch (opcion =PedirOpcion ())
{
case 1: char cadena [30];
Persona P;
cout<<"Deme un nombre:"; cin>>cadena;
P.Pdatos(cadena);
Lp.Insertar(P);
case 2:
break ;
Lp.Mostrar ();
break ;
}
}
while (opcion );
}
int PedirOpcion ()
{
int opcion ;
do
{
cout<<endl;
cout<<"0..Salir"<<endl;
cout<<"1..Insertar"<<endl;
cout<<"2..Mostrar"<<endl;
cout<<"Elija una opción:";
cin>>opcion;
}
while (opcion <0 || opcion >2);
return opcion ;
}
Page 5
Descargar