#include<iostream>
using namespace std;
typedef struct Nodo
{
int dato;
struct Nodo *sgt;
}TNodo;
typedef struct LE
{
TNodo *inicio;
}TLE;
TNodo *crearNodo(int x)
{
TNodo *nodo=(TNodo*)malloc(sizeof(TNodo));
nodo->dato=x;
nodo->sgt=NULL;
return nodo;
}
TLE *crearLista()
{
TLE *lista=(TLE*)malloc(sizeof(TLE));
lista->inicio=NULL;
return lista;
}
void insertar(TLE *lista, int x)
{
TNodo *nodo=crearNodo(x);
TNodo *p=NULL;
if(lista->inicio==NULL)
lista->inicio=nodo;
else
{
p=lista->inicio;
while(p->sgt!=NULL)
p=p->sgt;
p->sgt=nodo;
}
}
void insertarOrden(TLE *lista, int x)
{
TNodo *nodo=crearNodo(x);
TNodo *p=NULL;
int band=1;
if(lista->inicio==NULL)
lista->inicio=nodo;
else
{
p=lista->inicio;
while(band==1 && p->sgt!= NULL)
{
p=p->sgt;
if(p->dato < x && x < p->sgt->dato)
{
nodo->sgt=p->sgt;
p->sgt=nodo;
band=0;
}
}
}
}
void insertarinicio(TLE *lista, int x)
{
TNodo *nodo=crearNodo(x);
TNodo *p=NULL;
if(lista->inicio==NULL)
lista->inicio=nodo;
else
{
nodo->sgt=lista->inicio;
lista->inicio=nodo;
}
}
void insertarpos(TLE *lista, int x,int pos)
{
TNodo *nodo=crearNodo(x);
TNodo *p=NULL;
if(lista->inicio==NULL)
lista->inicio=nodo;
else
{
p=lista->inicio;
while(p->dato!=pos && p->sgt!= NULL)
{
p=p->sgt;
if(p->dato==pos)
{
nodo->sgt=p->sgt;
p->sgt=nodo;
}
}
}
}
void eliminar(TLE *lista, int dato)
{
TNodo *p=lista->inicio;
TNodo *ant=NULL;
int encontrado=0;
while((p!=NULL)&&(!encontrado))
{
if(p->dato==dato)
encontrado=1;
else
{
ant=p;
p=p->sgt;
}
}
if(p!=NULL)
{
if (ant==NULL)
{
lista->inicio=(lista->inicio)->sgt;
}
else
{
ant->sgt=p->sgt;
}
free(p);
}
}
void eliminarTodo(TLE *lista)
{
TNodo *p=NULL;
while(lista->inicio!=NULL)
{
p=lista->inicio;
lista->inicio=p->sgt;
free(p);
}
}
void Buscar(TLE *lista, int dato)
{
TNodo *p=lista->inicio;
int i=0;
int encontrado=0;
while((p!=NULL)&&(!encontrado))
{
if(p->dato==dato)
encontrado=1;
else
p=p->sgt;
i++;
}
if(encontrado==1)
cout<<endl<<" - El Elemento ["<<dato<<"] Esta en La Lista -> "<<i;
else
cout<<endl<<" - El Elemento ["<<dato<<"] No esta en la Lista";
}
void Mostrar(TLE *lista)
{
TNodo *p=lista->inicio;;
int i=1;
while(p!=NULL)
{
cout<<endl<<" - Elemento ["<<i<<"] = "<<p->dato;
i++;
p=p->sgt;
}
}
int main()
{
TLE *L=crearLista();
int N,E,B,i=0;
int opcion;
cout<<endl<<endl<<" \t\t\tMENU";
cout<<endl<<" \t\t[1] INSERTAR AL ULTIMO";
cout<<endl<<" \t\t[2] INSERTAR AL INICIO";
cout<<endl<<" \t\t[3] INSERTAR DESPUES DE";
cout<<endl;
cout<<endl<<" \t\t[4] ELIMINAR UN ELEMENTO";
cout<<endl<<" \t\t[5] ELIMINAR LISTA";
cout<<endl;
cout<<endl<<" \t\t[6] MOSTRAR ELEMENTOS";
cout<<endl<<" \t\t[7] BUSCAR";
cout<<endl<<" \t\t[8] SALIR"<<endl;
while(1)
{
cout<<endl<<" >> Ingrese Opcion: ";
cin>>opcion;
switch(opcion)
{
case 1:
i++;
cout<<" - Ingrese ["<<i<<"] elemento: ";
cin>>N;
insertarOrden(L,N);
break;
case 2:
i++;
cout<<" - Ingrese ["<<i<<"] elemento: ";
cin>>N;
insertarinicio(L,N);
break;
case 3:
i++;
int pos;
cout<<" - Ingrese ["<<i<<"] elemento: ";
cin>>N;
cout<<" - Ingrese Posicion: ";
cin>>pos;
insertarpos(L,N,pos);
break;
case 4:
cout<<endl<<endl<<" -> INGRESE ELEMENTO A ELIMINAR: ";
cin>>E;
eliminar(L,E);
break;
case 5:
eliminarTodo(L);
cout<<endl<<endl<<" -> LA LISTA ESTA VACIA: ";
break;
case 6:
cout<<endl<<" -> LOS ELEMENTOS DE LA LISTA SON:"<<endl;
Mostrar(L);
break;
case 7:
cout<<endl<<endl<<" -> INGRESE ELEMENTO A BUSCAR:";
cin>>B;
Buscar(L,B);
break;
case 8:
exit(1);
default:
cout<<endl<<endl<<" La Opcion No es Valida !!!!!!!!!:";
}
}
cout<<endl<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}