#include <iostream>
#include <stdlib.h>
using namespace std;
struct nodo{
float nro; // en este caso es un numero entero
struct nodo *sgte;
};
typedef struct nodo *Tlista;
void insertarInicio(Tlista &lista, float valor)
{
Tlista q;
q = new(struct nodo);
q->nro = valor;
q->sgte = lista;
lista = q;
}
void insertarFinal(Tlista &lista, float valor)
{
Tlista t, q = new(struct nodo);
q->nro = valor;
q->sgte = NULL;
if(lista==NULL)
{
lista = q;
}
else
{
t = lista;
while(t->sgte!=NULL)
{
t = t->sgte;
}
t->sgte = q;
}
}
int insertarAntesDespues()
{
int _op, band;
printf("\t 1. Antes de la posicion \n");
printf("\t 2. Despues de la posicion \n");
printf("\n\t Opcion : ");
scanf("%d",&_op);
if(_op==1)
band = -1;
else
band = 0;
return band;
}
void insertarElemento(Tlista &lista, float valor, int pos)
{
Tlista q, t;
int i;
q = new(struct nodo);
q->nro = valor;
if(pos==1)
{
q->sgte = lista;
lista = q;
}
else
{
int x = insertarAntesDespues();
t = lista;
for(i=1; t!=NULL; i++)
{
if(i==pos+x)
{
q->sgte = t->sgte;
t->sgte = q;
return;
}
t = t->sgte;
}
}
printf(" Error...Posicion no encontrada..!");
}
void buscarElemento(Tlista lista, float valor)
{
Tlista q = lista;
int i = 1, band = 0;
while(q!=NULL)
{
if(q->nro==valor)
{
cout<<endl<<" Encontrada en posicion "<< i <<endl;
band = 1;
}
q = q->sgte;
i++;
}
if(band==0)
printf("\n\n Numero no encontrado..!");
}
void reportarLista(Tlista lista)
{
int i = 0;
while(lista != NULL)
{
cout <<' '<< i+1 <<") " << lista->nro << endl;
lista = lista->sgte;
i++;
}
}
void eliminarElemento(Tlista &lista, float valor)
{
Tlista p, ant;
p = lista;
if(lista!=NULL)
{
while(p!=NULL)
{
if(p->nro==valor)
{
if(p==lista)
lista = lista->sgte;
else
ant->sgte = p->sgte;
delete(p);
return;
}
ant = p;
p = p->sgte;
}
}
else
printf(" Lista vacia..!");
}
void eliminaRepetidos(Tlista &lista, float valor)
{
Tlista q, ant;
q = lista;
ant = lista;
while(q!=NULL)
{
if(q->nro==valor)
{
if(q==lista) // primero elemento
{
lista = lista->sgte;
delete(q);
q = lista;
}
else
{
ant->sgte = q->sgte;
delete(q);
q = ant->sgte;
}
}
else
{
ant = q;
q = q->sgte;
}
}// fin del while
printf("\n\n Valores eliminados..!");
}
/* Funcion Principal
---------------------------------------------------------------------*/
struct dati{
float mod;
float ang;
};
int main()
{
Tlista lista = NULL;
int op; // opcion del menu
float _dato; // elemenento a ingresar
int pos; // posicion a insertar
do
{
printf("LISTA ENLAZADA SIMPLE \n");
printf("1. INSERTAR AL INICIO\n");
printf("2. INSERTAR AL FINAL\n");
printf("3. INSERTAR EN UNA POSICION \n");
printf("4. BUSCAR ELEMENTO\n");
printf("5. ELIMINAR ELEMENTO 'V'\n");
printf("6. ELIMINAR ELEMENTOS CON VALOR 'V\n");
printf("7. SALIR \n");
printf("INGRESE OPCION: ");
scanf("%d",&op);
switch(op)
{
case 1:
printf("\nNUMERO A INSERTAR ");
scanf("%f",&_dato);
insertarInicio(lista, _dato);
printf("\nMOSTRANDO LISTA\n");
reportarLista(lista);
break;
case 2:
printf("\nNUMERO A INSERTAR ");
scanf("%f",&_dato);
insertarFinal(lista, _dato );
printf("\nMOSTRANDO LISTA\n");
reportarLista(lista);
break;
case 3:
printf("\nNUMERO A INSERTAR ");
scanf("%f",&_dato);
printf("\nPosicion : ");
scanf("%d",&pos);
insertarElemento(lista, _dato, pos);
printf("\nMOSTRANDO LISTA\n");
reportarLista(lista);
break;
case 4:
printf("\nValor a buscar: ");
scanf("%f",&_dato);
buscarElemento(lista, _dato);
break;
case 5:
printf("\nValor a eliminar: ");
scanf("%f",&_dato);
eliminarElemento(lista, _dato);
printf("\nMOSTRANDO LISTA\n");
reportarLista(lista);
break;
case 6:
printf("\nValor repetido a eliminar: ");
scanf("%f",&_dato);
eliminaRepetidos(lista, _dato);
printf("\nMOSTRANDO LISTA\n");
reportarLista(lista);
break;
}
printf("\n\n");
system("pause"); system("cls");
}while(op<7);
return 0;
}